1. 从No Device Connected到成功连接问题根源解析第一次用mfgtools给开发板烧写系统时看到No Device Connected这个提示真的让人抓狂。我刚开始以为是USB线没插好反复拔插了十几次后来才发现问题出在zImage文件的配置上。这里面的门道其实很简单mfgtools在初始化阶段需要加载一个特殊配置的内核镜像而我们平时自己编译的zImage通常是用标准配置生成的。imx_v7_mfg_defconfig这个配置项很关键它专门为制造模式Manufacturing Mode做了优化。普通内核启动时会加载各种驱动模块而这个配置的内核会精简掉大部分功能只保留最基础的USB通信和存储驱动。就好比你平时用手机要开各种APP但刷机时只需要最基础的恢复模式。如果用了普通zImage就像试图用智能手机的日常系统来刷机——根本找不到设备。2. 编译配置调整实战指南2.1 修改编译脚本的关键步骤先找到你的编译脚本我的是imx6ull_alientek_emmc.sh。用文本编辑器打开后你会看到类似这样的配置行make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- imx6ull_alientek_emmc_defconfig这行代码就是问题所在需要改成make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- imx_v7_mfg_defconfig注意不同开发板的脚本名称可能不同但修改逻辑是一样的。比如有的可能是imx6ull_xxx_defconfig重点是把配置名替换成imx_v7_mfg_defconfig。改完后别急着编译先执行make clean清除之前的编译结果。我有次偷懒没执行这步结果新配置没生效白白浪费两小时找问题。2.2 编译生成新zImage运行修改后的脚本./imx6ull_alientek_emmc.sh编译完成后zImage文件会生成在arch/arm/boot/目录下。建议用file命令检查下生成的文件属性file arch/arm/boot/zImage正确的输出应该包含ARM和Linux kernel字样。如果看到x86或者data之类的说明编译过程有问题。3. 文件替换与目录结构处理3.1 定位mfgtools的关键目录找到你的mfgtools安装目录里面会有两个关键文件夹files存放内核镜像和文件系统firmware存放设备树和固件把新编译的zImage复制到这两个目录覆盖原有文件。这里有个细节容易出错有些mfgtools版本的文件结构可能不同比如有的会把zImage放在files/linux/目录下。建议先用find命令搜索现有zImage的位置find /path/to/mfgtools -name zImage3.2 处理设备树文件报错启动时可能会遇到Unable to read file imx6ull-14x14-evk.dtb错误。这是因为设备树文件不匹配导致的解决方法有两种修改mfgtools配置文件指向正确的dtb文件路径直接把你开发板对应的dtb文件复制到报错提示的路径我推荐第二种方法一劳永逸。设备树文件一般在你编译输出的arch/arm/boot/dts/目录下。4. 开发板启动模式配置技巧4.1 正确设置启动拨码开关很多新手会忽略硬件设置这一步。以i.MX6ULL为例烧写模式通常需要把启动拨码设置为0010具体看开发板手册eMMC启动模式完成后要改为0100有个实用技巧在Windows设备管理器中观察开发板连接状态。当开发板进入烧写模式时通常会显示为HID-compliant device或者USB Download Gadget。如果看到的是串口设备说明启动模式设置不对。4.2 解决USB识别问题如果还是看不到设备试试这些方法换USB线别笑真的有用换USB口建议用主板原生USB2.0接口在Linux下用lsusb命令查看设备是否被识别检查内核日志dmesg | tail我遇到过最诡异的情况是Windows自动安装了错误驱动解决方法是打开设备管理器找到未知设备手动选择驱动为USB Composite Device5. 常见问题排查手册5.1 错误现象进度条卡住不动可能原因zImage版本不匹配USB传输不稳定开发板供电不足解决方法检查zImage的生成时间戳确保是新文件换用带电源的USB Hub降低烧写速度修改mfgtools配置文件中的速率参数5.2 错误现象烧写成功但无法启动这时候需要检查eMMC分区表是否正确uboot环境变量启动参数有个取巧的办法先用SD卡启动系统然后通过dd命令把mfgtools生成的镜像写入eMMC。具体操作dd if/path/to/image of/dev/mmcblk1 bs1M statusprogress6. 高级技巧自定义mfgtools流程熟悉基本流程后可以尝试修改mfgtools的配置文件通常是ucl2.xml实现自动化分区操作多镜像并行烧写烧写后自动校验比如可以添加这样的指令段CMD stateUpdater typepush body$ dd if/dev/zero of/dev/mmcblk1 bs1M count10清除分区表/CMD CMD stateUpdater typepush body$ echo -e n\np\n1\n\n256M\nn\np\n2\n\n\nw\n | fdisk /dev/mmcblk1创建新分区/CMD修改前务必备份原文件我上次改错一个标签导致整个工具无法启动。建议先在虚拟机里测试自定义配置。