嵌入式Linux的文件系統(tǒng)制作
發(fā)布時(shí)間:2008/8/28 0:00:00 訪問(wèn)次數(shù):557
busybox在設(shè)計(jì)上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過(guò)“插件”的方式集中到一個(gè)可執(zhí)行文件中,在實(shí)際應(yīng)用過(guò)程中通過(guò)不同的符號(hào)鏈接來(lái)確定到底要執(zhí)行哪個(gè)操作。例如最終生成的可執(zhí)行文件為busybox,當(dāng)為它建立一個(gè)符號(hào)鏈接ls的時(shí)候,就可以通過(guò)執(zhí)行這個(gè)新命令實(shí)現(xiàn)列目錄的功能。采用單一執(zhí)行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內(nèi)存中的程序控制塊等其他操作系統(tǒng)資源都共享了,對(duì)于資源比較緊張的系統(tǒng)來(lái)說(shuō),真是最合適不過(guò)了。
在busybox的編譯過(guò)程中,可以非常方便地加減它的“插件”,最后的符號(hào)鏈接也可以由編譯系統(tǒng)自動(dòng)生成。下面就來(lái)一步步地用busybox從無(wú)到有地建立一個(gè)全新的linux文件系統(tǒng)。
2編譯busybox
2004年10月中旬,busybox的1.00穩(wěn)定版終于推出了,完整的源代碼可以從http://www.busybox.net下載,壓縮包大小為1.3 mb左右。將源碼解壓之后,進(jìn)入到busybox1.00目錄中,運(yùn)行make menuconfig可以打開(kāi)它的編譯界面。這個(gè)界面和linux內(nèi)核編譯有些接近,如圖1所示。
在這個(gè)菜單界面中除了可以對(duì)最終編譯到可執(zhí)行文件中的命令進(jìn)行選擇外,還有很多其他設(shè)置也是非常重要的。下面三個(gè)目錄是很多人都會(huì)感興趣的:build options --->
installation options ---> login/password managementutilities --->在build options里面有是否使用交叉編譯的選項(xiàng)(do you want to build busybox with a cross compiler)。如果要對(duì)其他平臺(tái)進(jìn)行編譯就要選擇它并設(shè)置相應(yīng)的編譯程序前綴。
在installation options里面可以設(shè)置安裝的路徑,即設(shè)置為新文件系統(tǒng)的根目錄。當(dāng)然也可以用缺省的 _install目錄,安裝之后再?gòu)?fù)制到新文件系統(tǒng)中去。
在設(shè)置login/password management utilities的時(shí)候,為了免去配置glibc的麻煩,最好設(shè)置使用busybox自己的password和shadow文件的功能(use internal password and group functions rather than system functions)。
busybox提供的命令無(wú)疑比較全面,但它的缺省配置還不能構(gòu)成一個(gè)功能比較完備的文件系統(tǒng)。必須要添加的命令有l(wèi)ogin/password management utilities里面的getty、login和passwd,這些命令從前是由另外一個(gè)軟件包tinylogin所提供的。當(dāng)然,如果不需要一個(gè)交互的登錄界面,這些命令也可以去掉。通過(guò)設(shè)定內(nèi)核參數(shù)init=/bin/sh可以在系統(tǒng)啟圖1busybox的編譯配置界面動(dòng)后直接得到一個(gè)shell。
tlenetd命令是一個(gè)遠(yuǎn)程登錄服務(wù)程序,把它編譯進(jìn)busybox中會(huì)為將來(lái)的調(diào)試提供很多的方便。當(dāng)然也可以通過(guò)串口終端的方式管理嵌入式設(shè)備,但網(wǎng)絡(luò)登錄的方式卻更為方便。
設(shè)置完畢后保存、退出,執(zhí)行make; make install命令,busybox將在未來(lái)的根文件系統(tǒng)中建立/usr、/bin、/sbin等目錄。從中可以看到,編譯好的busybox可執(zhí)行文件和其他應(yīng)用命令的符號(hào)鏈接。典型的busybox文件大小在動(dòng)態(tài)鏈接的情況下是300 kb左右,靜態(tài)鏈接為800 kb左右,用它實(shí)現(xiàn)的文件系統(tǒng)完全可以控制在1 mb以下。但就目前為止,得到的還不是一個(gè)完整可用的文件系統(tǒng),必須要在這個(gè)基礎(chǔ)上添加一些必要的文件,讓它可以工作。
3完善文件系統(tǒng)
3.1需要增加的文件
參考一個(gè)正常的linux系統(tǒng)就會(huì)發(fā)現(xiàn),busybox建立的文件系統(tǒng)還缺少很多文件。下面三行命令建立了常見(jiàn)unix系統(tǒng)中包含的一些目錄,雖然它們不全是必需的,但建立它們更符合標(biāo)準(zhǔn)一些。這些命令都是在新文件系統(tǒng)的根目錄中執(zhí)行的,第三條命令的執(zhí)行還必須要有root權(quán)限。mkdir mnt root var tmp proc boot etc lib
mkdir /var/{lock,log,mail,run,spool}
chown 0:0r *如果busybox采用了動(dòng)態(tài)鏈接的方式編譯,還需要把busybox所需要的動(dòng)態(tài)庫(kù):libcrypt.so.1、libc.so.6、ldlinux.so.2放到lib目錄中。最好按照標(biāo)準(zhǔn)的方式建立相應(yīng)的文件和鏈接,可以參考下面的列表:-rwxrwxrwx 192519ld-2.3.2.so
lrwxrwxrwx 111ld-linux.so.2 -> ld-2.3.2.so
-rwxrwxrwx 1 1190032libc-2.3.2.so
lrwxrwxrwx 113libc.so.6 -> libc-2.3.2.so
-rwxr-xr-x 118348libcrypt-2.3.2.so
lrwxrwxrwx 117libcrypt.so.1 -> libcrypt-2.3.2.so3.2編寫 etc
文件夾下的文件etc文件夾是許多系統(tǒng)配置文件保存的地方。這些文件非常重要,如果配置錯(cuò)誤,就可能影響系統(tǒng)的啟動(dòng)。busybox源代碼example/bootfloopy/etc目錄中的文件算是一個(gè)簡(jiǎn)單的例子,可以把其中的文件拷貝過(guò)來(lái)作為基礎(chǔ)。(在example/bootfloopy目錄中的一些腳本和文檔也很值得閱讀)
首先inittab文件是系統(tǒng)啟動(dòng)后所訪問(wèn)的第一個(gè)腳本文件,后續(xù)啟動(dòng)的文件都由它指定。這個(gè)文件的格式和普通微機(jī)linux上的inittab是有區(qū)別的,其具體含義可以參考busybox的文檔。下面是一個(gè)比較簡(jiǎn)
busybox在設(shè)計(jì)上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過(guò)“插件”的方式集中到一個(gè)可執(zhí)行文件中,在實(shí)際應(yīng)用過(guò)程中通過(guò)不同的符號(hào)鏈接來(lái)確定到底要執(zhí)行哪個(gè)操作。例如最終生成的可執(zhí)行文件為busybox,當(dāng)為它建立一個(gè)符號(hào)鏈接ls的時(shí)候,就可以通過(guò)執(zhí)行這個(gè)新命令實(shí)現(xiàn)列目錄的功能。采用單一執(zhí)行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內(nèi)存中的程序控制塊等其他操作系統(tǒng)資源都共享了,對(duì)于資源比較緊張的系統(tǒng)來(lái)說(shuō),真是最合適不過(guò)了。
在busybox的編譯過(guò)程中,可以非常方便地加減它的“插件”,最后的符號(hào)鏈接也可以由編譯系統(tǒng)自動(dòng)生成。下面就來(lái)一步步地用busybox從無(wú)到有地建立一個(gè)全新的linux文件系統(tǒng)。
2編譯busybox
2004年10月中旬,busybox的1.00穩(wěn)定版終于推出了,完整的源代碼可以從http://www.busybox.net下載,壓縮包大小為1.3 mb左右。將源碼解壓之后,進(jìn)入到busybox1.00目錄中,運(yùn)行make menuconfig可以打開(kāi)它的編譯界面。這個(gè)界面和linux內(nèi)核編譯有些接近,如圖1所示。
在這個(gè)菜單界面中除了可以對(duì)最終編譯到可執(zhí)行文件中的命令進(jìn)行選擇外,還有很多其他設(shè)置也是非常重要的。下面三個(gè)目錄是很多人都會(huì)感興趣的:build options --->
installation options ---> login/password managementutilities --->在build options里面有是否使用交叉編譯的選項(xiàng)(do you want to build busybox with a cross compiler)。如果要對(duì)其他平臺(tái)進(jìn)行編譯就要選擇它并設(shè)置相應(yīng)的編譯程序前綴。
在installation options里面可以設(shè)置安裝的路徑,即設(shè)置為新文件系統(tǒng)的根目錄。當(dāng)然也可以用缺省的 _install目錄,安裝之后再?gòu)?fù)制到新文件系統(tǒng)中去。
在設(shè)置login/password management utilities的時(shí)候,為了免去配置glibc的麻煩,最好設(shè)置使用busybox自己的password和shadow文件的功能(use internal password and group functions rather than system functions)。
busybox提供的命令無(wú)疑比較全面,但它的缺省配置還不能構(gòu)成一個(gè)功能比較完備的文件系統(tǒng)。必須要添加的命令有l(wèi)ogin/password management utilities里面的getty、login和passwd,這些命令從前是由另外一個(gè)軟件包tinylogin所提供的。當(dāng)然,如果不需要一個(gè)交互的登錄界面,這些命令也可以去掉。通過(guò)設(shè)定內(nèi)核參數(shù)init=/bin/sh可以在系統(tǒng)啟圖1busybox的編譯配置界面動(dòng)后直接得到一個(gè)shell。
tlenetd命令是一個(gè)遠(yuǎn)程登錄服務(wù)程序,把它編譯進(jìn)busybox中會(huì)為將來(lái)的調(diào)試提供很多的方便。當(dāng)然也可以通過(guò)串口終端的方式管理嵌入式設(shè)備,但網(wǎng)絡(luò)登錄的方式卻更為方便。
設(shè)置完畢后保存、退出,執(zhí)行make; make install命令,busybox將在未來(lái)的根文件系統(tǒng)中建立/usr、/bin、/sbin等目錄。從中可以看到,編譯好的busybox可執(zhí)行文件和其他應(yīng)用命令的符號(hào)鏈接。典型的busybox文件大小在動(dòng)態(tài)鏈接的情況下是300 kb左右,靜態(tài)鏈接為800 kb左右,用它實(shí)現(xiàn)的文件系統(tǒng)完全可以控制在1 mb以下。但就目前為止,得到的還不是一個(gè)完整可用的文件系統(tǒng),必須要在這個(gè)基礎(chǔ)上添加一些必要的文件,讓它可以工作。
3完善文件系統(tǒng)
3.1需要增加的文件
參考一個(gè)正常的linux系統(tǒng)就會(huì)發(fā)現(xiàn),busybox建立的文件系統(tǒng)還缺少很多文件。下面三行命令建立了常見(jiàn)unix系統(tǒng)中包含的一些目錄,雖然它們不全是必需的,但建立它們更符合標(biāo)準(zhǔn)一些。這些命令都是在新文件系統(tǒng)的根目錄中執(zhí)行的,第三條命令的執(zhí)行還必須要有root權(quán)限。mkdir mnt root var tmp proc boot etc lib
mkdir /var/{lock,log,mail,run,spool}
chown 0:0r *如果busybox采用了動(dòng)態(tài)鏈接的方式編譯,還需要把busybox所需要的動(dòng)態(tài)庫(kù):libcrypt.so.1、libc.so.6、ldlinux.so.2放到lib目錄中。最好按照標(biāo)準(zhǔn)的方式建立相應(yīng)的文件和鏈接,可以參考下面的列表:-rwxrwxrwx 192519ld-2.3.2.so
lrwxrwxrwx 111ld-linux.so.2 -> ld-2.3.2.so
-rwxrwxrwx 1 1190032libc-2.3.2.so
lrwxrwxrwx 113libc.so.6 -> libc-2.3.2.so
-rwxr-xr-x 118348libcrypt-2.3.2.so
lrwxrwxrwx 117libcrypt.so.1 -> libcrypt-2.3.2.so3.2編寫 etc
文件夾下的文件etc文件夾是許多系統(tǒng)配置文件保存的地方。這些文件非常重要,如果配置錯(cuò)誤,就可能影響系統(tǒng)的啟動(dòng)。busybox源代碼example/bootfloopy/etc目錄中的文件算是一個(gè)簡(jiǎn)單的例子,可以把其中的文件拷貝過(guò)來(lái)作為基礎(chǔ)。(在example/bootfloopy目錄中的一些腳本和文檔也很值得閱讀)
首先inittab文件是系統(tǒng)啟動(dòng)后所訪問(wèn)的第一個(gè)腳本文件,后續(xù)啟動(dòng)的文件都由它指定。這個(gè)文件的格式和普通微機(jī)linux上的inittab是有區(qū)別的,其具體含義可以參考busybox的文檔。下面是一個(gè)比較簡(jiǎn)
熱門點(diǎn)擊
- 基于嵌入式處理器的電力諧波多功能實(shí)時(shí)分析系統(tǒng)
- VxWorks下實(shí)時(shí)多任務(wù)程序的實(shí)現(xiàn)
- 基于ARM9處理器的智能導(dǎo)游儀設(shè)計(jì)
- ARM、DSP、FPGA的特點(diǎn)和區(qū)別
- 基于CP2200的嵌入式以太網(wǎng)接口設(shè)計(jì)
- ucos-ii在嵌入式智能視覺(jué)監(jiān)控系統(tǒng)中的應(yīng)
- ARM/uClinux應(yīng)用程序的開(kāi)發(fā)
- 基于S3C2410的Windows CE 5
- Linux系統(tǒng)在嵌入式DVR中的應(yīng)用
- 嵌入式Linux的文件系統(tǒng)制作
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說(shuō)新車間的特點(diǎn)是“靈動(dòng)”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- 扇出型面板級(jí)封裝(FOPLP)
- 全球首款無(wú)掩模光刻系統(tǒng)—DSP
- 紫光閃存E5200 PCIe 5.0 企業(yè)級(jí)
- NAND Flash 技術(shù)和系
- 高性能DIMM 內(nèi)存數(shù)據(jù)技術(shù)封
- PCIe Gen4 SSD主控
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究