该篇笔记主要记录系统烧写相关内容,包括使用的工具、工具的改造、官方及自制系统烧写以及遇到问题和处理方法。
大概的框架如下图:
用到的文件:mfgtool2-yocto-mx-evk-emmc.vbs
通过USB OTG接口将系统烧写进emmc中。
我现在用的是正点原子的开发板,USB下载模式的拨码开关设置如下:
相当于直接在DDR上启动Linux系统,等启动以后再向emmc中烧写完整的系统。
双击mfgtool2-yocto-mx-evk-emmc.vbs,弹出下载窗口,如下:
原理性的东西不在赘述了,大概就是用编译后的文件去替换该工具下面的文件,保证编译后的文件名要和该工具下文件是同一个名字,至于有哪几个文件,总结如下:
脚本文件 | 描述 |
zImage | 镜像文件 |
u-boot-imx6ull14x14evk_emmc.imx | uboot |
zImage-imx6ull-14x14-evk-emmc.dtb | 设备树 |
rootfs-mogpu.tar.bz2 | 根文件系统 |
主要涉及到的文件夹为firmeare和files文件夹。还有一个ucl2.xml文件,通过读取芯片的VID和PID判断出要烧写什么处理器的系统。
1.连接USB,拨码开关拨到USB下载模式。
2.弹出TF卡(如果插入了的话),复位开发板。
3.打开SecureCRT.
4.双击mfgtool2-yocto-mx-evk-emmc.vbs.如果出现“符合HID标准的供应商定义设备”说明下载软件已经准备好。点击Start开始烧写官方系统。并且可以在SecureCRT上看到具体的烧写过程。
5.烧写完成后,点击stop按钮停止烧写,点击Exit退出。拔掉USB线,将拨码开关拨到emmc启动模式,重启开发板。用户名root,没有密码,回车即可进入系统。
准备好自己编译好的文件,包括u-boot.imx、imx6ull-alientek-emmc.dtb(正点原子)、rootfs.
对于根文件系统rootfs,需要打包,命令如下:
cd rootfs/
tar -vcjf rootfs.tar.bz2*
完成以后会在rootfs目录下生成一个名为rootfs.tar.ba2的压缩包。
将以上4个文件发送到Windows系统中。
并按照如下表格进行重命名:
原名字 | 新名字 |
u-boot.imx | u-boot-imx6ull14x14evk_emmc.imx |
zImage | zImage |
imx6ull-alientek-emmc.dtb | zImage-imx6ull-14x14-evk-emmc.dtb |
rootfs.tar.bz2 | rootfs_nogpu.tar.bz2 |
替换掉对应的文件以后,按照之前NXP官方下载方式进行下载即可。
开发板连接路由器时,由以下命令分配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中,如下:
1 #!/bin/sh
2 3
PATH=/sbin:/bin:/usr/sbin:/usr/bin
4 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
5 export PATH LD_LIBRARY_PATH runlevel
6 7
#网络开机自启动设置
8 ifconfig eth0 up//打开网卡
9 #udhcpc -i eth0//通过路由器自动获取IP
10 ifconfig eth0 192.168.1.251 netmask 255.255.255.0//手动设置IP及子网掩码
11 route add default gw 192.168.1.1//添加默认网关
......
12 #cd /drivers
13 #./hello &
14 #cd /
重启开发板即可。
因为用时正点原子的开发板,为了适配该开发板,EMMC版本的系统文件命名如下:
直接复制mfgtool2-yocto-mx-evk-emmc.vbs,将其命名为mfgtool2-alientek-alpha-emmc.vbs即可。
将ucl2.xml仅仅保留EMMC烧写系统所需内容即可,文件内容改为如下:
Loading Uboot
Loading Kernel.
Loading Initramfs.
Loading device tree.
Jumping to OS image.
Sending partition shell
Partitioning...
Partitioning...
clear u-boot
arg
access boot partition 1
Sending u-boot.bin
write U-Boot to sd card
re-enable read-only access
enable boot partion 1 to boot
Waiting
for the partition ready
Formatting rootfs partition
Sending kernel zImage
write kernel image to sd card
Sending Device Tree file
write
device tree to sd card
Unmounting vfat partition
Formatting rootfs partition
Sending and writting rootfs
Finishing rootfs
write
Unmounting rootfs partition
Done
按照前面的操作,出现内核启动失败的问题。
uboot输出的log信息中有这么两行:
上述信息说明在读取“imx6ull-14x14-evk.dtb”这个设备树文件的时候出错了。
重启uboot,进入命令行模式,查看EMMC分区1里面的设备树会发现,设备树的名字不是imx6ull-14x14-evk.dtb。所以可以有两个方案解决这个问题。
1、重新配置bootcmd环境变量。缺点是每次启动都要修改该变量。所以不推荐。
2、修改u-boot源码。这是一个一劳永逸的做法。查找设备树的文件在include/configs/mx6ull_alientek_emmc.h,并在其中找到CONFIG_EXTRA_ENV_SETTINGS中将设备树的命名改为imx6ull_alientek_emmc.dtb即可,如下:
194 "findfdt="\
195 "if test $fdt_file = undefined; then " \
196 "setenv fdt_file imx6ull-alientek-emmc.dtb; " \
197 "fi;\0" \
重新烧写系统后,系统应该就可以正常启动了。
本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。