前几篇移植都是通过网络来测试的,在实际的产品开发中肯定不可能通过网络来运行,否则没网的时候产品岂不是就歇菜了。因此需要将 uboot、linux kernel(内核)、.dtb(设备树)和 rootfs 这四个文件烧写到板子上的 EMMC、NAND 或 QSPI Flash 等其他存储设备上,这样不管有没有网络产品都可以正常运行,可以借助NXP 官方提供的 MfgTool 工具通过 USB OTG 口来烧写系统,此软件在 Windows 下使用,对新手非常友好; mfg_tools 这个工具本意是给 NXP 自己的开发板设计的烧写软件,所以肯定带有自家开发板对应的 uboot、linux kernel 和 rootfs 的文件。
| 获取MfgTool
读者可以直接去官网下载,这里使用的是原子提供的,可以在原子公开资料包中获取,具体路径如下:
5、开发工具->3、NXP官方原版MFG_TOOL烧写工具->L4.1.15_2.0.0-ga_mfg-tools.tar.gz。
解压后的文件如下:
| 准备工具
解压后里面还有2个.gz 压缩包,一个是带rootfs,一个是不带rootfs,我们是需要烧写文件系统的,所以选择 mfgtools-with-rootfs.tar.gz 这个压缩包并解压,然后进入目录 mfgtools-with-rootfsmfgtools 中, 在此目录下有几个文件夹和很多的.vbs 文件:
相关解析:
Profiles文件夹:要烧写文件就放到这个文件夹中; MfgTool2.exe:烧写软件,一般不会直接打开这个软件烧写; 众多的.vbs 文件:就是配置脚本,烧写的时候通过双击这些.vbs 文件来打开烧写工具;注意:mfg_tools 不仅能烧写I.MX6U,而且也能给 I.MX7、I.MX6Q 等芯片烧写,所以在烧写之前必须要进行配置,指定烧写的是什么芯片,烧写到哪里去,就需要依靠不同的.vbs 配置脚本进行配置;
众多的.vbs 烧写脚本是可以删除的,但是避免不必要的麻烦就不删除;本人使用的开发板是 EMMC 版核心板,因此只会用到 mfgtool2-yocto-mx-evk-emmc.vbs 这个烧写脚本,如果用其他的核心板请参考相应的烧写脚本。
| 烧写步骤
连接USB OTG
MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC 中的,需要使用USB线连接电脑;
拨码开关拨到 USB 下载模式
需要根据实际开发板进行切换,下图是野火开发板的拨码开关真值表;
如果插了 TF 卡,请弹出 TF 卡,否则电脑不能识别 USB!等识别出来以后再插上 TF 卡!
第一次连接会有提示,一旦第一次设置好设备以后,后面每次连接都不会有任何提示了;
系统烧写
开发板连接电脑以后双击“mfgtool2-yocto-mx-evk-emmc.vbs”,就会出现下面那个窗口:
如果出现“符合 HID 标准的供应商定义设备”就说明连接正常,可以进行烧写,如果出现其他的字符那么就要检查连接是否正确。点击“Start”按钮即可开始烧写;
| 系统烧写原理
需要烧写uboot、kernel、.dtb 和 rootfs这四个文件,它们一起构成了linux系统。 进入如下目录中:
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware目录文件如下:
文件夹“OS Firmware”看名字就知道是存放系统固件的,重点还是关注 files、firmware 这两个文件夹,以及 ucl2.xml 这个文件。
MfgTool 工作过程主要分两个阶段:
①、将 firmware 目录中的 uboot、linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
②、经过第①步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC 的格式化、分区等操作。EMMC 分区建立好以后就可以从 files 中读取要烧写的 uboot、linux kernel、.dtb(设备树)和 rootfs 这 4 个文件,然后将其烧写到 EMMC 中,这个就是 MfgTool 的大概工作流程。
firmeare 文件夹
打开 firmware 文件夹,里面有很多的.imx 结尾的 uboot 文件、一个 zImage 镜像文件、很多.dtb结尾的设备树文件。这些文件都是NXP官方开发板使用的,不同的板子使用不同的文件,其中需要关心这三个文件:
这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文件。如果要烧写自己的系统,就需要给编译出来的文件改成上表的名称;
files 文件夹
上图三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了,第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。files 目录中的文件和firmware 目录中的基本差不多,都是不同板子对应的 uboot、设备树文件,同样,只关心下图的四个文件:
如果要烧写自己编译出来的系统,就需要用编译出来的文件替换上面四个文件;
ucl2.xml 文件
ucl2.xml用来指定files和firmware目录要烧写的uboot和设备树文件。ucl2.xml 以“”和“
”之间的是针对不同存储芯片的烧写命令。整体框架如下:
ucl2.xml 首先会判断当前要向 I.MX 系列的哪个芯片烧写系统,代码如下:...... ......
通过读取芯片的VID和 PID 即可判断出当前要烧写什么处理器的系统,如果 VID=0X15A2,PID=0080,那么就表示要给 I.MX6ULL 烧写系统。
mfgtool2-yocto-mx-evk-emmc.vbs 文件
ucl2.xml文件中确定了要烧写的处理器型号以后,还要确定向什么存储设备烧写系统,这是在mfgtools/mfgtool2-yocto-mx-evk-emmc.vbs中配置;
Set wshShell = CreateObject("WScript.shell") wshShell.run "mfgtool2.exe -c ""linux"" -l ""eMMC"" -s ""board=sabresd"" -s ""mmc=1"" -s ""6uluboot=14x14evk"" -s ""6uldtb=14x14-evk""" Set wshShell = Nothing重点是“wshShell.run”这一行,这里一行调用了 mfgtool2.exe 这个软件,并且还给出了一堆的参数,其中就有“eMMC”字样,说明是向 EMMC 烧写系统,要烧写的存储设备就这样确定下来了。 继续分析ucl2.xml文件中的烧写过程 前面说了烧写分两个阶段,第一步是通过 USB OTG 向 DDR中下载系统,第二步才是正常的烧写。通过 USB OTG 向 DDR 下载 uboot 的命令如下:
“file”表示要下载的文件位置,在firmware目录下,文件名字为:Loading U-boot
u-boot-imx6ul%lite%%6uluboot%_emmc.imx“%lite%”和“%6uluboot%” 分别表示取lite和6uluboot的值,在cfg.ini文件中有定义。
cfg.ini文件
mfgtools/cfg.ini文件是一个配置文件,内容如下:
[profiles] chip = Linux [platform] board = SabreSD [LIST] name = SDCard [variable] board = sabresd mmc = 0 sxuboot=sabresd sxdtb=sdb 7duboot=sabresd 7ddtb=sdb 6uluboot=14x14ddr3arm2 6uldtb=14x14-ddr3-arm2 6ulldtb=14x14-ddr3-arm2 ldo= plus= lite=l initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot seek = 1 sxnor=qspi2 7dnor=qspi1 6ulnor=qspi1 nor_part=0
“%lite%”和“%6uluboot%”分别表示取 lite 和 6uluboot 的值,而 lite=l,6uluboot=14x14evk,因此将这个值代入以后就是:
u-boot-imx6ull14x14evk _emmc.imx这里向 DDR 中下载的是 firmware/ u-boot-imx6ull14x14evk _emmc.imx 这个 uboot 文件。同样的方法将.dtb(设备树)和 zImage 都下载到 DDR 中以后就会跳转去运行 OS,这个时候会在 MfgTool 工具中会有“Jumping to OS image”提示语句,ucl2.xml 中的跳转命令如下:
启动 Linux 系统以后就可以在 EMMC 上创建分区,然后烧写 uboot、zImage、.dtb(设备树)和根文件系统。Jumping to OS image.
烧录过程会输出一些信息:
等待好几分钟,串口没输出就是下载完:
烧写完成以后点击“Stop”按钮停止烧写,然后点击“Exit”键退出。拔出 USB 线,将开发板上的拨码开关拨到 EMMC 启动模式,然后重启开发板,此时就会从 EMMC 启动。只是启动以后的系统是 NXP 官方给 I.MX6ULL EVK 开发板制作的,这个系统需要输入用户名,用户名为“root”,没有密码:
成功进入系统:
| 烧写自己的系统
准备要烧写的文件: 自己移植编译出来的uboot文件(u-boot.imx),自己移植编译出来的zImage镜像文件,开发板对应的.dtb(设备树)mx6ull-myboard.dtb,自己构建的根文件系统rootfs; rootfs需要先打包成rootfs.tar.bz2,进入Ubuntu中的nfs目录下的rootfs目录,使用tar命令打包:
cd rootfs/ tar -vcjf rootfs.tar.bz2 *
全部复制到windows桌面,然后修改一下名称;
文明名称一定要和下面的名称一致;
原名称 | 修改替换的名称 |
---|---|
u-boot.imx | u-boot-imx6ull14x14evk_emmc.imx |
zImage | zImage(不需要重命名) |
imx6ull-myboard-emmc.dtb | zImage-imx6ull-14x14-evk-emmc.dtb |
rootfs.tar.bz2 | rootfs_nogpu.tar.bz2 |
先将上图中的 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”按钮开始烧写;
烧录完成,切换到EMMC启动,成功进入系统;
| 网络开机自启动设置
用 NFS 挂载根文件系统的时候因为要使用 NFS服务,因此 Linux 内核会打开 eth0 这个网卡,现在不使用 NFS 挂载根文件系统,因此 Linux内核也就不会自动打开 eth0 网卡了,可以手动打开网卡;
// 查看 eth0 和 eth1 是否都存在 ifconfig -a // 打开 eth0 网卡 ifconfig eth0 up // 查看网卡,会看到eth0网卡 ifconfig // 自动设置 IP 地址 udhcpc -i eth0 // 通过路由器分配 IP 地址 // 手动设置 IP 地址 ifconfig eth0 192.168.1.251 netmask 255.255.255.0 //设置 IP 地址和子网掩码 route add default gw 192.168.1.1 //添加默认网关开机自动打开网卡 设置网卡 IP 地址的命令添加到/etc/init.d/rcS 文件中:
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib export PATH LD_LIBRARY_PATH mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s #网络开机自启动设置 ifconfig eth0 up #udhcpc -i eth0 ifconfig eth0 192.168.2.50 netmask 255.255.255.0 route add default gw 192.168.2.1修改了根文件系统就需要重新压缩,然后烧录到EMMC中,再从EMMC启动系统,再ping百度来验证网络是否能用:
移植工作就到这里,后续学习 Linux驱动开发!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !