目標是建立一個 1GB 的 sdcard.img ,其分割區如下圖:
一、先建一個空的 sdcard.img (User 權限)
(其中 bs 是 block size)dd if=/dev/zero of=sdcard.img bs=1G count=1
查看一下檔案屬性:
file sdcard.img hexdump sdcard.img
會發現都是 0 組成的空檔案。
二、連接到 /dev/loop0 (Root 權限)
losetup /dev/loop0 sdcard.img
三、磁區分割 (Root 權限)
fdisk 指令參考sudo fdisk /dev/loop0 n p 1 [enter] +80M n p 2 [enter] [enter] t 1 b p w
四、做 Offset (Root 權限)
fdisk -lu /dev/loop0查看分割,輸出如下:
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/loop0p1 2048 165887 81920 b W95 FAT32
/dev/loop0p2 165888 2097151 965632 83 Linux
losetup -o `expr 512 \* 2048` /dev/loop1 /dev/loop0 losetup -o `expr 512 \* 165888` /dev/loop2 /dev/loop0
查看連接結果,輸出如下:
losetup -a
/dev/loop0: [0804]:9701359 (/home/lin/qemu/sdcard.img)
/dev/loop1: [0005]:1218 (/dev/loop0),偏移值 1048576
/dev/loop2: [0005]:1218 (/dev/loop0),偏移值 84934656
五、格式化 (Root 權限)
先裝 filesystem toolsapt-get install dosfstools
fdisk -lu /dev/loop0查看分割,輸出如下:
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/loop0p1 2048 165887 81920 b W95 FAT32
/dev/loop0p2 165888 2097151 965632 83 Linux
開始格式化記得如入 blocks:
mkfs.vfat /dev/loop1 81920 mkfs.ext4 /dev/loop2 965632
看一下 block id ,如下:
blkid /dev/loop1/dev/loop1: SEC_TYPE="msdos" UUID="3A38-5A24" TYPE="vfat"
blkid /dev/loop2/dev/loop2: UUID="dec7a9d5-b0bb-433b-aefb-6b4eecc28aba" TYPE="ext4"
Debug 1:
如果找不到 mkfs.vfat 的指令
解決 1:
sudo apt-get install dosfstools
七、掛載 (Root 權限)
先建立要掛的目錄mkdir /sd1 /sd2
掛載
mount /dev/loop1 /sd1 mount /dev/loop2 /sd2
查看掛載
df -h
八、清除全部(Root 權限)
先卸載umount /sd1 umount /sd2 df -h
解除連接(注意由下到上)
losetup -a losetup -d /dev/loop2 losetup -d /dev/loop1 losetup -d /dev/loop0 losetup -a
九、連接及掛載(Root 權限)
(可以8. 及 9. 反覆練習)losetup /dev/loop0 sdcard.img losetup -o `expr 512 * 2048` /dev/loop1 losetup -o `expr 512 * 165888` /dev/loop2 losetup -a mount /dev/loop1 /sd1 mount /dev/loop2 /sd2 df -h
十、產生檔案
1. bootloader 可參考文章:u-boot 編譯產生檔案:
MLO
u-boot
u-boot.bin
u-boot.img
2. kernel 可參考文章:編譯 ARM Linux 核心
產生檔案:
uImage
modules
modules
3. Rootfs 可以參考文章:建立 Rootfs
瘦身過後的 Rootfs 全部檔案,
還需要含有步驟 2. 所編譯出來的核心 modules 。
4. uEnv.txt 可參考文章:U-Boot 指令及建立 uEnv.txt
uEnv.txt -> 開機設定檔
十一、分割區整理
sdcard1 ->
第 1 個分割區,FAT 16/32 格式,有打開開機旗標,內含檔案:
-rwxr-xr-x 1 root root 45128 2012-10-30 22:19 MLO
-rwxr-xr-x 1 root root 1215711 2012-10-30 22:19 u-boot
-rwxr-xr-x 1 root root 294672 2012-10-30 22:19 u-boot.bin
-rwxr-xr-x 1 root root 294736 2012-10-30 22:19 u-boot.img
-rwxr-xr-x 1 root root 1 2012-10-30 23:29 uEnv.txt
-rwxr-xr-x 1 root root 2475616 2012-10-30 22:15 uImage
sdcard2 ->
第 2 個分割區,ext4 格式,內含 rootfs 一些能正常開機執行的檔案,
還包含我們做好的核心 modules。
十二、測試 sdcard.img
qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.imgReference:
http://pominglee.blogspot.tw/2012/10/sd-card.html
沒有留言:
張貼留言