文章目录
此我们需要将 uboot、linux kernel、.dtb(设备树)和 rootfs 这四个文件烧写到板子上的 EMMC、NAND 或 QSPI Flash 等其他存储设备上,这样不管有没有网络我们的产品都可以正常运行。
如何使用 NXP 官方提供的 MfgTool 工具通过 USB OTG 口来烧写系统。
一、MfgTool工具简介
MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到。此工具已经放到了开发板光盘中,路径为:5、开发工具->3、NXP官方原版MFG_TOOL烧写工具->L4.1.15_2.0.0-ga_mfg-tools.tar.gz。此软件在 Windows 下使用,对于我们来说太友好了。将此压缩包进行解压,解压完成以后会出现一个名为 L4.1.15_2.0.0-ga_mfg-tools 的文件夹,进入此文件夹,此文件夹的内容如图所示:
有两个.txt 文件和两个.gz 压缩包。.txt 文档就不去看了,重点是这两
个.gz压缩包,这两个压缩包的区别在名字上已经写的很详细了。 “without-rootfs”和“with-rootfs”,一个是带 rootfs 和一个是不带 rootfs。
选择 mfgtools-with-rootfs.tar.gz 这个压缩包,继续对其解压, 解压出一个名为 mfgtools-with-rootfs 的文件夹,此文件夹就包含有我们需要的烧写工具。进入目录 mfgtools-with-rootfs\mfgtools 中,在此目录下有几个文件夹和很多的.vbs 文件,如
我们只关心图 39.1.2 中 Profiles 这个文件夹,因为后面要烧写文件就放到这个文件夹中。MfgTool2.exe 就是烧写软件,但是我们不会直接打开这个软件烧写,mfg_tools 不仅能烧写I.MX6U,而且也能给 I.MX7、I.MX6Q 等芯片烧写,所以在烧写之前必须要进行配置,指定烧写的是什么芯片,烧写到哪里去?下面的这些众多的.vbs 文件就是配置脚本,烧写的时候通过双击这些.vbs 文件来打开烧写工具。这些.vbs 烧写脚本既可以根据处理器的不同,由用户选择向 I.MX6D、I.MX6Q、I.MX6S、I.MX7、I.MX6UL 和 I.MX6ULL 等的哪一款芯片烧写系统。也可以根据存储芯片的不同,选择向 EMMC、NAND 或 QSPI Flash 等的哪一种存储设备烧写,功能非常强大!!
其他的.vbs 烧写脚本用不到,因此可以删除掉,防止干扰我们的视线。
只会用到 mfgtool2-yocto-mx-evk-emmc.vbs 这个烧写脚本
二、MfgToll工作原理简介
1.烧写方式
1.连接USB线
MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC 中的,
2.拨码开关拨到 USB 下载模式
如果插了 TF 卡,请弹出 TF 卡,否则电脑不能识别 USB!等识别出来以后再插上 TF 卡!一切准备就绪以后,按一下开发板的复位键,此时就会进入到 USB 模式,如果是第一次进入 USB 模式的话可能会久一点,这个是免驱的,因此不需要安装驱动。第一次进入 USB 模式会在电脑右下角有如图 所示:
一旦第一次设置好设备以后,后面每次连接都不会有任何提示了。到这里,我们的开发板已经和电脑连接好了,可以开始烧写系统了。
2.系统烧写原理
开发板连接电脑以后双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开下载对话框,如图
如果报错,那么就是路径中有中文,放到一个没有中文的地方
如果出现“符合 HID 标准的供应商定义设备”就说明连接正常,可以进行烧写,点击“Start”按钮即可开始烧写,烧写什么东西呢?
肯定是烧写 uboot、Linux kernel、.dtb 和 rootfs,那么这四个应该放到哪里 MfgTool 才能访问到呢?进入如下目录中:
mfgtools/Profiles/Linux/OS Firmware
文件夹“OS Firmware”看名字就知道是存放系统固件的,我们重点关注 files、firmware 这两个文件夹,以及 ucl2.xml 这个文件。在具体看这三个文件和文件夹之前,我们先来简单了解一下 MfgTool 烧写的原理,MfgTool 其实是先通过 USB OTG 先将 uboot、kernel 和.dtb(设备树)这是三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。就相当于直接在开发板的 DDR上启动 Linux 系统,等 Linux 系统启动以后再向 EMMC 中烧写完整的系统,包括 uboot、linuxkernel、.dtb(设备树)和 rootfs,因此 MfgTool 工作过程主要分两个阶段
①、将 firmware 目录中的 uboot、linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
②、经过第①步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC 的格式化、分区等操作。EMMC 分区建立好以后就可以从 files 中读取要烧写的 uboot、linux kernel、.dtb(设备树)和 rootfs 这 4 个文件,然后将其烧写到 EMMC 中,这个就是 MfgTool 的大概工作流程。
1.firmeare 文件夹
打开 firmware 文件夹,里面有很多的.imx 结尾的 uboot 文件、一个 zImage 镜像文件、很多.dtb结尾的设备树文件。这些文件都是NXP官方开发板使用的,不同的板子使用不同的文件,其中我们需要关心的只有表 中的这三个文件:
这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文件。
如果要烧写我们的系统,就需要用我们编译出来的 zImage、u-boot.imx 和 imx6ull-luatao-emmc.dtb 这三个文件替换掉表 中这三个文件。但是名字要和表 中的一致,因此需要将 u-boot.imx 重命名为 u-boot-imx6ull14x14evk_emmc.imx,将 imx6ull-luatao-emmc.dtb重命名为 zImage-imx6ull-14x14-evk-emmc.dtb。
2.files 文件夹
将表 中的这三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了,第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。files 目录中的文件和firmware 目录中的基本差不多,都是不同板子对应的 uboot、设备树文件,同样,我们只关心表 中的四个文件:
如果要烧写我们自己编译出来的系统,就需要用我们编译出来的 zImage、u-boot.imx 和imx6ull-luatao-emmc.dtb 和 rootfs 这四个文件替换掉表中这四个文件。
3.ucl2.xml 文件
files 和 firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由 ucl2.xml 文件来完成的。ucl2.xml 以“”开始,以“”结束。 “”和“”之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。“”和“”之间的是针对不同存储芯片的烧写命令。
更多详情请看手册
三、烧写NXP官方系统
省略了,对我们来说没有什么用,直接看第四步。
四、烧写我们自制的系统
1.系统烧写
首先是准备好要烧写的原材料:
①、自己移植编译出来的 uboot 可执行文件:u-boot.imx。
②、自己移植编译出来的 zImage 镜像文件和开发板对应的.dtb(设备树),对于 I.MX6U-ALPHA 开发板来说就是 imx6ull-luatao-emmc.dtb。
③、自己构建的根文件系统 rootfs,这里我们需要对 rootfs 进行打包,进入到 Ubuntu 中的rootfs 目录中,然后使用 tar 命令对其进行打包,命令如下:
cd rootfs/
tar -vcjf rootfs.tar.bz2 *
完成以后会在 rootfs 目录下生成一个名为 rootfs.tar.bz2 的压缩包,将 rootfs.tar.bz2 发送到windows 系统中。
将上面提到的这 4 个“原材料”都发送到 Windows 系统中
材料准备好以后还不能直接进行烧写,必须对其进行重命名,否则的话 ucl2.xml 是识别不出来的,前面讲解 ucl2.xml语法的时候已经说过了,
接下来就是用我们的文件替换掉 NXP 官方的文件,先将图 39.4.2 中的 zImage、u-boot-imx6ull14x14evk_emmc.imx 和 zImage-imx6ull-14x14-evk-emmc.dtb 这三个文件拷贝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware 目录中,替换掉原来的文件。
所有 4 个文件都拷贝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files目录中,这两个操作完成以后我们就可以进行烧写了。
双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开烧写软件,点击“Start”按钮开始烧写,由于我们自己制作的 rootfs 比较小,因此烧写相对来说会快一点。
等待烧写完成
烧写完成 点击stop 再点击exit
烧写完成以后设置开发板从EMMC 启动,启动我们刚刚烧写进去的系统,测试有没有问题。
烧写成功之后你会发现卡死在下面哪种情况
这是因为我们之前设置为了从网络上启动,这里网络没有开启(后面会讲到),所以我们要修改为从emmc启动。
查看emmc分区1存在的文件
设置 bootargs 和 bootcmd
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-evk.dtb; bootz 80800000 - 83000000;'
saveenv
设置好以后直接输入 boot,或者 run bootcmd 即可启动 Linux 内核
启动成功。
2.网络开机自启设置
大家在测试网络的时候可能会发现网络不能用,这并不是因为我们将系统烧写到 EMMC 中以后网络坏了。仅仅是因为网络没有打开,我们用 NFS 挂载根文件系统的时候因为要使用 NFS服务,因此 Linux 内核会打开 eth0 这个网卡,现在我们不使用 NFS 挂载根文件系统,因此 Linux内核也就不会自动打开 eth0 网卡了。我们可以手动打开网卡,首先输入“ifconfig -a”命令查看一下 eth0 和 eth1 是否都存在,结果如图所示:
可以看出 eth0 好 eth1 都存在,既然存在我们就打开,以打开 eth0 网卡为例,输入如下命令打开 eth0:
ifconfig eth0 up
打开的时候会提示使用 LAN8710/LAN8720 的网络芯片,eth0 连接成功,并且是 100Mpbs全双工,eth0 链接准备就绪。
这个时候输入“ifconfig”命令就会看到 eth0 这个网卡,
接下来就是个 eth0 设置 IP 地址,如果你的开发板连接的路由器,那么可以通过路由器自动分配 IP 地址,命令如下:
udhcpc -i eth0 //通过路由器分配 IP 地址
如果你的开发板连接着电脑,那么就可以手动设置 IP 地址,比如设置为 192.168.1.50,命令如下:
ifconfig eth0 192.168.1.50 netmask 255.255.255.0 //设置 IP 地址和子网掩码
route add default gw 192.168.1.1 //添加默认网关
路由器自动分配的IP地址是192.168.1.7
每次开机以后都要自己手动打开网卡,然后手动设置 IP 地址也太麻烦了,有没有开机以后自动启动网卡并且设置 IP 地址的方法呢?肯定有的,我们将打开网卡,设置网卡 IP 地址的命令添加到/etc/init.d/rcS 文件中就行了,完成以后的 rcS 文件内容如下所示:
#网络开机自启动设置
8 ifconfig eth0 up
9 #udhcpc -i eth0
10 ifconfig eth0 192.168.1.251 netmask 255.255.255.0
11 route add default gw 192.168.1.1
第 8 行,打开 eth0 网卡
第 9 行,通过路由器自动获取 IP 地址。
第 10 行,手动设置 eth0 的 IP 地址和子网掩码。
第 11 行,添加默认网关。
修改好 rcS 文件以后保存并退出,重启开发板,这个时候 eth0 网卡就会在开机的时候自动启动了,我们也就不用手动添加相关设置了。
输入ifconfig查看
可以看出,网络配置成功。
五、改造我们自己的烧写工具
需要的话可以看手册