0 前言
本文详细说明如何修改和制作根文件系统,包括修改根文件系统中的配置文件;在根文件系统中加入可执行文件,最后通过uboot tftp方式烧录根文件系统和镜像。
【相关博文】
【EasyARM i.mx28学习笔记——文件IO方式操作GPIO】
【EasyARM i.mx28学习笔记——安装和使用tftp】
【EasyARM i.mx28学习笔记——minicom配置和使用】
【EasyARM i.mx28学习笔记——通过modbus tcp控制GPIO】
1 准备
若使用uboot tftp方式烧写,需要在tftp根目录中准备两个文件——uImage、rootfs.ubifs。uImage为Linux内核镜像,rootfs.ubifs为保存在Nand
Flash中根文件系统。rootfs.ubifs由rootfs文件夹制作而来,制作rootfs.ubifs需要build_rootfs.sh脚本和ubinize.cfg配置文件。
在tftpboot目录中,应包含uImage和rootfs.ubifs文件。
由于没有修改Linux内核,可先把uImage文件复制到tftp根目录,然后新建一个文件夹——例如EasyARM-rootfs。把rootfs文件夹、build_rootfs.sh和ubinize.cfg放置于该目录下,并修改build_rootfs.sh可执行权限,build_rootfs.sh脚本把rootfs文件夹中的内容制作成rootfs.ubifs文件,并复制到tftp根目录中。
图1 制作根文件系统相关文件
2 修改rootfs文件夹中相关内容
【修改配置】
例如rootfs目录中/etc/rc.d/init.d/start_userapp文件,增加固定IP地址的设置——例如ifconfig eth0 192.168.1.211
#!/bin/sh
ifconfig eth0 hw ether 02:00:92:B3:C4:A8
#ifconfig eth0 down
#you can add your app start_command three
# 增加部分 EasyARM设置为固定IP地址
ifconfig eth0 192.168.1.211
【增加可执行文件】
在rootfs文件夹中增加一个可执行文件test-gpio,该可执行文件来自【EasyARM i.mx28学习笔记——文件IO方式操作GPIO】,test-gpio复制到rootfs文件夹中root子目录中。增加test-gpio的可执行权限:
chmod a+x test-gpio
图2 增加可执行文件
3 制作烧写文件
运行build_rootfs.sh便可制作rootfs.ubifs文件,并复制到tftpboot目录中,build_rootfs.sh的具体内容如下:
#!/bin/bash
mkfs.ubifs -r rootfs -m 2048 -e 126976 -c 1900 -o ubifs.img
ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg
mv ubifs.img rootfs.ubifs
cp -av rootfs.ubifs ~/tftpboot
mkfs.ubifs和ubinize两工具已经包含在周立功提供的ubuntu ISO文件中,不需要重复安装。运行build_rootfs.sh即可制作根文件。
./build_rootfs.sh
mkfs.ubifs和ubinize指令的具体用法请参考【UBIFS介绍】
4 使用uboot烧写
【重启开发板】
若看到控制台中输出Hit any Key to stop autoboot,按下空格键(或任意键)进入uboot指令模式。
图3 进入Uboot模式
【确定uboot IP地址和PC机IP地址】
setenv ipaddr 192.168.1.212
setenv serverip 192.168.1.106
saveenv
需要保证PC机IP地址准确,uboot IP地址和PC机IP地址在同一个网段中,此时虚拟机IP地址为192.168.1.106,uboot IP地址为192.168.1.211。
【简单验证】——在uboot中尝试ping PC机IP
ping 192.168.1.106
# 返回结果
Using FEC0 device
host 192.168.1.106 is alive
【烧写内核镜像与文件系统】——在uboot中运行 run upsystem
5 必要的验证
【IP配置成功】——运行ifconfig,查看IP地址是否配置成功
ifconfig
eth0 Link encap:Ethernet HWaddr 02:00:92:B3:C4:A8
inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:434 (434.0 B) TX bytes:378 (378.0 B)
【test-gpio运行成功】——运行test-gpio,观察GPIO口输出情况
./test-gpio
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
LED Blink
6 参考资料
【1】UBIFS介绍
EasyARM i.mx28学习笔记——根文件系统rootfs修改和烧写