阅读说明
该系列文章,基于的平台均为Tiny4412SDK 1312;4G EMMC; 1G DDR3
带@lamar: 前缀的表示终端里面的命令 带@tiny4412: 前缀的表示开发板终端里的命令 |
准备
开始
==>>1. SD卡分区和格式化
主要分出两个分区,一个分区用来存放内核的zImage镜像文件;另一个分区用来存放文件系统,也就是本文提到的主角。
分区创建如下(需要注意自己的SD卡挂到哪一个设备上):
创建完分区之后,需要关机重启,对各个分区进行格式化。其中,kernel分区格式化城fat32;文件系统格式化成ext2。使用如下命令即可:
==>>2. busyBox编译事项
@lamar: tar xvf busyBox-1.22.1.tar
@lamar: cd busyBox-1.22.1; make menuconfig
1) 配置动态链接库和设置编译器前缀
进入BusyBox Setting菜单后进入Build Options菜单
这里编译器是arm-linux-gcc,所以前缀填arm-linux-,这里选择动态链接库,链接的是arm-linux-gcc的库,后面要从安装arm-linux-gcc的地方考出要用到的库。
2) 配置安装路径
在这里面,可以选择相对路径或者绝对路径
3) 配置模块命令
进入Linux Module Utilities
这边需要注意,先去掉 Simplified modutils 选项,然后选择 insmod,rmmod,lsmod,modprobe
4) 保存配置
进入Save Configuration to an Alternate File菜单
最后使用如下命令,进行编译即可:
@lamar: make -j; make install;
==>>3. 完善基本的配置文件并拷贝根文件系统
编译之后,会在你之前设置的安装路径下,生成如下产物:
接下来我们,需要配置一些基本的文件,让内核能够正常引导根文件系统。
1) @lamar: cd ../root_fs; mkdir dev etc sys proc mnt tmp; //创建基本的目录结构
//创建rcS文件
2) @lamar: cat > etc/init.d/rcS << EOF (rcS:run command Start)
mount -t ramfs none /dev
mount -t sysfs none /sys
mount -t proc none /proc
mount -t tmpfs none /tmp
/sbin/mdev -s
EOF
3) @lamar: mknod dev/console c 5 1 //设置终端结点
//创建inittab文件
4) @lamar: cat > etc/inittab << EOF
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh #/bin/sh前面的-表示sh会默认加载/etc/profile
EOF
//创建profile文件
5) @lamar: cat > etc/profile << EOF
export PS1=”[lamar@root \W]# ” #设置命令提示前面的那段文字
EOF
6) @lamar: mkdir lib; cp /toolschain/4.5.1/arm-none-linux-gnueabi/lib/* lib //拷贝支持busyBox的编译库,一般就是本地的编译lib库
7) @lamar: chmod 777 -R root_fs/ //修改文件权限
8) @lamar: mount /dev/sdb3 /mnt //挂载需要存放根文件系统的SD卡分区
9) @lamar: cp -rf root_fs/* /mnt //文件拷贝
10) @lamar: umount /mnt //卸载
==>>4. 配置bootargs环境变量
做完了以上所有的步骤,现在我们就可以在板子上进行验证了。首先我们需要配置bootargs,进入uboot,配置如下:
@tiny4412: set bootargs “root=/dev/mmcblk0p3 console=ttySAC0,115200 lcd=S70” //mmcblk0p3表示的mmc0的第三块分区,这一个根据你之前的分区情况来决定。
最后的效果如下(perfect~):
在此之后,我们就可以在此基础上,最一些有针对性的功能开发。
补充
==>>内核镜像的拷贝和设置开机bootcmd 1) 如上,已经对SD卡进行了分区和格式化(注意内核的分区是格式化成mkfs.vfat); 同样的,我们只需要挂载设备,然后,拷贝内核到挂载的目录即可。 2)配置bootcmd @tiny4412: set bootcmd “fatload mmc 0:2 0x40008000 zImage;bootm 0x40008000” //mmc 0:2 表示mmc0上第二块分区 @tiny4412: save 通过以上配置,就可以实现每次开机之后,系统自动去SD卡里启动内核。改善了DNW每次只能启动一次内核的问题。