- 相關(guān)推薦
一種實現(xiàn)嵌入式Linux的新方法
摘要 在Linux中會遇到由于文件系統(tǒng)損壞,需要人工修復(fù)而導(dǎo)致系統(tǒng)無法正常啟動的現(xiàn)象。本文采用Linux初始化內(nèi)存盤(INITRD)技術(shù),并把內(nèi)存的一部分作為Linux的根目錄,每次啟動把完整的文件系統(tǒng)解壓到這里,避免了系統(tǒng)從損壞的文件系統(tǒng)啟動。這不僅使系統(tǒng)能正常啟動,而且提高了系統(tǒng)性能。
關(guān)鍵詞 Linux 嵌入式 INITRD ramdisk
【Abstract】In course of building embedded Linux, the system will not start because of the bad filesystem . The paper describes a new method, which adopts INITial Ramdisk Disk and assigns part of memories as root directory of Linux. It avoids startup from a bad filesystem because it uncompresses integral filesystem to ramdisk every time. With this method, the system can not only start normally, but also it’s performance is very good.
【Keyword】Linux embedded INITRD ramdisk
引言
在Linux操作系統(tǒng)中,有一項特殊的功能——初始化內(nèi)存盤INITRD(INITial Ram Disk)技術(shù),而且內(nèi)核支持壓縮的文件系統(tǒng)映像。有了這兩項功能,我們可以讓Linux系統(tǒng)從小的初始化內(nèi)存盤啟動,并把系統(tǒng)內(nèi)存的一部分作為根文件系統(tǒng)掛載,而且不使用交換分區(qū)(如果不運行X Windows這是完全可以的),即把Linux系統(tǒng)完全嵌入到內(nèi)存中,而不依賴于任何其他硬盤。現(xiàn)在PC機內(nèi)存至少128M,而根文件系統(tǒng)所用的只有30M,因此不僅不會使整機性能下降,反而有很大的提高。
由于系統(tǒng)不工作在硬盤上,所以系統(tǒng)消除了由于機械驅(qū)動而導(dǎo)致的問題;因為系統(tǒng)運行于內(nèi)存中,根文件系統(tǒng)和操作完全在CPU/RAM環(huán)境下,系統(tǒng)性能在速度和可靠性方面非常好;它不會由于非法關(guān)機而破壞文件系統(tǒng),因為我們每一次啟動是把壓縮的文件系統(tǒng)解壓至內(nèi)存盤中作為根文件系統(tǒng)掛載。
1 硬件要求
對于這樣一個系統(tǒng),硬件不需要特別的設(shè)計,只是通過普通的PC機上的組件實現(xiàn)。值得一提是系統(tǒng)的內(nèi)存的大小,它至少應(yīng)該有64M。因為30M作為Ramdisk使用,剩下30多兆作為系統(tǒng)運行,才能保證系統(tǒng)的正常工作,我們現(xiàn)在的計算機內(nèi)存一般為128M,這個條件都能滿足。唯一特別的是一個flash盤 ,它相當(dāng)于一個IDE接口的硬盤,大小為20M,主要用它作為啟動LILO和放置根文件系統(tǒng)壓縮包。
2 Ramdisk的使用
Ramdisk就是將內(nèi)存的一部分分配為一個分區(qū)并作為硬盤來使用。對于系統(tǒng)運行時不斷使用的程序,將它們放在Ramdisk中將加快計算機的操作,如大數(shù)據(jù)量的網(wǎng)絡(luò)服務(wù)器、無盤工作站等。為了能夠使用Ramdisk,我們在編譯內(nèi)核時須將block device中的Ramdisk支持選上,它下面還有兩個選項,一個是設(shè)定Ramdisk的大小,默認(rèn)是4096k;另一個是initrd的支持。它既可以直接編譯進(jìn)內(nèi)核,也可以編譯成模塊,在需要的時候加載。我們由于在啟動時就用它,所以必須將它直接編譯進(jìn)內(nèi)核。
如果對Ramdisk的支持已經(jīng)編譯進(jìn)內(nèi)核,我們就可以使用它了。首先在/mnt目錄下創(chuàng)建目錄ram,運行mkdir /mnt/ram;然后對/dev/ram0創(chuàng)建文件系統(tǒng),運行mke2fs /dev/ram;最后掛載上/dev/ram,運行mount /dev/ram /mnt/ram,就可以象對普通硬盤一樣對它進(jìn)行操作了。值得注意的是,在創(chuàng)建文件系統(tǒng)的時候,在屏幕上輸出1024 inodes ,4096 blocks,即ramdisk大小為4M=4096個塊,但是我們掛載上之后,用命令df –k /dev/ram查看時,顯示出來ramdisk大小只有3963K,這是由于文件系統(tǒng)本身占用了一些空間。
我們能根據(jù)需要改變ramdisk地大小。如我們要把默認(rèn)的4M增大到10M,當(dāng)ramdisk是直接編譯進(jìn)內(nèi)核的情況下,可在LILO配置文件lilo.conf中加入一行:append=“ramdis_size=10000”,運行LILO后,重啟計算機后,ramdisk大小變?yōu)?0M,或者在啟動是作為啟動行參數(shù)ramdis_size=10000;當(dāng)ramdisk是作為可加載模塊編譯時,需要在模塊加載配置文件/etc/modules.conf中加入一行:options rd rd_size=10000,或者在加載rd模塊是在后面加上說明,即insmod rd rd_size=10000.
3 實現(xiàn)過程
3.1創(chuàng)建壓縮的文件系統(tǒng)
我們的實現(xiàn)過程是依賴于存在的Linux系統(tǒng)。首先啟動一般的Linux系統(tǒng),在這個系統(tǒng)中根據(jù)自己的需要,創(chuàng)建一個適合功能的文件系統(tǒng)。例如我們要實現(xiàn)Apache網(wǎng)絡(luò)服務(wù)器,那么只要把完成系統(tǒng)啟動和基本維護(hù)需要的一些命令、腳本、配置文件和庫函數(shù)留下,再加上實現(xiàn)Apache服務(wù)器所需要的。具體過程為:
在Linux下建立目錄/minlinux,我們在此目錄下創(chuàng)建的文件系統(tǒng)。系統(tǒng)的所有靜態(tài)鏈接庫,幫助手冊(man pages),信息頁(info pages),頭文件,內(nèi)核源碼對于系統(tǒng)運行是完全無用的,所以不需要它們。在目錄bin下放系統(tǒng)維護(hù)的一些基本工具,如ls、mv、grep、chown、chmod、chgrp、ln、rm等;在sbin下是系統(tǒng)啟動過程通常需要的命令,如bash、e2fsck、mke2fs、fdisk、insmod、rmmod、depmod、modprobe、lsmod、shutdown、reboot、login、init、getty、mount、umount、等;usr/bin下放置Apache應(yīng)用程序http和其他一些特殊工具。然后根據(jù)這些可執(zhí)行文件需要的動態(tài)鏈接庫來確定lib目錄下的內(nèi)容。當(dāng)然目錄etc下的配置文件,dev下的設(shè)備文件需要的都必須要有,它們都是和可執(zhí)行文件對應(yīng)的,因為許多可執(zhí)行文件執(zhí)行時,一般是打開設(shè)備,根據(jù)配置文件來運行。有一個特殊的目錄proc應(yīng)該設(shè)置,在內(nèi)核編譯選項文件系統(tǒng)選擇中,我們選
【一種實現(xiàn)嵌入式Linux的新方法】相關(guān)文章:
基于嵌入式Linux的終端AVI視頻編碼器的實現(xiàn)03-07
在嵌入式linux2.4.18內(nèi)核中實現(xiàn)CS8900A網(wǎng)卡驅(qū)動03-07
嵌入式Linux技術(shù)的現(xiàn)狀與發(fā)展動向03-19
嵌入式Linux系統(tǒng)及其應(yīng)用前景03-18
嵌入式Linux系統(tǒng)下Microwindows的應(yīng)用03-19