上篇:CF卡分區, extlinux的安裝
中篇:構建根檔案系統
下篇:2.6核心剪裁及Busybox編譯配置及其分析
硬體平台:研華3355
軟體:busybox-1.13.3, extlinux 3.63, linux-2.6.32
開發環境: Ubuntu 9.10
(一)CF卡的分區, 格式化:
PC機上利用多口讀卡機串連CF卡,
fdisk -l 查看CF卡的分區, 例如我的CF卡對應的是/dev/sdb;
fdisk /dev/sdb,進入fdisk分區命令提示, 簡單的介紹fdisk分區過程
m 列印提示;
p 列印分區資訊;
d 刪除分區, 假設已經存在分區/dev/sdb1, 按下d後輸入1, 即刪除了此分區;
n 添加分區, 這裡只添加一個p(primary), 並佔用所有的儲存空間;
a 設定某分區為boot分區, 即可引導分區;
w 將改動寫入, 並推出fdisk, 鍵入w之前, 先用p查看當前分區情況;
q 不做改動退出;
將分區格式化為ext2格式: mkfs.ext2 /dev/sdb1
檢測ext2格式: e2fsck -a /dev/sdb1
注:如果不運行e2fsck, 系統啟動的時候會報"EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended"
(二)CF卡上bootloader的建立
常見的有GRUB, LILO, syslinux, extlinux, 後兩者更適合隨身碟/CF卡,
syslinux適用於dos分區, 而extlinux適用於ext2分區, :
http://syslinux.zytor.com/wiki/index.php/SYSLINUX
http://syslinux.zytor.com/wiki/index.php/EXTLINUX
Ubuntu 9.10用apt-get install extlinux安裝, 裝置名稱為/dev/sdb1,掛載到/mnt/cf :mount /dev/sdb1 /mnt/cf
extlinux -i /mnt/cf
注意syslinux和extlinux的不同:
syslinux的設定檔是syslinux.cfg, 要先安裝syslinux再掛載分區,例 syslinux /dev/sdb1;
extlinux的設定檔extlinux.conf, 要先把分區掛載然後安裝extlinux, 例extlinux -i /mnt/cf;
在/mnt/cf建立設定檔extlinux.conf然後編輯, 內容如下:
default emblinux
timeout 10
prompt 0
label emblinux
kernel bzImage
append noinitrd root=/dev/sda1 rw init=/linuxrc ide=nodma
注意CF卡在工控機上被識別為sda, 而不是hda上, noinitrd表示沒有掛載initrd.img,
類似於嵌入式arm平台的linux"noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
詳細解釋在下面的連結
http://www.sudu.cn/info/html/edu/20080407/262839.html
(三)向CF卡拷貝Kernel
核心的剪裁及配置, 請見http://blog.csdn.net/dos5gw/archive/2010/10/26/5965992.aspx
make mrproper #清除從前編譯核心時殘留的.O檔案
make menuconfig
make dep #(確保關鍵檔案在正確的位置)
make clean #(確保所有有關檔案都處於最新版本狀態)
make bzImage
然後把產生的/linux-2.6.32/arch/x86/boot/bzImage拷貝至CF卡分區/dev/sdb1下.
//-----------------------------------------------
//--linux大致啟動過程-------------------------
grub(bl) ->kernel -> initrd.img -> rootfs -> sbin/init(linuxrc, 僅針對busybox)
解釋如下:
kernel :案頭os中一般為vmlinuz檔案,或者zImage、bzImage;
initrd.img :臨時的根檔案系統映像全名是initial ram disk(google keywords initrd 製作),使用完後被卸載,然後轉入真正的根檔案,當然在有些嵌入式系統中也可以不卸載initrd,而繼續作為根檔案系統;
rootfs:不解釋;
sbin/init: 見http://hi.baidu.com/tcxx05/blog/item/15cfc7fc0cd0d089b801a0d8.html