如何自行建立 rootfs
0. 請確定你已經有使用 qemu arm 版建立起來的 arm.img
1. 備份 arm.img -> arm2.img
cp arm.img arm2.img
2. 將 arm.img 掛載至 /mnt 目錄,請先確定兩個魔術數字:2048 512
mount -o loop,offset=`expr 2048 \* 512` arm.img /mnt -t ext3
ext4
此時 /mnt 目錄下的檔案即為我們要截取的 rootfs,但是我們要先修改一下。
3. 清除檔案:
a. /mnt/lib/modules/* -> 此目錄中為舊版 Linux 核心模組,我們已自行編譯
linux-3.4.X 核心,因此我們應該清掉舊版核心模組,改放新版核心模組。
b. /mnt/boot -> 舊版 Linux 核心,我們可以清掉。
c. /mnt/dev/.udev -> 清除不必要的 udev 檔案
4. 設定檔案:
a. /mnt/lib/modules/ -> 放回 linux-3.4.X 之模組檔案。
cp -a DIR/modules/lib/modules/* /mnt/lib/modules
^^^^^^^^^^^^^^^^^^^^^^^^^
b. /mnt/etc/fstab 請改成以下內容:
/dev/mmcblk0p2 / ext3 errors=remount-ro 0 1
/dev/mmcblk0p1 /boot vfat defaults 0 0
c. 接著請編輯 /mnt/etc/inittab 檔案,修改最後一行成為底下內容:
T2:23:respawn:/sbin/getty -L ttyO2 115200 vt102
d. 檢查 /mnt/etc/network/interfaces 檔案,看其內容是否如下:
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
5. 將 rootfs 截取成為 rootfs.tar.xz 以便 deploy (部屬至虛擬 sdcard.img)
/mnt# tar cfva /root/rootfs.tar.xz .
6. 解除掛載 arm.img
當我們將 rootfs 截取出來後,/mnt 目錄即不再需要使用,此時可以解除掛載,請執行
底下指令:
umount /mnt
7. 將 sdcard.img 掛載至 /mnt/sdcard1 /mnt/sdcard2 目錄
8. 複製 bootloader、Linux 核心及 uEnv.txt 至 /mnt/sdcard1,其檔案如下:
-rwxr-xr-x 1 root root 45444 2012-10-08 00:28 MLO
-rwxr-xr-x 1 root root 1370958 2012-10-08 00:29 u-boot
-rwxr-xr-x 1 root root 344872 2012-10-08 00:29 u-boot.bin
-rwxr-xr-x 1 root root 344936 2012-10-08 00:29 u-boot.img
-rwxr-xr-x 1 root root 2400 2012-10-08 00:29 uEnv.txt
-rwxr-xr-x 1 root root 2475288 2012-10-08 00:29 uImage
9. 將 rootfs.tar.xz deploy 至 /mnt/sdcard2 目錄
tar xfva rootfs.tar.xz -C /mnt/sdcard2
10. 將 sdcard.img 解除掛載
11. 執行 qemu
qemu-system-arm -M beagle -m 512 -sd ./sdcard.img -clock unix -serial stdio \
-device usb-mouse -device usb-kbd
如何確保開機正常!!
1. 核心編譯時要加入正確參數,特別是:
ext2 ext3 ext4 vfat 均要加入編譯選項,而且要為 <*>
<M> -> 模組,核心載入後才有作用
<*> -> 內建至核心中,無需載入即有作用
2. uEnv.txt 中的 uenvcmd 要設定正確,特別是要加上
run mmcargs;fatload mmc 0:1 0x8000000 uImage; bootm 0x8000000
3. 將新編之核心、uEnv.txt、MLO、u-boot.* 等檔案放入 sdcard 的第一個分割區
將修改過之 rootfs 放入 sdcard 的第二個分割區
4. 第一個分割區一定要設定 boot 旗標
沒有留言:
張貼留言