i.MX6ULL系统烧写指南

描述

前几篇移植都是通过网络来测试的,在实际的产品开发中肯定不可能通过网络来运行,否则没网的时候产品岂不是就歇菜了。因此需要将 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。

 

解压后的文件如下:

Linux

| 准备工具

解压后里面还有2个.gz 压缩包,一个是带rootfs,一个是不带rootfs,我们是需要烧写文件系统的,所以选择 mfgtools-with-rootfs.tar.gz 这个压缩包并解压,然后进入目录 mfgtools-with-rootfsmfgtools 中, 在此目录下有几个文件夹和很多的.vbs 文件:

Linux

相关解析:

 

Profiles文件夹:要烧写文件就放到这个文件夹中;
MfgTool2.exe:烧写软件,一般不会直接打开这个软件烧写;
众多的.vbs 文件:就是配置脚本,烧写的时候通过双击这些.vbs 文件来打开烧写工具;
注意:mfg_tools 不仅能烧写I.MX6U,而且也能给 I.MX7、I.MX6Q 等芯片烧写,所以在烧写之前必须要进行配置,指定烧写的是什么芯片,烧写到哪里去,就需要依靠不同的.vbs 配置脚本进行配置;

 

Linux

众多的.vbs 烧写脚本是可以删除的,但是避免不必要的麻烦就不删除;本人使用的开发板是 EMMC 版核心板,因此只会用到 mfgtool2-yocto-mx-evk-emmc.vbs 这个烧写脚本,如果用其他的核心板请参考相应的烧写脚本。  

| 烧写步骤

连接USB OTG

MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC 中的,需要使用USB线连接电脑;

Linux

拨码开关拨到 USB 下载模式

需要根据实际开发板进行切换,下图是野火开发板的拨码开关真值表;

Linux

如果插了 TF 卡,请弹出 TF 卡,否则电脑不能识别 USB!等识别出来以后再插上 TF 卡!

第一次连接会有提示,一旦第一次设置好设备以后,后面每次连接都不会有任何提示了;

Linux

系统烧写

开发板连接电脑以后双击“mfgtool2-yocto-mx-evk-emmc.vbs”,就会出现下面那个窗口:

Linux

如果出现“符合 HID 标准的供应商定义设备”就说明连接正常,可以进行烧写,如果出现其他的字符那么就要检查连接是否正确。点击“Start”按钮即可开始烧写;  

| 系统烧写原理

需要烧写uboot、kernel、.dtb 和 rootfs这四个文件,它们一起构成了linux系统。 进入如下目录中:

L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware
目录文件如下:

 

Linux

文件夹“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官方开发板使用的,不同的板子使用不同的文件,其中需要关心这三个文件:

Linux

这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文件。如果要烧写自己的系统,就需要给编译出来的文件改成上表的名称;

files 文件夹

上图三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了,第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。files 目录中的文件和firmware 目录中的基本差不多,都是不同板子对应的 uboot、设备树文件,同样,只关心下图的四个文件:

Linux

如果要烧写自己编译出来的系统,就需要用编译出来的文件替换上面四个文件;

ucl2.xml 文件

ucl2.xml用来指定files和firmware目录要烧写的uboot和设备树文件。ucl2.xml 以“”开始,以“”结束。“”和“”之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。“”和“”之间的是针对不同存储芯片的烧写命令。整体框架如下:


    
    ......
     
    ......
    


    
     
    


    
     
    
    
     
    
    
     
    
    
     
    
    
     
    


    
     
    


    
     
    


    
     
    
ucl2.xml 首先会判断当前要向 I.MX 系列的哪个芯片烧写系统,代码如下:

 

Linux

通过读取芯片的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 的命令如下:
Loading U-boot 
“file”表示要下载的文件位置,在firmware目录下,文件名字为:
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 中的跳转命令如下:
 Jumping to OS image. 
  启动 Linux 系统以后就可以在 EMMC 上创建分区,然后烧写 uboot、zImage、.dtb(设备树)和根文件系统。    

| 烧写 NXP 官方系统

烧写步骤如下:

1、连接好 USB,拨码开关拨到 USB 下载模式。

2、弹出 TF 卡,然后按下开发板复位按键。

3、打开 串口工具。

4、双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开下载软件,如果出现“符合 HID 标准的供应商定义设备”等字样就说明下载软件已经准备就绪。点击“Start”按钮开发烧写 NXP 官方系统,烧写过程如图所示:

 

Linux

烧录过程会输出一些信息:

Linux

等待好几分钟,串口没输出就是下载完:

Linux

  烧写完成以后点击“Stop”按钮停止烧写,然后点击“Exit”键退出。拔出 USB 线,将开发板上的拨码开关拨到 EMMC 启动模式,然后重启开发板,此时就会从 EMMC 启动。只是启动以后的系统是 NXP 官方给 I.MX6ULL EVK 开发板制作的,这个系统需要输入用户名,用户名为“root”,没有密码:

Linux

成功进入系统:

Linux

    | 烧写自己的系统

准备要烧写的文件: 自己移植编译出来的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桌面,然后修改一下名称;

Linux

文明名称一定要和下面的名称一致;

原名称 修改替换的名称
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启动,成功进入系统;  

Linux

| 网络开机自启动设置

用 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

  移植工作就到这里,后续学习 Linux驱动开发!

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分