最小的Linux系統(tǒng)制作過(guò)程詳解
#cp /usr/src/linux-2.4.20-8/arch/i386/boot/bzImage /babylinux/
七,編譯busybox
1,busybox簡(jiǎn)介
busybox是一個(gè)集成了一百多個(gè)最常用linux命令和工具的軟件,他甚至還集成了一個(gè)http服務(wù)器和一個(gè)telnet服務(wù)器,而所有這一切功能卻只有區(qū)區(qū)1M左右的大小.我們平時(shí)用的那些linux命令就好比是分力式的電子元件,而busybox就好比是一個(gè)集成電路,把常用的工具和命令集成壓縮在一個(gè)可執(zhí)行文件里,功能基本不變,而大小卻小很多倍,在嵌入式linux應(yīng)用中,busybox有非常廣的應(yīng)用,另外,大多數(shù)linux發(fā)行版的安裝程序中都有busybox的身影,安裝linux的時(shí)候案ctrl+alt+F2就能得到一個(gè)控制臺(tái),而這個(gè)控制臺(tái)中的所有命令都是指向busybox的鏈接.
Busybox的小身材大作用的特性,給制作一張軟盤(pán)的linux帶來(lái)了及大方便.
2,busybox的用法
可以這樣用busybox
#busybox ls
他的功能就相當(dāng)運(yùn)行l(wèi)s命令
最常用的用法是建立指向busybox的鏈接,不同的鏈接名完成不同的功能.
#ln -s busybox ls
#ln -s busybox rm
#ln -s busybox mkdir
然后分別運(yùn)行這三個(gè)鏈接:
#./ls
#./rm
#./mkdir
就可以分別完成了ls rm 和mkdir命令的功能.雖然他們都指向同一個(gè)可執(zhí)行程序busybox
但是只要鏈接名不同,完成的功能就不同,busybox就是這么的神奇.
很多l(xiāng)inux網(wǎng)站都提供busybox的源代碼下載.目前版本是busybox1.0正式版.
3,配置busybox
busybox的配置程序和linux內(nèi)核菜單配置方式簡(jiǎn)直一模一樣.熟悉用make menuconfig方式配置linux內(nèi)核的朋友很容易上手.
#cp busybox-1.00.tar.gz /babylinux
#cd /babylinux
#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig
下面是需要編譯進(jìn)busybox的功能選項(xiàng),其他的可以根據(jù)需要自選,但是同樣不要太貪心.
General Configuration應(yīng)該選的選項(xiàng)
Show verbose applet usage messages
Runtime SUID/SGID configuration via /etc/busybox.conf
Build Options
Build BusyBox as a static binary (no shared libs)
這個(gè)選項(xiàng)是一定要選擇的,這樣才能把busybox編譯成靜態(tài)鏈接的可執(zhí)行文件,運(yùn)行時(shí)才獨(dú)立于其他函數(shù)庫(kù).否則必需要其他庫(kù)文件才能運(yùn)行,在單一個(gè)linux內(nèi)核不能使他正常工作.
Installation Options
Don't use /usr
這個(gè)選項(xiàng)也一定要選,否則make install 后busybox將安裝在原系統(tǒng)的/usr下,這將覆蓋掉系統(tǒng)原有的命令.選擇這個(gè)選項(xiàng)后,make install后會(huì)在busybox目錄下生成一個(gè)叫_install的目錄,里面有busybox和指向他的鏈接.
其他選項(xiàng)都是一些linux基本命令選項(xiàng),自己需要哪些命令就編譯進(jìn)去,一般用默認(rèn)的就可以了.
配置好后退出并保存.
4,編譯并安裝busybox
#make
#make install
編譯好后在busybox目錄下生成子目錄_install,里面的內(nèi)容:
drwxr-xr-x 2 root root 4096 11月 24 15:28 bin
lrwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin
其中可執(zhí)行文件busybox在bin目錄下,其他的都是指向他的符號(hào)鏈接.
我編譯出來(lái)的busybox可執(zhí)行文件是935K,加上符號(hào)鏈接,整個(gè)_install目錄是952K.加上845K的內(nèi)核不是已經(jīng)超過(guò)1440K了嗎?別擔(dān)心,我們將對(duì)整個(gè)根文件系統(tǒng)做大幅度的壓縮.
八,制作根文件系統(tǒng)
1,基本目錄結(jié)構(gòu)
#cd /babylinux/rootfs
#mkdir etc usr var tmp proc home root dev
其中etc,proc和dev是一定要建的,bin和sbin不用建,因?yàn)閎usybox中已經(jīng)有了.
其他的可以象征性的建幾個(gè)就可以了.
拷貝busybox
#cp -R /babylinux/busybox-1.00/_install/* /babylinux/rootfs/
2,建立設(shè)備文件名
#cd /babylinux/rootfs/dev
你可以用mknod手工建立,也可以直接從原系統(tǒng)的/dev目錄下拷貝過(guò)來(lái).
手工建立的方法:
#ls -l /dev/console
crw------- 1 root root 5, 1 11月 30 09:02 /dev/console
這樣就查看到了console設(shè)備的主設(shè)備號(hào)是5,輔設(shè)備號(hào)是1,是一個(gè)標(biāo)記為C的字符設(shè)備.
于是,我們可以用mknod建立一個(gè)同樣的設(shè)備文件:
#mknod console c 5 1
但是手工方法建立太麻煩了,通常直接從/dev下把需要的設(shè)備文件拷貝過(guò)來(lái).
這些設(shè)備文件是特殊文件,在拷貝時(shí)一定要加上-R參數(shù)才能拷貝.
#cp -R /dev/console ./
#cp -R /dev/null ./
#cp -R /dev/zero ./
...
以下是我認(rèn)為需要的設(shè)備名:
cdrom fd0 hda14 hda4 hdb11 hdb19 hdc hdc16 hdc6 hdd13 hdd3 loop2 ram2
console fd0H1440 hda15 hda5 hdb12 hdb2 hdc1 hdc17 hdc7 hdd14 hdd4 loop3 tty0
fb hda hda16 hda6 hdb13 hdb3 hdc10 hdc18 hdc8 hdd15 hdd5 loop4 tty1
fb0 hda1 hda17 hda7 hdb14 hdb4 hdc11 hdc19 hdd hdd16 hdd6 loop5 tty2
fb1 hda10 hda18 hda8 hdb15 hdb5 hdc12 hdc2 hdd1 hdd17 hdd7 null tty3
fb2 hda11 hda19 hdb hdb16 hdb6 hdc13 hdc3 hdd10 hdd18 hdd8 ram tty4
fb3 hda12 hda2 hdb1 hdb17 hdb7 hdc14 hdc4 hdd11 hdd19 initctl ram0 tty5
fb4 hda13 hda3 hdb10 hdb18 hdb8 hdc15 hdc5 hdd12 hdd2 loop1 ram1 zero
其中,fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb等是必備的.
其它的hda,hda1,hdb等可以根據(jù)實(shí)際需要決定.但是上表中的選擇是比較合理的,即能滿(mǎn)足大部分的需要,有沒(méi)有不用的設(shè)備浪費(fèi)空間.注意,千萬(wàn)不要把/dev下的設(shè)備全拷貝過(guò)來(lái),那將產(chǎn)生大約420K的/dev目錄,這對(duì)babylinux來(lái)說(shuō)太大了.
3,建立etc目錄下的配置文件
busybox.conf group inittab motd passwd resolv.conf shadow-
fstab init.d issue mtab profile shadow
評(píng)論