作為嵌入式系統,使用環境通常都比較惡劣,而應用又比較簡單。為系統的穩定通常都需要使用DOM、CF卡一類的存儲設備來代替硬盤。因此需要制作一個小于32M的linux運行系統。
使用到的軟件包括:syslinux, busybox, linux kernel 2.4.18, redhat 9
作為嵌入式系統,使用環境通常都比較惡劣,而應用又比較簡單。為系統的穩定通常都需要使用DOM、CF卡一類的存儲設備來代替硬盤。因此需要制作一個小于32M的linux運行系統。
一、準備軟件環境
1.一套linux的運行環境,選用redhat 9的基本安裝,需要能夠編譯內核方便以后重新編譯內核;
2.bootloader軟件,選用syslinux中的extlinux;
http://syslinux.zytor.com
3.主要系統應用程序,選用busybox;
busybox能夠以一個小型的應用程序提供整個命令集的功能。
http://www.busybox.net
二、制作可以啟動的盤
fdisk /dev/hdc1
本實驗使用cf盤+cf to ide轉換卡,用fdisk對盤進行分區,但這一步驟需要確認哪一個設備是cf卡。這個可以同dmesg來看。
mke2fs /dev/hdc1
格式化cf盤為ext2格式
mkdir /mnt/cf
mount /dev/hdc1 /mnt/cf
extlinux /mnt/cf
安裝bootloader到cf卡上。
完成以后cf卡基本可以引導,現在進行一次重啟動測試一下。
實驗結果,只需要看到Extlinux 的信息即說明安裝成功。
三、安裝內核和配置引導
由于目前只是實驗先不進行內核裁減,直接使用redhat 9的內核文件。
mount /dev/hdc1 /mnt/cf
cp /boot/vmlinuz-version /mnt/cf/
cp /boot/initrd-version.img /mnt/cf/
vi /mnt/cf/extlinux.conf
寫入一下內容:
default emblinux
display logo.txt
label emblinux
kernel vmlinuz
append root=/dev/hdc1 initrd=initrd.img splash=silent ide=nodma
首先要注意的文件名為extlinux.conf,因為在syslinux和isolinux中都是使用.cfg的后綴,這樣可能會給人一個錯覺認為也是用.cfg。結果,我在這個地方花了不少的時間,終于找到一個帖子提到使用extlinux.conf。
另外增加ide=nodma只適用在使用cf卡的情況,這個可以避免啟動時因為讀盤超時而無法繼續的錯誤(0x58)。
完成這些步驟,內核就能引導。
這一步完成,重啟能看到內核引導信息即為成功。
四、安裝主要應用程序和運行環境
mount /dev/hdc1 /mnt/cf
創建需要的目錄
cd /mnt/cf
mkdir etc bin sbin var usr lib tmp proc initrd dev
根據busybox的說明編譯,然后安裝。
make PREFIX=/mnt/cf install
復制基本的dev文件
cp -arf /dev/* /mnt/cf/dev/
需要進行一些裁減,否則會超過限制大小。
復制busybox下的examples/bootfloppy/etc目錄下文件
cp -arf examples/bootfloopy/etc/* /mnt/cf/etc
編輯init.d/rcS文件
vi /mnt/cf/etc/init.d/rcS
增加
/bin/sh
復制lib
先用ldd busybox看需要哪些so
把相應的so復制到lib目錄下,這一步比較關鍵。
復制/lib/modules和/lib/security目錄到/mnt/cf/lib目錄下,并進行一些裁減。
完成這最后一步,整個啟動盤已經可以正常啟動,并進入shell下。