国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式Linux中CramFS根文件系統(tǒng)的移植實(shí)現(xiàn)

2016-05-14 03:04劉俊霞盛文婷

劉俊霞 盛文婷

摘要:首先研究了嵌入式Linux系統(tǒng)以及CramFS文件系統(tǒng)的移植,然后分析了嵌入式Linux系統(tǒng)及CramFS文件系統(tǒng)的特性,其次,詳細(xì)說明了移植最小Linux系統(tǒng)的制作過程,最后,對(duì)制作出來的Linux系統(tǒng)鏡像進(jìn)行測(cè)試。最終的測(cè)試結(jié)果顯示,系統(tǒng)移植成功且能夠?qū)崿F(xiàn)Linux系統(tǒng)的基本命令。

關(guān)鍵詞:Linux CramFS isoLinux

中圖分類號(hào):TP316.81 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)05-0000-00

隨著電子產(chǎn)業(yè)的不斷發(fā)展, 基于 ARM技術(shù)的系統(tǒng)設(shè)計(jì)和開發(fā)平臺(tái)越來越多地在控制類、消費(fèi)類、通信類等電子產(chǎn)品中廣泛應(yīng)用。從軟件角度上看, 構(gòu)建基于ARM 技術(shù)的Linux 系統(tǒng)要涉及到引導(dǎo)加載程序、Linux 內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序幾部分的設(shè)計(jì)。由于存儲(chǔ)空間有限, 如何有效地使用有限的存儲(chǔ)空間是嵌入式開發(fā)者必須考慮的, 合適的文件系統(tǒng)格式是解決這一問題的關(guān)鍵所在。

1 CramFS文件系統(tǒng)

CramFS 是專門針對(duì)閃存設(shè)計(jì)的只讀壓縮的文件系統(tǒng),其容量上限為256M,采用zlib壓縮。它并不需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓縮到內(nèi)存之中, 而只是在系統(tǒng)需要訪問某個(gè)位置的數(shù)據(jù)的時(shí)候, 馬上計(jì)算出該數(shù)據(jù)在 CramFS 中的位置, 將它實(shí)時(shí)地解壓縮到內(nèi)存之中, 然后通過對(duì)內(nèi)存的訪問來獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。

CramFS 文件系統(tǒng)的基本組成: 初始化程序、Shell 程序以及其他 Linux常用工具、配置文件、鏈接庫、圖形界面程序和用戶應(yīng)用程序,文件系統(tǒng)是緊跟 Linux 內(nèi)核放置,由內(nèi)核加載,主要存放用戶應(yīng)用程序和配置信息。在嵌入式的環(huán)境之下,內(nèi)存和外存資源都需要節(jié)約使用。但是它也有很致命的弱點(diǎn)。在正常情況下,同樣的代碼不僅在外存中占據(jù)了空間(以壓縮后的形式存在),而且還在內(nèi)存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節(jié)省資源的要求。

2 CramFS文件系統(tǒng)的特性

CramFS采用實(shí)時(shí)解壓縮方式,但解壓縮的時(shí)侯有延遲。CramFS的數(shù)據(jù)都是經(jīng)過處理、打包的,對(duì)其進(jìn)行寫操作有一定困難。所以CramFS不支持寫操作,這個(gè)特性剛好適合嵌入式應(yīng)用中使用Flash存儲(chǔ)文件系統(tǒng)的場(chǎng)合。在CramFS中,文件最大不能超過16MB。支持組標(biāo)識(shí)(gid),但是mkcramfs只將gid的低8位保存下來,因此只有這8位是有效的。

在支持硬鏈接方面CramFS并沒有完全處理好,硬鏈接的文件屬性中,鏈接數(shù)仍然為1。CramFS的目錄中,沒有“.”和“..”這兩項(xiàng)。因此,CramFS中的目錄的鏈接數(shù)通常也僅有一個(gè)。CramFS中不會(huì)保存文件的時(shí)間戳(timestamps)信息。當(dāng)然,正在使用的文件由于inode保存在內(nèi)存中,因此其時(shí)間可以暫時(shí)地變更為最新時(shí)間,但是不會(huì)保存到CramFS文件系統(tǒng)中去。

CramFS與InitramFS相比較,InitramFS具有隨著文件系統(tǒng)中數(shù)據(jù)的增減自動(dòng)增減容量、不需要額外的文件系統(tǒng)驅(qū)動(dòng)的優(yōu)點(diǎn),而CramFS只讀的特點(diǎn)有利于保護(hù)文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。它們都是只讀文件系統(tǒng),而RomFS文件系統(tǒng)可以構(gòu)造出一個(gè)更小的內(nèi)核,大約4000字節(jié),并且很節(jié)省內(nèi)存。但是RomFS需要同時(shí)支持虛擬盤(RAMDISK)臨時(shí)文件和數(shù)據(jù)文件的存儲(chǔ)。

3 CramFS 文件系統(tǒng)目錄

一個(gè)完整的 CramFS 文件系統(tǒng)通常包含如下目錄:

Linuxrc、bin、sbin、etc、lib、dev、usr、mnt。

Linuxrc 啟動(dòng)腳本文件,由 Boot Loader 核心命令行確定 init=/Linuxrc, 加載/etc 目錄為 ramfs, (CramFS 為只讀文件系統(tǒng)), 拷貝/mnt/etc 到/etc, 配置文件目錄重新加載根文件系統(tǒng)和/etc 文件系統(tǒng),執(zhí)行 init 進(jìn)程。

bin 引導(dǎo)啟動(dòng)所需的命令或用戶可能用的命令。

sbin 系統(tǒng)管理員服務(wù)程序, 其中最重要的是供內(nèi)核初始化之后執(zhí)行的/sbin/init 進(jìn)程, 系統(tǒng)啟動(dòng)時(shí)由init 解釋并行/etc/inittab, inittab 將指導(dǎo) int 去調(diào)用一個(gè)系統(tǒng)初始化程序/etc/init.d/rcS。

etc 特定機(jī)器的配置文件以及用戶數(shù)據(jù)存放目錄, 其中的所有內(nèi)容是在內(nèi)核運(yùn)行后, 由 Linuxrc 從/mnt/etc 拷貝得到的。

lib 文件系統(tǒng)上的程序所需的動(dòng)態(tài)庫。

dev 驅(qū)動(dòng)程序存放目錄, 可以在這里存放自己編寫的驅(qū)動(dòng)程序。

usr 用于存放用戶程序和配置文件的目錄, 可以根據(jù)需要進(jìn)行設(shè)置。目錄下的/usr/etc/rc.local 執(zhí)行本地所需要的初始化, 如安裝核心模塊, 進(jìn)行網(wǎng)絡(luò), 運(yùn)行應(yīng)用程序, 啟動(dòng)圖形界面等。

4 移植最小Linux系統(tǒng)

4.1系統(tǒng)環(huán)境搭建

操作系統(tǒng): 物理機(jī) windows 7

虛擬機(jī)軟件: VMware Workstation8.0

Linux版本: Ubuntu 11.10-i386-desktop

Linux內(nèi)核: Linux-2.6.36(Ubuntu 11.10是Linux-3.0.16的內(nèi)核)

Busybox: Busybox-1.1.3

交叉編譯工具: arm-Linux-gcc-3.4.1

CramFS: cramfs-1.1

4.2 構(gòu)建嵌入式交叉編譯環(huán)境

解壓交叉編譯工具文件夾后會(huì)生成一個(gè)文件名為3.4.1的文件夾。

然后,將解壓后的名字為3.4.1的文件復(fù)制到根目錄下的 usr/local/arm文件夾下。

在終端下修改/etc/bash.bashrc文件 #vim /etc/bash.bashrc

在最后加上:

export PATH=$PATH:/usr/local/arm/3.4.1/bin

export PATH

然后在終端中輸入 #source /etc/bash.bashrc

4.3 系統(tǒng)移植步驟

(1)進(jìn)行內(nèi)核的編譯與裁剪,然后生成bzImage 內(nèi)核鏡像。

(2)構(gòu)建交叉編譯環(huán)境。

(3)進(jìn)行配置busybox,然后編譯安裝busybox。

(4)準(zhǔn)備文件系統(tǒng)的目錄框架,創(chuàng)建設(shè)備文件,以及準(zhǔn)備一些配置文件和系統(tǒng) 啟動(dòng)時(shí)所需的文件。

(5)配置cramfs-1.1,編譯cramfs-1.1。

(6)生成CramFS的文件系統(tǒng)鏡像initrd.img。

(7)整合啟動(dòng)文件 myOS。

(8)生成光盤鏡像文件 myiso.iso。

4.4 移植過程

4.4.1生成內(nèi)核鏡像

進(jìn)入內(nèi)核文件夾 #cd usr/src/linux-2.6.36 進(jìn)行內(nèi)核的配置與裁剪 。

# make mrproper

# make menuconfig。

在內(nèi)核配置中:

[ * ]---將該功能模塊編譯進(jìn)內(nèi)核

[ ]---不將該功能模塊編譯進(jìn)內(nèi)核

M ---將該功能編譯成模塊的方式,可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊,具體參數(shù)及選項(xiàng)含義內(nèi)核文檔里有明確說明。

配置完成后,選擇 Save an Alternate Configuration File,然后退出。

# make bzImage。

最終生成的內(nèi)核鏡像文件bzImage在/usr/src/linux-2.6.36/arch/X86/boot 內(nèi)。

4.4.2 編譯安裝busybox

進(jìn)入busybox文件夾 #cd 001/busybox-1.1.3

修改Makefile #vim Makefile ,以下兩項(xiàng)改為:

CROSS_COMPILE = arm-Linux-

ARCH = arm ARCH

進(jìn)入busybox配置界面 #make menuconfig ,busybox配置界面如圖1所示。

4.4.3 構(gòu)建文件系統(tǒng)目錄

#mkdir /mnt/myOS/rootfs #cd /mnt/myOS/rootfs

#mkdir etc usr var conf lib modules scripts

將busybox生成的鏈接文件復(fù)制到rootfs

#cp /001/busybox-1.1.3/_install/* /mnt/myOS/rootfs

將根文件下lib庫文件復(fù)制到rootfs/lib #cp -R /lib/* /mnt/myOs/rootfs/lib

4.4.4 配置CramFS

進(jìn)入CramFS-1.1 #cd 001/cramfs-1.1 進(jìn)行編譯CramFS #make

Make之后會(huì)產(chǎn)生兩個(gè)bin文件mkcramfs和cramfsck。

將這兩個(gè)bin文件復(fù)制到/usr/bin中 #cp mkcramfs cramfsck /usr/bin。

之后在終端中就可以使用mkcramfs和cramfsck命令了。

4.4.5 制作CramFS文件系統(tǒng)鏡像

在終端中輸入:

#mkcramfs /mnt/myOS/rootfs /mnt/myOS/initrd.img

這時(shí)在 /mnt/myOS 下會(huì)產(chǎn)生一個(gè)initrd.img文件系統(tǒng)鏡像文件。

4.4.6 制作iso鏡像

使用mkisofs命令制作iso鏡像文件。

#mkisofs -o myiso.iso -b isoLinux/isoLinux.bin -c isoLinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table mnt/myOS

這時(shí),在根目錄下就會(huì)產(chǎn)生一個(gè)myiso.iso系統(tǒng)鏡像文件。

5 系統(tǒng)測(cè)試

首先將制作的好的myiso.iso系統(tǒng)鏡像文件復(fù)制到物理機(jī)內(nèi),然后通過虛擬機(jī)軟件進(jìn)行啟動(dòng)。

在啟動(dòng)過程中首先是加載啟動(dòng)引導(dǎo)文件——isolinux.bin,然后通過啟動(dòng)引導(dǎo)文件調(diào)用啟動(dòng)配置文件——isolinux.cfg中的相關(guān)配置信息。

接下來是加載內(nèi)核鏡像,這個(gè)過程很快,內(nèi)核加載完成后進(jìn)行掛載文件系統(tǒng)(掛載文件系統(tǒng)如圖2所示)。

6 結(jié)語

Linux 內(nèi)核在系統(tǒng)啟動(dòng)期間的最后操作之一就是掛載根文件系統(tǒng)。根文件系統(tǒng)是嵌入式Linux 系統(tǒng)不可或缺的重要組成部分, 而Busybox是制作嵌入式Linux根文件系統(tǒng)的有效工具。本文首先說明了Linux-2.6.36的內(nèi)核編譯與裁剪、Busybox的編譯與安裝、使用Busybox-1.1.3和cramfs-1.1制作CramFS根文件系統(tǒng)的詳細(xì)過程,然后使用了isolinux方式啟動(dòng)系統(tǒng)內(nèi)核,掛載文件系統(tǒng)鏡像。經(jīng)過測(cè)試,內(nèi)核啟動(dòng)成功,文件系統(tǒng)掛載成功,并且能夠?qū)崿F(xiàn)linux的基本命令,而未移植入動(dòng)態(tài)鏈接的命令不能使用如du、ifconfig等。本文為移植和裁剪Linux以及想要構(gòu)造更為復(fù)雜的根文件系統(tǒng)提供了參考,同時(shí)為嵌入式Linux中CramFS根文件系統(tǒng)的移植實(shí)現(xiàn)進(jìn)行了新的嘗試。

參考文獻(xiàn)

[1] 劉錟.Linux嵌入式系統(tǒng)開發(fā)平臺(tái)選型探討[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004,7(8).

[2] 魯剛,李小平.嵌入式Linux系統(tǒng)軟件平臺(tái)的建立[J].電子科技雜志,2007,8(12).

[3] 鞠劍平,冉全,黎曦.嵌入式Linux在S3C2440上的移植[J].科技資訊,2010,8.