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 如圖所示: