ARM开发板系统移植-----rootfs的制作
前面兩篇文章分別介紹了mini2440開發(fā)板上運行的bootloader和kernel,到這里系統(tǒng)啟動后其實是停留在一個“僵死”的狀態(tài)---無法掛載根文件系統(tǒng)。
這里將介紹如何制作一個根文件系統(tǒng),并且掛載到內(nèi)核中---即讓內(nèi)核能夠訪問到文件系統(tǒng)中的目錄和文件。從用戶的角度來看文件系統(tǒng)無非就是各個目錄和文件,注意,這些目錄和文件可以存在內(nèi)存中,也可以存在Nand Flash 或者NOR Flash中,視具體的文件系統(tǒng)而定。本文就用基于內(nèi)存的initram 和基于網(wǎng)絡(luò)的nfs文件系統(tǒng)做例子介紹文件系統(tǒng)的概念。
首先什么是文件系統(tǒng)?就本人理解而言,它就是操作系統(tǒng)提供的一種抽象,即操作系統(tǒng)將存儲介質(zhì)抽象化,并提供一種訪問這種抽象的方法,讓用戶能夠簡潔且方便的訪問存儲介質(zhì)(如硬盤和nand flash等)。為了實現(xiàn)這種抽象,操作系統(tǒng)把存儲介質(zhì)進行單元劃分,文件存儲在介質(zhì)時就占據(jù)若干個單元。當(dāng)然操作系統(tǒng)還記錄下各個文件的基本屬性(如文件大小、存儲位置、所屬人、訪問權(quán)限等等),并組成一個文件控制塊(FCB)。所有文件的FCB保存在一個目錄文件中,即一個目錄文件就是內(nèi)容是FCB的文件,其自身也有FCB目錄文件的FCB記錄在上一層目錄中,這樣層層往上連接就形成了樹狀目錄結(jié)構(gòu)。或者這樣描述:文件系統(tǒng)包含兩部分:一組文件(即所要保存的數(shù)據(jù))和目錄文件(目錄文件的內(nèi)容是每個文件的FCB,FCB記錄了文件的所有屬性)。如下圖所示:
如上圖所示是一個典型的Linux系統(tǒng)目錄結(jié)構(gòu),從用戶的角度看這就是Linux的文件系統(tǒng),從右往左看,假設(shè)run目錄下有個文件file,那么file的FCB就保存在run目錄文件中,而run又是一個文件,其FCB 保存在VAR這個目錄文件中,最后var的FCB就保存在根目錄文件中。一次要訪問到file,實質(zhì)就是要沿著/var/run/file 這樣一個路徑。但是從操作系統(tǒng)的角度來看,這僅僅是提供給用戶的可視性文件系統(tǒng),具體的實現(xiàn)細(xì)節(jié)(比如文件的物理結(jié)構(gòu)和邏輯結(jié)構(gòu))它已經(jīng)隱藏起來。需要注意的是文件系統(tǒng)存儲在外存儲器中(nand flash等),內(nèi)存中也會有相應(yīng)的表明文件屬性的目錄項,用以加快操作系統(tǒng)訪問文件的效率。即內(nèi)核中也會有FCB的內(nèi)容,甚至目錄文件也會存在內(nèi)存中。
根據(jù)上面的背景知識其實就可以總結(jié)出建立根文件系統(tǒng)的步驟,無非就是創(chuàng)建這些目錄和文件,然后讓內(nèi)核能夠認(rèn)識它們(即在內(nèi)核中掛載根文件系統(tǒng))。
具體步驟如下:
1、創(chuàng)建各個目錄和必須的文件
1.1、創(chuàng)建空目錄:
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/lib usr/sbin lib/modules
1.2、創(chuàng)建設(shè)備文件:創(chuàng)建Linux啟動需要的設(shè)備驅(qū)動文件:控制臺和空
#cd rootfs/dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
1.3、加入配置文件:添加內(nèi)核啟動的一些配置文件
#tar etc.tar.gz
#mv etc/* .../rootfs/etc/ -rf
1.4、添加內(nèi)核模塊:
#cd .../linux
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
#make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs
1.5、編譯/安裝busybox:使用busybox添加常用的命令如cd、ls、date等等
#make menuconfig
#make
#make install
2、掛載根文件系統(tǒng):事實上掛載根文件系統(tǒng)就是完成指明根文件系統(tǒng)放在何處、操作系統(tǒng)如何使用文件系 統(tǒng)的目錄文件等等工作。這里介紹一個基于內(nèi)存的掛載方式,即根文件系統(tǒng)在編譯后直接整合在內(nèi)核代碼中,隨著代碼被加載到內(nèi)存中,內(nèi)核啟動過程中可以直接使用文件系統(tǒng)。initramfs文件系統(tǒng)的制作:
2.1、#cd .../rootfs/
#ln -s ./bin/busybox init
2.2、 配置內(nèi)核,讓內(nèi)核知道文件系統(tǒng)的掛載方式是initramfs。
2.3、編譯內(nèi)核
2.4、設(shè)置uboot參數(shù):
setenv bootargs noinitrd console=ttySAC0,115200
完成上面的工作就可以制作成一個擁有initramfs 文件系統(tǒng)的完整的Linux系統(tǒng)。
至此一個完整的Linux系統(tǒng)就已經(jīng)能夠在mini2440中運行,接下來就可以在其上進行驅(qū)動或者應(yīng)用開發(fā)。
總結(jié)
以上是生活随笔為你收集整理的ARM开发板系统移植-----rootfs的制作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络规划设计师教程
- 下一篇: flac文件提取专辑封面手记