一、先準備 arm.img 檔
0. 位置目錄(一般 User 權限)
cd ~/qemu_img
1. 參考 建立一個 arm.img 來建立 arm.img。
2. 做一個最原始檔案的備份
cp arm.img arm_OK.img
3. 將 QEMU 開機
參考 用 QEMU 來開機 arm.img 第 6 步驟sh runarm.sh
二、第一階段 Rootfs 瘦身
0. 位置
用 QEMU 開啟 arm.img ,登入 Root ,在 QEMU 內瘦身。1. ATP 更新、清除
apt-get update apt-get clean rm -rf /var/lib/apt/lists/* rm -rf /var/cache/apt/pkgcache.bin rm -rf /var/cache/apt/srcpkgcache.bin
2. 已安裝套件 (依需求選擇)
視窗環境、瀏灠器等,看有沒有需求,也可以選擇移除還是留著:
apt-get remove xorg iceweasel
3. 關機 QEMU
三、第二階段 Rootfs 瘦身
0. 位置 (一般 user)
cd ~/qemu_img
1. 做備份紀錄
這邊備份的檔名,以今天日期 arm_1125.img 來做備份。qemu-img -O raw arm.img arm_1125.img
2. 掛載 arm.img
可以參考 建立虛擬 SD Card 的 loset、mount 步驟,下面是用較快速的方法來掛載,概念一樣 (要做 offset )。
mount -o loop, offset=`expr 512 \* 2048` arm.img /mnt
3. 建立裝 Rootfs 的資料夾
mkdir ~/qemu_img/rootfs
4. 複製 (ROOT)
將 arm.img 內的檔案複製到 rootfsrsync -av /mnt/* ~/qemu_img/rootfs/
5. 開始檔案瘦身,刪除不必要的檔案(ROOT)
切記,此步驟在 root 權限下,要非常小心,注意目錄位置,不要刪錯檔案了!
下面幾個,可以直接刪除:
rm -rf ~/qemu_img/rootfs/root/.cache rm -rf ~/qemu_img/rootfs/root/.mozilla rm -rf ~/qemu_img/rootfs/usr/share/man/* rm -rf ~/qemu_img/rootfs/usr/share/doc/* rm -rf ~/qemu_img/rootfs/boot/* rm -rf ~/qemu_img/rootfs/dev/.udev rm -rf ~/qemu_img/rootfs/var/log/*
這邊有兩個資料夾,要刪除語系資料,
只留我們需要的:
~/qemu_img/rootfs/usr/share/locale/我們留 en_US、zh_TW,其它殺掉,
可以使用 rm 或 mc 指令來留、刪。
~/qemu_img/rootfs/usr/share/i18n/locale/這邊留 C、POSIX、en_US、zh_TW,其它殺掉,
一樣可以使用 rm 或 mc 指令來留、刪。
接下來是核心 modules ,一樣刪除,接著
參考文章 編譯 ARM Linux 核心,第七步驟,
把我們做好的模組複製進來該目錄:
rm -rf ~/qemu_img/rootfs/lib/modules/3.2.0-4-versatib rsync -av ~/qemu_img/kernel/modules/lib/3.4.100 ~/qemu_img/rootfs/lib/modules/
全部瘦身完後,可以在目錄下,
用指令來查看各個目錄中容量較大的東西有哪幾項:
du -sh * | grep M
~/qemu_img/rootfs 目錄,輸出如下:
5.9M bin
4.7M boot
4.4M etc
42M lib
5.1M sbin
354M usr
37M var
~/qemu_img/rootfs/usr 目錄,輸出如下:
36M bin
192M lib
4.3M sbin
122M share
6. 卸載 arm.img
先看一下 /mnt 有沒有在使用中,卸載需要離開該目錄。lsof /mnt
卸載
umount /mnt
解除連接(注意順序 大 -> 小)
losetup -a losetup -d /dev/loop1 losetup -d /dev/loop0 losetup -a
四、設定 Rootfs
1. ~/qemu_img/rootfs/etc/fstab
改成我們需要的設定:proc /proc proc defaults 0 0 /dev/mmcblk0p2 / auto errors=remount-ro 0 1 /dev/mmcblk0p1 /boot auto defaults 0 0
2. ~/qemu_img/rootfs/etc/inittab
最後一行加上:T2:23:respawn:/sbin/getty -L ttyO2 115200 vt102
3. ~/qemu_img/rootfs/etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp
4. ~/qemu_img/rootfs/etc/resolv.conf
nameserver 8.8.8.8
5. ~/qemu_img/rootfs/etc/hostname
隨便自訂 (例如 leenix)五、放到 sdcard.img 中
參考 建立虛擬 SD Card 的掛載方式,將 Rootfs 放至到 sdcard.img 第二分割區。
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 的檔案。
Reference:
http://pominglee.blogspot.tw/2012/10/rootfs.html
http://pominglee.blogspot.tw/2012/11/rootfs.html
沒有留言:
張貼留言