Linux学习第10天:关于系统烧写:见证奇迹

        该篇笔记主要记录系统烧写相关内容,包括使用的工具、工具的改造、官方及自制系统烧写以及遇到问题和处理方法

        大概的框架如下图:

Linux学习第10天:关于系统烧写:见证奇迹_第1张图片

一、MfgTool:

        用到的文件:mfgtool2-yocto-mx-evk-emmc.vbs

二、工作原理

1.烧写方式

1)连接USB线

Linux学习第10天:关于系统烧写:见证奇迹_第2张图片

        通过USB OTG接口将系统烧写进emmc中。

2)拨码开关拨到USB下载模式

        我现在用的是正点原子的开发板,USB下载模式的拨码开关设置如下:

Linux学习第10天:关于系统烧写:见证奇迹_第3张图片

2.系统烧写原理

        相当于直接在DDR上启动Linux系统,等启动以后再向emmc中烧写完整的系统。

        双击mfgtool2-yocto-mx-evk-emmc.vbs,弹出下载窗口,如下:

Linux学习第10天:关于系统烧写:见证奇迹_第4张图片

        原理性的东西不在赘述了,大概就是用编译后的文件去替换该工具下面的文件,保证编译后的文件名要和该工具下文件是同一个名字,至于有哪几个文件,总结如下:

脚本文件 描述
zImage 镜像文件
u-boot-imx6ull14x14evk_emmc.imx uboot
zImage-imx6ull-14x14-evk-emmc.dtb 设备树
rootfs-mogpu.tar.bz2 根文件系统

        主要涉及到的文件夹为firmearefiles文件夹。还有一个ucl2.xml文件,通过读取芯片的VID和PID判断出要烧写什么处理器的系统。

三、烧写NXP官方系统

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

2.弹出TF卡(如果插入了的话),复位开发板。

3.打开SecureCRT.

4.双击mfgtool2-yocto-mx-evk-emmc.vbs.如果出现“符合HID标准的供应商定义设备”说明下载软件已经准备好。点击Start开始烧写官方系统。并且可以在SecureCRT上看到具体的烧写过程。

5.烧写完成后,点击stop按钮停止烧写,点击Exit退出。拔掉USB线,将拨码开关拨到emmc启动模式,重启开发板。用户名root,没有密码,回车即可进入系统。

四、烧写自制系统

1.系统烧写

        准备好自己编译好的文件,包括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官方下载方式进行下载即可。

2.网络开机自启动设置

        开发板连接路由器时,由以下命令分配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 /

        重启开发板即可。

五、烧写工具改造

1.Mfgtool改造

1).确定系统文件名字。

        因为用时正点原子的开发板,为了适配该开发板,EMMC版本的系统文件命名如下:

Linux学习第10天:关于系统烧写:见证奇迹_第5张图片

2).新建.vbs文件

        直接复制mfgtool2-yocto-mx-evk-emmc.vbs,将其命名为mfgtool2-alientek-alpha-emmc.vbs即可。

3).修改ucl2.xml文件

        将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
    

2.烧写测试

        按照前面的操作,出现内核启动失败的问题。

3.解决内核启动失败问题

        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" \

        重新烧写系统后,系统应该就可以正常启动了。


本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。

你可能感兴趣的:(Linux学习,学习,linux,运维,服务器)