目前的嵌入式開發大多采用linux操作系統,linux操作系統運行的一般方式都是內核(如bzImage)加上根文件系統(rootfs),內核的編譯裁剪說的很多,也不麻煩,我這裡想說的是使用busybox來制作rootfs的方法,
廢話不說那麼多,我制作了一個sh腳本程序,可以直接生成我需要的ramdisk,先將腳本貼出來:
#bash/sh
echo "Start make rootfs !"
cd /usr/src/mkOSrtfs
mkdir rootfs
cd rootfs
mkdir dev etc lib proc tmp usr var
chmod 777 tmp
mkdir usr/lib
mkdir var/lib var/lock var/log var/run var/tmp
chmod 777 var/tmp
cp -dpR /usr/src/busybox-1.14.2/_install/* .
cp -R /dev/console dev/
cp -R /dev/null dev/
cp -R /dev/zero dev/
cp -R /usr/src/busybox-1.14.2/examples/bootfloppy/etc/* etc/
dd if=/dev/zero of=/usr/src/mkOSrtfs/disk bs=1M count=32
mkfs.ext2 -m0 /usr/src/mkOSrtfs/disk
mkdir /mnt/ram
mount -o loop /usr/src/mkOSrtfs/disk /mnt/ram/
cp -R /usr/src/mkOSrtfs/rootfs/* /mnt/ram/
umount /mnt/ram
dd if=/usr/src/mkOSrtfs/disk of=/usr/src/mkOSrtfs/ramdisk.img
gzip /usr/src/mkOSrtfs/ramdisk.img
echo "End make rootfs!"
腳本寫的很簡單,能實現基本功能,沒有添加判斷,容錯之類的,就是個意思,用得到的時候,可以在上面修改;
需要說明的時候,busybox也有menuconfig選項供我們選擇,我選擇的是將busybox工具編譯成靜態庫,為了簡單和偷懶,如果編譯成動態庫,需要將用到的庫拷貝到lib目錄。
ramdisk制作好了之後,以後如果有改動,只要采用如下方式:
mkdir tmp
gzip -d ramdiak.img.gz
mount -o loop ramdisk.img tmp
#cp 需要的程序到tmp指定的文件夾
umount tmp
gzip ramdisk.img.gz
就可以了