当前位置: 首页 > news >正文

生产环境linux 系统移植(第二十八期)---- 运用MfgTool 工具烧写自制的烧写自制的系统系统---- Ubuntu20.04最佳实践与性能优化

之前对这个技术只是浅尝辄止,这次花了一周时间深入研究,收获很多,整理成文分享出来。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、改造我们自己的烧写工具

1.1、确定系统文件名字

1.2、新建.vbs 文件

1.3、修改 ucl2.xml 文件

二、烧写测试

​编辑

三、解决 Linux 内核启动失败

3.1、法1:重新设置 bootcmd 环境变量值

3.2、法2:修改 uboot 源码(推荐)

总结


前言

在上一期博客中我们已经实现了将自己的系统烧写到开发板中。我们通过将NXP官方的系统更换成我们自己制作的系统来完成系统烧写,本期博客将MfgTool 这个工具改造成我们自己的工具,让其支持我们自己的开发板。

一、改造我们自己的烧写工具

要改造 MfgTool,重点是三方面:

①、针对不同的核心版,确定系统文件相关名字。

②、新建我们自己的.vbs 文件。

③、修改 ucl2.xml 文件。

1.1、确定系统文件名字

确定系统文件名字完全是为了兼容不同的产品,为了在MfgTool 工具中同时支持 EMMC NAND 这两个版本的核心板,EMMC 版本的系统文件命名如下图所示:

1.2、新建.vbs 文件

直接复制 mfgtool2-yocto-mx-evk-emmc.vbs 文件即可,将新复制的文件重命名为 mfgtool2-

alientek-alpha-emmc.vbs即可。

1.3、修改 ucl2.xml 文件

在修改 ucl2.xml 文件之前,先保存一份原始的 ucl2.xml。将 ucl2.xml 文件改为如下所示内容:

Loading U-bootLoading KernelLoading Initramfs.Loading device tree. Jumping to OS image.Sending partition shellPartitioning..Partitioning../sys/block/mmcblk0boot0/force_roSending u-boot.binWrite U-boot to sd card/sys/block/mmcblk0boot0/force_roenable boot partition 1 to bootWaiting for the partition readyFormatting roots partitionSending Kernel ImageWrite kernel image to sd cardSending Device Tree filewrite device tree to sd cardUnmounting vfat partitionFormatting roots partitionSending and writing rootsFinishing roots writeUnmounting roots partitionDone

ucl2.xml 文件在此仅保留了给 EMMC 烧写系统。

优化建议:

如果你的项目访问量较大,建议增加缓存机制。我们团队在优化后,接口响应时间从800ms降到了50ms, 效果非常明显。具体的缓存策略可以根据业务场景调整。

二、烧写测试

MfgTool 工具修改好以后就可以进行烧写测试了,将 imx6ull-alientek-emmc.dtb、u-boot-alientek-emmc.imx 和 zImage-alientek-emmc 这三个文件复制到firmware 目录中。将 imx6ull-alientek-emmc.dtbu-boot-alientek-emmc.imx、zImage-alientek-emmc rootfs-alientek-emmc.tar.bz2 这四个文件复制到 files 目录中。

点击“mfgtool2-alientek-alpha-emmc.vbs”打开 MfgTool 烧写系统,等待烧写完成,然后设

置拨码开关为 EMMC 启动,重启开发板,系统启动信息如下图所示:

从上图可以看出,出现“Starting kernel ...”以后就再也没有任何信息输出了,说明
Linux 内核启动失败了。接下来就是解决为何 Linux 内核启动失败这个问题。

三、解决 Linux 内核启动失败

上一小节我们启动系统以后发现输出“Starting kernel ...”,说明启动 Linux 的时候出问题了,仔

细观察 uboot 输出的 log 信息,会发现如下图所示两行信息:

从图可以看出,在读取“imx6ull-14x14-evk.dtb”这个设备树文件的时候出错了。

重启 uboot,进入到命令行模式,输入如下命令查看 EMMC 的分区 1 里面有没有设备树文件:

mmc dev 1 //切换到 EMMC
ls mmc 1:1 //输出 EMMC1 分区 1 中的所有文件

结果如下图所示:

从上图中可以看出,此时 EMMC 的分区 1 中是存在设备树文件的,只是文件名字为:

imx6ull-alientek-emmc.dtb,因此读取 imx6ull-14x14-evk.dtb 肯定会出错的,因为根本就不存在

这个文件。之所以出现这个错误的原因是因为 uboot 里面默认的设备树名字就是 imx6ull-14x14-

evk.dtb。解决这个问题有两种方法:

3.1、法1:重新设置 bootcmd 环境变量值

进入 uboot 的命令行,重新设置 bootcmd bootargs 这两个环境变量的值,这里要注意的是 bootargs 的值也要重新设置一下,命令如下:

setenv bootcmd 'mmc dev 1;fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 83000000
imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
设置好 bootcmd bootargs 这两个环境变量以后重启开发板,Linux 系统就可以正常启动。

3.2、法2:修改 uboot 源码(推荐)

法1每次重新烧写系统以后都要先手动设置一下 bootcmd 的值,这样有点麻烦,修改 uboot 源码就不用每次都修改了。打开 uboot 源码中的文件 include/configs/mx6ull_alientek_emmc.h,在宏 CONFIG_EXTRA_ENV_SETTINGS 中找到如下所示内容:

194 "findfdt="\
195 "if test $fdt_file = undefined; then " \
196 "if test $board_name = EVK && test $board_rev = 9X9; then " \
197     "setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
198 "if test $board_name = EVK && test $board_rev = 14X14; then " \
199     "setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
200 "if test $fdt_file = undefined; then " \
201     "echo WARNING: Could not determine dtb to use; fi; " \
202 "fi;\0" \

findfdt 就是用于确定设备树文件名字的环境变量,fdt_file 环境变量保存着设备树文件名。

196 行和 197 行用于判断设备树文件名字是否为 imx6ull-9x9-evk.dtb,第 198 行和 199 行用

于判断设备树文件名字是否为 imx6ull-14x14-evk.dtb。这两个设备树都是 NXP 官方开发板使用

的,I.MX6U-ALPHA 开发板用不到,因此直接将上述代码findfdt 的值改为如下内容:

194 "findfdt="\
195    "if test $fdt_file = undefined; then " \
196        "setenv fdt_file imx6ull-alientek-emmc.dtb; " \
197    "fi;\0" \

196 行,如果 fdt_file 未定义的话,直接设置 fdt_file= imx6ull-alientek-emmc.dtb,简单直

接,不需要任何的判断语句。修改以后重新编译 uboot,然后用将新的 uboot 烧写到开发板中,

烧写完成以后重启测试,Linux 内核启动正常。


总结

本期博客把MfgTool 这个工具改造成支持自己的开发板的版本。

http://www.jsqmd.com/news/394666/

相关文章:

  • 毕业论文神器!降AI率软件 千笔AI VS 笔捷Ai,自考党专属
  • 世毫九理论体系总览:从哲学到工程的全链路贯通
  • 专科生收藏!千笔,全网顶尖的AI论文工具
  • 2026年口碑优选:骨灰安葬工作室服务与口碑双佳推荐,告别仪式策划/宠物安葬礼仪/殡葬服务,骨灰安葬工作室排行榜单 - 品牌推荐师
  • 聚焦2026!市面上口碑好的镁球粘合厂家排行揭秘,玉米淀粉/淀粉/食用纯碱/超级生粉/小苏打,粘合剂公司推荐排行榜单 - 品牌推荐师
  • 告别无效堆砌!6款AI论文神器:真实参考文献+AIGC率低至7% - 麟书学长
  • HaiO安装与快速开始
  • YOLO26涨点改进 | 全网独家创新、细节涨点改进篇 | WACV 2025 | 引入SEFN空间增强前馈模块,有效补充了长程依赖建模中的局部空间感知缺陷,助力YOLO26有效涨点
  • 大型工业风扇哪家强?2026口碑厂家来帮忙,工业节能风扇/工业吊扇/工业大吊扇/永磁工业风扇,大型工业风扇品牌排行榜 - 品牌推荐师
  • Haio · 海鸥 - 企业级插件化应用平台
  • 照着用就行:8个AI论文网站深度测评,专科生毕业论文写作全攻略
  • AI安全智能体:全自动漏洞修复革命,让企业安全跑赢黑客一个代际
  • YOLO26涨点改进 | 全网独家创新、注意力改进篇 | ICLR 2025 | 引入TSSA一种新的注意力模块,含C2PSA二次创新改进,包含多种创新改进点,适合所有CV任务,涨点使用
  • 亲测好用!千笔·降AI率助手,MBA论文降重首选
  • AI沦为黑客“隐形跳板”?Grok与Copilot被滥用,恶意软件实现无痕迹通信与控制
  • 2026必备!9个降AI率网站深度测评,研究生降AI率必看
  • 攻击视角下Spring框架高危CVE漏洞深度剖析:实战利用、绕过技巧与防御前瞻
  • 吐血推荐!抢手爆款的AI论文软件 —— 千笔ai写作
  • 建议收藏|继续教育专属一键生成论文工具 千笔·专业学术智能体 VS 灵感风暴AI
  • Visual Memory Injection Attacks for Multi-Turn Conversations
  • 新手也能上手!用户挚爱的一键生成论文工具 —— 千笔写作工具
  • 网站五角星评分组件
  • State Design Matters How Representations Shape Dynamic Reasoning in Large Language Models
  • A Systematic Evaluation of Sample-Level Tokenization Strategies for MEG Foundation Models
  • 题解:洛谷 P2047 [NOI2007] 社交网络
  • 题解:洛谷 P5960 【模板】差分约束
  • 【MyBatis Exception】省略动态SQL中的‘‘,会造成Runtime Exception
  • 信号完整性测试中的skew
  • 启动流程全解密:从MaskRom到Loader再到Linux内核的破晓之路
  • 【医疗影像检测】VFNet模型在医疗器械目标检测中的应用与优化 - 详解