0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

i.MX6ULL系统烧写指南

玩转单片机 来源:玩转单片机 作者:noah 2022-10-24 10:58 次阅读

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

解压后的文件如下:

29469b18-51a6-11ed-a3b6-dac502259ad0.png

|准备工具

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

296b3504-51a6-11ed-a3b6-dac502259ad0.png

相关解析:

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

299d602e-51a6-11ed-a3b6-dac502259ad0.png

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

| 烧写步骤

连接USB OTG

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

29bc4e44-51a6-11ed-a3b6-dac502259ad0.png

拨码开关拨到 USB 下载模式

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

29f543de-51a6-11ed-a3b6-dac502259ad0.png

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

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

2a01c0fa-51a6-11ed-a3b6-dac502259ad0.png

系统烧写

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

2a16c0a4-51a6-11ed-a3b6-dac502259ad0.png

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

|系统烧写原理

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

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

2a2d1e3a-51a6-11ed-a3b6-dac502259ad0.png

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

2a35b018-51a6-11ed-a3b6-dac502259ad0.png

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

files 文件夹

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

2a50261e-51a6-11ed-a3b6-dac502259ad0.png

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

ucl2.xml 文件

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


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


    
     
    


    
     
    
    
     
    
    
     
    
    
     
    
    
     
    


    
     
    


    
     
    


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

2a5d5168-51a6-11ed-a3b6-dac502259ad0.png

通过读取芯片的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 官方系统,烧写过程如图所示:

2a8b4596-51a6-11ed-a3b6-dac502259ad0.png

烧录过程会输出一些信息

2a994f24-51a6-11ed-a3b6-dac502259ad0.png

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

2af72086-51a6-11ed-a3b6-dac502259ad0.png

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

2b10c45a-51a6-11ed-a3b6-dac502259ad0.png

成功进入系统:

2b3da57e-51a6-11ed-a3b6-dac502259ad0.png

|烧写自己的系统

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

2be2c522-51a6-11ed-a3b6-dac502259ad0.png

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

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

2c00617c-51a6-11ed-a3b6-dac502259ad0.png

|网络开机自启动设置

用 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百度来验证网络是否能用:

2c140420-51a6-11ed-a3b6-dac502259ad0.png

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

审核编辑:汤梓红

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

    关注

    87

    文章

    11120

    浏览量

    207854
  • 移植
    +关注

    关注

    1

    文章

    375

    浏览量

    28008
  • 开发板
    +关注

    关注

    25

    文章

    4754

    浏览量

    96108
  • 烧写
    +关注

    关注

    0

    文章

    56

    浏览量

    14188

原文标题:i.MX6ULL|系统烧写

文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX6ULL 驱动开发7—按键输入捕获与GPIO输入配置与高低电平读取

    本篇主要介绍了i.MX6ULL的按键检测的使用,主要的知识点是设备树的修改,以及GPIO的输入配置与高低电平的读取。
    的头像 发表于 05-24 09:11 5921次阅读
    <b class='flag-5'>i.MX6ULL</b> 驱动开发7—按键输入捕获与GPIO输入配置与高低电平读取

    使用i.MX6ULL开发板进行Linux根文件系统的完善

    上一篇推文讲了怎么移植根文件系统,并在i.MX6ULL开发板中运行起来,但是会出现一些提示,现在来进行根文件的完善。
    发表于 10-17 11:13 705次阅读

    移植NXP官方linux 5.4内核到i.MX6ULL开发板

    本文描述移植NXP官方 linux 5.4 内核到i.MX6ULL开发板。
    发表于 12-19 11:10 1889次阅读

    i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?

    i.MX6UL/i.MX6ULL开发常见问题》基于米尔电子 i.MX6UL/i.MX6ULL产品(V.10)2.3单独编译内核,uboot生成很多文件,具体用哪一个?答:内核编译出来
    发表于 07-01 17:50

    i.MX6ULL开发板硬件资源

    迅为i.MX6ULL 终结者开发板硬件资源非常丰富,几乎将 i.MX6ULL 芯片的所有资源都扩展引出到底板上了,底板提供了丰富的外设接口,开发板的尺寸是 190mm*125mm,充分考虑了人性化设计,整体显得十分大。
    发表于 12-29 06:18

    i.MX6ULL核心板资源

    操作系统镜像&工具提供资料提供相关的 BSP 源代码、文件系统源代码其它默认配置i.MX6ULL、512MB DDR3、4GB
    发表于 07-12 17:50

    初识 i.MX6ULL 寄存器

    裸机开发_L1_汇编LED实验0. 本节目标1. 硬件层电路2. 初识 i.MX6ULL 寄存器2.1 i.MX6ULL 时钟控制寄存器2.2 i.MX6ULL IO复用寄存器2.3
    发表于 12-20 07:13

    I.MX6ULL无法枚举USB2514是为什么?

    你好目前,I.MX6ULL开发存在一些问题。其中之一是OTG USB2无法正常挂载USB2514,无法正确枚举下游设备,只显示设备id。usb设计要注意什么。
    发表于 04-03 06:55

    I.MX6ULL UART传输问题求解

    I.MX6ULL UART传输问题
    发表于 04-21 08:09

    珠海明远智睿科技联合NXP强势推出i.MX6ull核心板

    NXP I.MX6ULL是一个高性能、低功耗、高性价比处理器系列,基于ARM Cortex-A7内核,主频可达900MHz。i.MX 6ULL应用处理器包括一个集成的电源管理模块,可以省掉外部
    发表于 04-24 14:10 504次阅读

    飞凌i.MX6ULL开发板的评测,再次进阶拥有更高的性价比

    处理器MCIMX6Y2开发设计,采用先进的ARMCortex-A7内核,运行速度高达800MHz。i.MX6ULL应用处理器包括一个集成的电源管理模块,降低了外接电源的复杂性,并简化了上电时序。 i.MX6ULL
    发表于 10-27 11:55 1374次阅读
    飞凌<b class='flag-5'>i.MX6ULL</b>开发板的评测,再次进阶拥有更高的性价比

    基于NXP i.MX6ULL处理器的FETMX6ULL-C核心板

    “性价比高,功能接口丰富,资料齐全,稳定性强”这是许多用户对飞凌FETMX6ULL-S核心板的评价。作为NXP公司一颗经典的MPU,i.MX6ULL的市场认可度无需多言。而作为NXP公司的金牌
    发表于 04-11 15:05 1048次阅读
    基于NXP <b class='flag-5'>i.MX6ULL</b>处理器的FETMX<b class='flag-5'>6ULL</b>-C核心板

    i.MX6ULL】驱动开发4——点亮LED(寄存器版)

    本篇主要介绍了如何通过操作寄存器来点亮i.MX6ULL开发板上的led,通过编写LED对应的驱动程序和应用程序,实现程序设计的分层。
    的头像 发表于 05-21 21:26 2832次阅读
    【<b class='flag-5'>i.MX6ULL</b>】驱动开发4——点亮LED(寄存器版)

    【北京迅为】i.MX6ULL开发板移植 Debian 文件系统

    【北京迅为】i.MX6ULL开发板移植 Debian 文件系统
    的头像 发表于 02-10 15:34 1008次阅读
    【北京迅为】<b class='flag-5'>i.MX6ULL</b>开发板移植 Debian 文件<b class='flag-5'>系统</b>

    基于i.MX6ULL的掉电检测设计与软件测试

    基于i.MX6ULL的掉电检测设计与软件测试基于i.MX6ULL平台设计实现掉电检测功能,首先选择一路IO,利用IO电平变化触发中断,在编写驱动时捕获该路GPIO的中断,然后在中断响应函数中发
    的头像 发表于 11-09 10:40 674次阅读
    基于<b class='flag-5'>i.MX6ULL</b>的掉电检测设计与软件测试