999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

劉俊霞 盛文婷

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

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

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

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

1 CramFS文件系統(tǒng)

CramFS 是專門針對閃存設(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)存之中, 然后通過對內(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)過處理、打包的,對其進(jìn)行寫操作有一定困難。所以CramFS不支持寫操作,這個(gè)特性剛好適合嵌入式應(yīng)用中使用Flash存儲文件系統(tǒng)的場合。在CramFS中,文件最大不能超過16MB。支持組標(biāo)識(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ù)文件的存儲。

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)測試

首先將制作的好的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)過測試,內(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ā)平臺選型探討[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004,7(8).

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

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

主站蜘蛛池模板: 99视频在线免费| 欧美中出一区二区| 亚洲中文无码av永久伊人| 成年午夜精品久久精品| 久久毛片免费基地| 国产又黄又硬又粗| 国产资源站| 免费精品一区二区h| 经典三级久久| 亚洲 欧美 偷自乱 图片| 国产va在线观看| 久久夜色精品国产嚕嚕亚洲av| 国产免费久久精品99re丫丫一| 亚洲AV电影不卡在线观看| 国产一级裸网站| 亚洲天堂免费在线视频| 欧美日韩激情在线| 综合色区亚洲熟妇在线| 91国语视频| 美女潮喷出白浆在线观看视频| 精品国产免费观看一区| 欧美a在线视频| 三上悠亚精品二区在线观看| 中文字幕人妻无码系列第三区| 国产玖玖视频| 亚洲va精品中文字幕| 香蕉色综合| 在线免费看黄的网站| AV无码无在线观看免费| 免费无遮挡AV| 99久久性生片| 成人字幕网视频在线观看| 国产99精品久久| 特级aaaaaaaaa毛片免费视频| 亚洲最大福利视频网| 青青操视频免费观看| 免费一级毛片完整版在线看| 国产一在线| 国产激情无码一区二区免费| 亚洲国产系列| 亚洲日韩AV无码一区二区三区人| 亚洲精品第一在线观看视频| 国产精品欧美日本韩免费一区二区三区不卡 | 国产成人一区在线播放| 好紧好深好大乳无码中文字幕| 97精品伊人久久大香线蕉| 亚洲日韩Av中文字幕无码| 天天操精品| 91九色最新地址| 国产青青操| 国产新AV天堂| 国产小视频免费| 凹凸精品免费精品视频| 青草精品视频| 国产熟女一级毛片| 国产免费网址| 综合色天天| 免费日韩在线视频| 成人毛片在线播放| 91免费精品国偷自产在线在线| 嫩草影院在线观看精品视频| 欧洲高清无码在线| 亚洲成人在线免费| 老熟妇喷水一区二区三区| 国产精品欧美在线观看| 国产国拍精品视频免费看 | 青青草一区二区免费精品| 久久综合结合久久狠狠狠97色| 农村乱人伦一区二区| a亚洲天堂| 亚洲一区二区三区麻豆| 欧美高清视频一区二区三区| 中文成人无码国产亚洲| 日本国产一区在线观看| www.91中文字幕| 午夜精品区| 久久国产免费观看| 国产精品永久不卡免费视频| 亚洲日本韩在线观看| 国产精品极品美女自在线| 女人18毛片水真多国产| 成年人免费国产视频|