qemu的vexpress支持SD卡,准备以SD卡做为根文件系统启动vexpress。
1,准备SD的映像文件
使用dd命令制作一个128M的空文件
2,将映像文件格式化成ext2文件系统格式
3,将格式化好后的映像文件挂载到制定目录下,查看是否格式化成功
如果能挂载成功,并且挂载的目录下有lost+found目录,说明文件系统格式化成功。
4,下载编译busybox
首先在www.busybox.net上下载最新稳定的源代码。
与内核一样,执行配置编译选项命令:
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
配置成编译独立运行的程序,就是选择静态链接:
Busybox Setting---->
Build Options---->
配置安装目录,如安装在上述制作的空文件系统里面:
Busybox Setting---->
Installation Options---->
保存后退出,先后执行make ARCH=arm CROSS_COMPILE=arm-linux-
编译完成后执行make ARCH=arm CROSS_COMPILE=arm-linux- install,查看文件系统的内容如下:
5,配置根文件系统
busybox生成了bin,sbin与usr目录,但对于根文件系统来说,这些目录还不够。
5.1 手动完善根文件系统目录
5.2 配置启动脚本
拷贝busybox源代码目录中的examples/inittab文件,或者手动建立该文件,添加如下内容:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
新建目录/etc/init.d,并在该目录下新建rcS文件,加入如下内容:
#! /bin/sh
mount -a
mount -o remount,rw /
mdev -s
mdev根据内核的uevent事件,创建/dev目录下的设备节点。 mdev依赖于sysfs文件系统,所以先用mount -a挂载文件系统。
使用sd卡作为根文件系统,要求根文件系统可以读写,内核在启动过程中是以只读方式挂载根文件系统的,所以这里需要把根文件系统重新挂载成可读写的。
因为etc/init.d/rcS是脚本文件,需要可执行权限:
chmod a+x ./etc/init.d/rcS
mount命令需要/etc/fstab文件,新建该文件并加入如下内容:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
sysfs /sys sysfs nodev 0 0
最后,因为是准备根文件系统,修改所有文件的所有者为root:
sudo chown root:root * -R
完成修改,卸载掉挂载:
sudo umount ./rootfs
6,测试根文件系统
使用命令测试根文件系统的运行:
qemu-system-armw.exe -M vexpress-a9 -kernel e:\SourceCode\zImage -m 512M -append "root=/dev/mmcblk0" -sd e:\SourceCode\ext2.img
运行后查看由busybox动态创建的文件 /dev /sys /proc 如图所示: