ARM开发板系统移植-----rootfs的制作
這里將介紹如何制作一個(gè)根文件系統(tǒng),并且掛載到內(nèi)核中---即讓內(nèi)核能夠訪問到文件系統(tǒng)中的目錄和文件。從用戶的角度來看文件系統(tǒng)無非就是各個(gè)目錄和文件,注意,這些目錄和文件可以存在內(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)將存儲(chǔ)介質(zhì)抽象化,并提供一種訪問這種抽象的方法,讓用戶能夠簡潔且方便的訪問存儲(chǔ)介質(zhì)(如硬盤和nand flash等)。為了實(shí)現(xiàn)這種抽象,操作系統(tǒng)把存儲(chǔ)介質(zhì)進(jìn)行單元?jiǎng)澐?#xff0c;文件存儲(chǔ)在介質(zhì)時(shí)就占據(jù)若干個(gè)單元。當(dāng)然操作系統(tǒng)還記錄下各個(gè)文件的基本屬性(如文件大小、存儲(chǔ)位置、所屬人、訪問權(quán)限等等),并組成一個(gè)文件控制塊(FCB)。所有文件的FCB保存在一個(gè)目錄文件中,即一個(gè)目錄文件就是內(nèi)容是FCB的文件,其自身也有FCB目錄文件的FCB記錄在上一層目錄中,這樣層層往上連接就形成了樹狀目錄結(jié)構(gòu)。或者這樣描述:文件系統(tǒng)包含兩部分:一組文件(即所要保存的數(shù)據(jù))和目錄文件(目錄文件的內(nèi)容是每個(gè)文件的FCB,FCB記錄了文件的所有屬性)。如下圖所示:
如上圖所示是一個(gè)典型的Linux系統(tǒng)目錄結(jié)構(gòu),從用戶的角度看這就是Linux的文件系統(tǒng),從右往左看,假設(shè)run目錄下有個(gè)文件file,那么file的FCB就保存在run目錄文件中,而run又是一個(gè)文件,其FCB 保存在VAR這個(gè)目錄文件中,最后var的FCB就保存在根目錄文件中。一次要訪問到file,實(shí)質(zhì)就是要沿著/var/run/file 這樣一個(gè)路徑。但是從操作系統(tǒng)的角度來看,這僅僅是提供給用戶的可視性文件系統(tǒng),具體的實(shí)現(xiàn)細(xì)節(jié)(比如文件的物理結(jié)構(gòu)和邏輯結(jié)構(gòu))它已經(jīng)隱藏起來。需要注意的是文件系統(tǒng)存儲(chǔ)在外存儲(chǔ)器中(nand flash等),內(nèi)存中也會(huì)有相應(yīng)的表明文件屬性的目錄項(xiàng),用以加快操作系統(tǒng)訪問文件的效率。即內(nèi)核中也會(huì)有FCB的內(nèi)容,甚至目錄文件也會(huì)存在內(nèi)存中。
根據(jù)上面的背景知識(shí)其實(shí)就可以總結(jié)出建立根文件系統(tǒng)的步驟,無非就是創(chuàng)建這些目錄和文件,然后讓內(nèi)核能夠認(rèn)識(shí)它們(即在內(nèi)核中掛載根文件系統(tǒng))。
具體步驟如下:
1、創(chuàng)建各個(gè)目錄和必須的文件
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啟動(dòng)需要的設(shè)備驅(qū)動(dòng)文件:控制臺(tái)和空
#cd rootfs/dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
1.3、加入配置文件:添加內(nèi)核啟動(dòng)的一些配置文件
???????????????? #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):事實(shí)上掛載根文件系統(tǒng)就是完成指明根文件系統(tǒng)放在何處、操作系統(tǒng)如何使用文件系 統(tǒng)的目錄文件等等工作。這里介紹一個(gè)基于內(nèi)存的掛載方式,即根文件系統(tǒng)在編譯后直接整合在內(nèi)核代碼中,隨著代碼被加載到內(nèi)存中,內(nèi)核啟動(dòng)過程中可以直接使用文件系統(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
完成上面的工作就可以制作成一個(gè)擁有initramfs 文件系統(tǒng)的完整的Linux系統(tǒng)。
至此一個(gè)完整的Linux系統(tǒng)就已經(jīng)能夠在mini2440中運(yùn)行,接下來就可以在其上進(jìn)行驅(qū)動(dòng)或者應(yīng)用開發(fā)。
?
總結(jié)
以上是生活随笔為你收集整理的ARM开发板系统移植-----rootfs的制作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dropout技术之随机神经元与随机深度
- 下一篇: Windows事件查看器_ID一览表