走進Linux 操作系統(tǒng)
一個文件系統(tǒng)進行安裝,而ramdisk則是將內存模擬一個塊設備用來存放數(shù)據(jù)。 使用ramdisk或loop設備相比直接使用物理磁盤操作要快一些,也相對安全,不會損壞物理設備。因此在需要創(chuàng)建文件系統(tǒng)的情況下,很多時候都會使用上面兩種虛擬技術創(chuàng)建文件系統(tǒng),然后在將文件系統(tǒng)轉移到物理設備中。 我們采取ramdisk作為文件系統(tǒng)的宿主,在上面制作文件系統(tǒng),然后拷貝我們前面創(chuàng)建的文件系統(tǒng)內容到其上去。然后觀察ramdisk的大小后 (可不是其中文件內容的大小,因為其中還包含文件系統(tǒng)本身格式的一些信息),將整個文件系統(tǒng)統(tǒng)轉移到某個文件中去(利用dd命令,由于 dd 命令允許二進制方式讀寫,所以特別適合在原始物理設備上進行輸入/輸出,制作整個文件系統(tǒng)的鏡像),該文件被稱為文件系統(tǒng)鏡像。雖然linux對文件后綴沒有要求,但這里我們還是習慣以img命名它。 具體做法大該如此: dd if=/dev/zero of=/dev/ram bs=1k count=20000 mke2fs –m0 /dev/ram 20000 mount /dev/ram /mnt/ cp –av /rootfs/* /mnt/ram 運行df ,注意1k-blocks一欄中/dev/ram的數(shù)值,假定為ramsize umount /dev/ram dd if=/dev/ram of=ramlinux.img bs=1k count=ramsize gzip –9v ramlinux.img 第一步是給 /dev/ram設備清出20m的全零空間,然后格式化/dev/ram設備,頁就是將格式信心寫入/dev/ram中。 接下來,安裝/dev/ram設備到/mnt目錄下,再把你創(chuàng)建的文件系統(tǒng)內容全部考進來。完成了這步,你才可以說真正有了一個文件系統(tǒng)(文件系統(tǒng)格式信息+文件系統(tǒng)內容) 然后解載設備后,把設備內容(包含文件系統(tǒng)格式和內容)統(tǒng)統(tǒng)轉移到名為ramlinux.img的鏡像文件中, 最后壓縮鏡像文件(壓縮后名字為ramlinux.img.gz),開始使用/dev/zero清零/ram設備地目的就是為了提高壓縮率,因為壓縮算法利用統(tǒng)計規(guī)律替換字符,所以統(tǒng)一為零會大大提高gzip的壓縮率的?! ∫话銟藴氏到y(tǒng)中ramdisk默認大小為4098字節(jié),你不能建立超過該大小的ram盤。但我們搭建的系統(tǒng)大小超過了4096字節(jié),所以必須擴大ramdisk的大小。最簡單的方法是在lilo啟動時給ramdisk指定大小,實現(xiàn)系統(tǒng)中大概用到20m大空間,所以在lilo.conf中應該加入“append = “ramdisk_size=20000”這一行,系統(tǒng)啟動時就會自動更改ramdisk默認大小了。 系統(tǒng)引導引導過程簡述pc打開電源后,先執(zhí)行rom中bios中的代碼,該程序負責將啟動設備(軟盤、硬盤、光盤)的第一個扇區(qū)(0扇區(qū))第一個磁到道的數(shù)據(jù)載入內存。接著bios執(zhí)行該扇區(qū)中的代碼(將內核從啟動設備中逐步導入到內存)。所以扇區(qū)中要么直接存放操作系統(tǒng)內核,要么存放啟動裝載程序,比如lilo等,由啟動裝載程序負責找到內核,裝載內核到系統(tǒng),然后執(zhí)行內核。 內核被載入內存后的動作上面已經(jīng)初步介紹了,我們這里要強調的是內核初始化以后緊接著就需要安裝根文件系統(tǒng),那么根文件系統(tǒng)的位置如何確定?(ramdisk size?) 我們必須在創(chuàng)建過程中指定驅動設備,利用命令 rdev filename devicename 設置或在內核原代碼目錄下的 makefile中修改相關參數(shù),然后編譯,因為該信息是備記錄在內核中的?! 〕烁募O備外還需要指出根文件系統(tǒng)在宿主設備上的位置,這還需要利用rdev 來實現(xiàn)。該信息也被記錄在內核中。(rdev命令很豐富,回憶我們前面談到的改變ram盤大小的任務都可以通過rdev來修改) 可能很多朋友奇怪自己根本沒用過這個命令,這么多年還不照樣把系統(tǒng)生級了無數(shù)次。的確我們不大使用該命令,因為我們有更酷的工具lilo(當然grub好像現(xiàn)在更流行了),在lilo.conf中的配置如root=* 這些選項其實就是告訴lilo將上述信息寫道內核中?! 〈_定了根文件系統(tǒng)位置,將其安裝到根目錄下,然后找到其中init程序,開始執(zhí)行系統(tǒng)初始化工作。安裝啟動鏡像 大家多數(shù)都應該對?lilo.conf下的intrd=initrd.img.*有印象吧。你知道initrd.img是干嘛用的嗎? 這個文件實際上就是個文件系統(tǒng)鏡像,有興趣的話你可以將它登陸到/mnt下,去看看,它毫無疑問是個微縮的文件系統(tǒng)(該文件使用gzip壓縮的,所以先要解壓才能安裝它。(mv initrd.img initrd.img.gz;gunzip initrd.img.gz;mount –o loop initrd.img /mnt)。這個文件里的各目錄和我們文件系統(tǒng)是完全一樣的,但是由于initrd.img是在系統(tǒng)啟動后在ram盤里運行的所以它只包含系統(tǒng)啟動時需要的最小命令和庫的集合。使用這個萎縮文件系統(tǒng)的目的通常是為了系統(tǒng)啟動是尚未安裝根文件系統(tǒng)前,用來運行系統(tǒng)以便利用insmod命令裝入安裝根文件系統(tǒng)需要的模塊——比如ext3.o,buslogic.o等(如果根設備是scsi或根文件系統(tǒng)是ext3等,而內核并為將這些功能編譯進去,只能以模塊方式載入),所以在initrd.img中的lib下會包含需要再入的模塊。系統(tǒng)啟動后運行intrd.img中的linuxrc腳本來執(zhí)行模塊載入后將根文件系統(tǒng)切換到實際文件系統(tǒng)中(使用pivot_root命令)?! τ谖覀儗嶒炏到y(tǒng)來說,因為已經(jīng)將scsi和ext3等模塊直接編譯進了內核,所以不必通過initrd.img的途徑來進行先期模塊載入。因此正常情況下initrd.img是不需要的。但是要知道我們制作的根文件系統(tǒng)鏡像是放在源標準系統(tǒng)根文件系統(tǒng)下的。所以要使得系統(tǒng)拍托實際物理設備,進入ram盤工作運行,就需要利用intrd.img鏡像文件系統(tǒng)在啟動期間將物理盤上根文件系統(tǒng)鏡像載入ram盤中,然后進入執(zhí)行。這個工作我們利用linuxrc腳本來實現(xiàn),具體地講就是mount源根文件系統(tǒng),將試驗文件系統(tǒng)鏡像解壓傳送到/dev/ram中,然后umount 源根文件系統(tǒng)。從此系統(tǒng)進入我們的實驗文件系統(tǒng)開始運行?! nitrd.img也是屬于文件系統(tǒng)鏡像,它的制作方法和制作根文件系統(tǒng)大通小異。先拷貝需要文件,在編輯腳本(linuxrc),然后制作文件系統(tǒng)鏡像。詳細過程不再羅索了?! e著急,還有關鍵一步那就是修改lilo .conf 為實驗系統(tǒng)配置啟動選項?! oot =實驗系統(tǒng)內核 label = ramlinux initrd = 剛做的initrd鏡像 root = /dev/ram append = “ramdisk_size = 20000” 最后,執(zhí)行l(wèi)ilo –r /rootfs ?! k ! 有關內核引導請見附件。下載搭建腳本和實驗系統(tǒng)系統(tǒng) 雖然搭建系統(tǒng)技術簡單,但是過程很繁瑣,搞不好會丟三拉四,錯誤百出。為了節(jié)約大家的體力,我們編寫了幾個小腳本幫助搭建系統(tǒng)。利用這幾個腳本大家可以輕松地自動建立實驗系統(tǒng)?! ∥覀兊闹谱髂_本可分為下面幾個部分: mkrootfs.sh——?收集制作root文件系統(tǒng)所需的所有材料到指定目錄?! kinitrdfs.sh——收集制作initrd鏡像所需的所有材料到指定目錄。 setup.sh——制作root文件系統(tǒng)鏡像和initrd鏡像,改寫lilo配置文件添加ramlinux啟動選項?! ∵B同腳本一同提供給你的還有myboot,myetc 和myroot目錄。boot里含有編譯好的內核(注意內核是與系統(tǒng)硬件相關的,我的機器是奔三處理器,如果你系統(tǒng)和我不同,那你還是自己在本機上編譯試驗系統(tǒng)內核吧!不過可以使用我們提供的內核配置文件minsys.config來選擇內核功能,編譯完成把內核考貝到myboot下就可以了——或修改mkimage.sh腳本,在最后面的地方修改lilo.conf部分,將”boot=×××”中的xxx用你自己編譯的內核代替)、模塊和內核配置文件minisys.config。etc下包含了供試驗系統(tǒng)使用的、已經(jīng)修改好的配置文件和服務腳本。boot下是兩個bash的配置文件--全部腳本和必要配置文件打包為work.tar.gz。 此外,我們也將按上述方法裁減出來的root文件系統(tǒng)(rootfs.tar.gz)和root文件系統(tǒng)鏡像ramlinux.img.gz放在網(wǎng)上以供下載,同時也把initrd的內容(initrdfs.tar.gz)和鏡像(initrd.img.gz)放在網(wǎng)上?! ∪绻阋砑踊騽h除文件系統(tǒng)中的某些文件,應該展開roofs.tar.gz,然后在rootfs里面修改,不要把文件系統(tǒng)鏡像文件(img文件)以loop方式安裝后進行修改,因為我們曾經(jīng)用zero設備填充過文件系統(tǒng),所以如果新添加或刪除某些內容,可能會破壞里面的一些數(shù)據(jù)對齊,系統(tǒng)反映給你的就可能會有類似于“bus error”等一類莫名奇妙的錯誤。 如果你按要求解開了rootfs.tar.gz和initrdfs.tar.gz,那么執(zhí)行setup.sh既可生成對應的鏡像文件ramlinux.img.gz和initrd.img.gz,并會在lilo中添加好對應于試驗系統(tǒng)的選項。step by step——享受你的操作系統(tǒng)吧 從啟動菜單中選擇ramlinux開始運行吧!等等,要輸入管理員密碼?是的,我們是從原有的系統(tǒng)中裁減的,所以密碼自然會繼承下來。(如果你用的是我做好的系統(tǒng),那么用戶名自然是root,密碼 threeyear) 看見了嗎,親手打造的操作系統(tǒng)已經(jīng)快步向你走來,有成就感嗎?享受你的杰作吧!   |
<< Linux 串口截止閥的分類以及特點 >>