<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > cramfs根文件系統的移植成功(fs2410下親測)

cramfs根文件系統的移植成功(fs2410下親測)

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
1引言

依據Unix的習慣,通常會(huì )將linux系統中任何對象(包括設備)都視為文件。而根文系統是所有文件和設備節點(diǎn)的起始點(diǎn),它是決定系統能否正常啟動(dòng)的關(guān)鍵所在。本文將詳細介紹利用Busybox工具集制作一種簡(jiǎn)單的根文件系統即Cramfs根文件系統的方法。

本文引用地址:http://dyxdggzs.com/article/201611/316934.htm

2開(kāi)發(fā)平臺簡(jiǎn)介

開(kāi)發(fā)系統采用主機+目標板的開(kāi)發(fā)模式,目標板和主機通過(guò)串行線(xiàn)和Ethernet網(wǎng)線(xiàn)實(shí)現通信。主機采用的是:pc機+VMware6.0虛擬機下的Red Hat 9目標板:深圳優(yōu)龍公司開(kāi)發(fā)的FS2410實(shí)驗開(kāi)發(fā)板:其主要參數:CPU:三星S3C2410,主頻203MHz;內存:64M字節;NOR Flash:2M字節(SST39VF1601);NAND Flash:64M字節(K9F1208);嵌入式linux版本:linux2.4.18

根文件系統生成后用Boot Loader燒入開(kāi)發(fā)板的NAND Flash的2號分區運行(其地址為:offset 0x200000 , size 0x1e00000)。

3根文件系統的基本結構

嵌入式linux根文件系統的系統的頂層目錄各有其特殊的用法和目的。一般來(lái)說(shuō)嵌入式linux系統的根文件系統應該包含以下內容:

(1)能夠保證嵌入式linux系統中的大多數應用程序能夠正常運行的最小化目錄包括/bin/dev/etc/lib/proc/sbin/usr/tmp/var。如果用戶(hù)需要為多用戶(hù)提供可擴展環(huán)境還需建立以下目錄:/home/mnt/opt/root。

(2)根文件系統所需的基本鏈接庫:Glibc以及uClibc。

(3)基本的系統配置文件:rcS,inittab,fstab,linuxrc等腳本文件

(4)基本的設備文件:/dev/tty0/dev/ttyS0/dev/console

(5)基本的應用程序:如cd ,ls ,mv,cp等。

4使用Busybox制作Cramfs根文件系統

4.1Cramfs簡(jiǎn)介

Cramfs(Compressed Rom File System)是Linux Torvalds在Transmeta任職時(shí),所參與開(kāi)發(fā)的只具有最基本特性的文件系統。它是針對Linux內核2.4之后的版本所設計的一種新型只讀文件系統,采用了zlib壓縮,壓縮比一般可以達到1:2,但仍可以作到高效的隨機讀取,Linux系統中,通常把不需要經(jīng)常修改的目錄壓縮存放,并在系統引導的時(shí)候再將壓縮文件解開(kāi)。因為Cramfs不會(huì )影響系統的讀取文件的速度,而且是一個(gè)高度壓縮的文件系統。因此非常廣泛應用于嵌入式系統中。

在嵌入式的環(huán)境之下,內存和外存資源都需要節約使用。如果使用RAMDISK方式來(lái)使用文件系統,那么在系統運行之后,首先要把Flash上的映像文件解壓縮到內存中,構造起RAMDISK環(huán)境,才可以開(kāi)始運行程序。但是它也有很致命的弱點(diǎn)。在正常情況下,同樣的代碼不僅在Flash中占據了空間(以壓縮后的形式存在),而且還在內存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節省資源的要求。

而使用Cramfs文件系統可以很好的解決這個(gè)問(wèn)題。Cramfs是一個(gè)壓縮格式的文件系統,它并不需要一次性地將文件系統中的所有內容都解壓縮到內存之中,而只是在系統需要訪(fǎng)問(wèn)某個(gè)位置的數據的時(shí)候,馬上計算出該數據在Cramfs中的位置,將它實(shí)時(shí)地解壓縮到內存之中,然后通過(guò)對內存的訪(fǎng)問(wèn)來(lái)獲取文件系統中需要讀取的數據。Cramfs中的解壓縮以及解壓縮之后的內存中數據存放位置都是由Cramfs文件系統本身進(jìn)行維護的,用戶(hù)并不需要了解具體的實(shí)現過(guò)程,因此這種方式增強了透明度,對開(kāi)發(fā)人員來(lái)說(shuō),既方便,又節省了存儲空間。因此我們在開(kāi)發(fā)時(shí)選擇使用這種簡(jiǎn)單的Cramfs文件系統進(jìn)行根文件系統的移植。

4.2Busybox簡(jiǎn)介

Busybox是標準Linux工具的一個(gè)單個(gè)可執行實(shí)現。Busybox包含了一些簡(jiǎn)單的工具,例如cat和echo,還包含了一些更大、更復雜的工具,例如grep、find、mount以及telnet。有些人將Busybox稱(chēng)為L(cháng)inux工具里的瑞士軍刀.簡(jiǎn)單的說(shuō)Busybox就好像是個(gè)大工具箱,它集成壓縮了Linux的許多工具和命令。雖然Busybox中的這些工具相對于GNU工具有所簡(jiǎn)化,但卻很實(shí)用。Busybox在設計上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用模塊化設計,它采用了與linux內核配置菜單類(lèi)似的配置菜單,使得配置和裁剪變得相當簡(jiǎn)單。Busybox這種特性使得其非常適合于嵌入式系統的應用。幾乎所有的嵌入式Linux都使用Busybox作為工具。同時(shí),Busybox的安裝腳本使得它很容易建立基于Busybox的Linux根文件系統。本文就是通過(guò)使用Busybox這個(gè)強大的工具集來(lái)制作Cramfs根文件系統的。

4.3配置Busybox

Busybox的源代碼可以到官方網(wǎng)站http :/ / www.busybox. net/下載,我們使用的是深圳優(yōu)龍公司提供的源碼包busybox - 1. 00 - pre10. tar . bz2。注意使用版本不一定是越新越好,如果新的版本編譯后在目標板中無(wú)法正常啟動(dòng),可以試著(zhù)回到較老的版本。我們在開(kāi)發(fā)過(guò)程中最開(kāi)始使用的是busybox-1.1.3,結果生成的根文件系統無(wú)法再fs2410上正常啟動(dòng),換回busybox - 1. 00 - pre10則可以輕松解決這個(gè)問(wèn)題。

首先將busybox-1.00-pre10.tar.bz2拷貝到用戶(hù)家目錄:home/jixiang (busybox拷貝到什么目錄可以自行設定)。

[root@mynet jixiang]# cd /home/jixiang

[root@mynet jixiang]# tar vxjf busybox-1.00-pre10.tar.bz2

[root@mynet jixiang]# cd busybox-1.00-pre10

[root@mynet busybox-1.00-pre10]# make menuconfig

進(jìn)入配置菜單界面,我們做如下配置:

(1)在General Configuration中,一定要選擇“Support for devfs”選項,現在的Busybox新版本去掉了這個(gè)選項,不過(guò)應該可以通過(guò)修改配置文件加入。

圖1配置支持設備文件系統界面

(2)在Build Options選項中,選擇使用“靜態(tài)庫”以及設置交叉編譯工具的PREFIX。我使用的交叉編譯工具的路徑是:/usr/local/arm/3.3.2/bin。(具體情況因宿主機交叉編譯環(huán)境路徑不同做相應修改。

圖2配置靜態(tài)庫界面

(3)在Init Utilities選項中,“Support reading an inittab file”應該選中,這樣可以根據自己編寫(xiě)的inittab文件初始化;“Support running init from within an initrd ”應該選中,否則會(huì )提示非常困擾的“/bin/sh: cant access tty; job control turned off”的提示,盡管可以進(jìn)入控制臺命令行。

圖3腳本文件配置界面

(4)Another Bourne - like Shell→Choose your default shell (ash)→,這里應該選中默認shell :ash ,否則不會(huì )生成sh導致不能解釋腳本文件。

圖4 shell配置

(5)其他的配置可以根據自己開(kāi)發(fā)需要自行配置。

4.3編譯并安裝Busybox

配置完成后,退出保存(最好備份.config文件以供后用),然后開(kāi)始生成,執行make TARGET_ARCH=arm;此處的TARGET_ARCH是必須的。

[root@mynet busybox-1.00-pre10]# make TARGET_ARCH=arm

[root@mynet busybox-1.00-pre10]# make install

Busybox將在默認的PREFIX目錄- install下面生成bin、sbin、usr三個(gè)子目錄和一個(gè)鏈接文件linuxrc。

4.4準備生成cramfs文件系統

(1)創(chuàng )建一個(gè)文件夾rootfs,把_install目錄下生成的bin、sbin、usr三個(gè)目錄拷貝到rootfs,并且在rootfs目錄下建立其他子目錄。執行命令mkdir dev etc home lib mnt procsystmp var,建立相應的文件夾,再建立etc下的init.d文件夾。

(2)準備啟動(dòng)文件inittab、fstab、linuxrc、rcS。其中inittab、fstab放在etc目錄下面, rcS放在etc/ init.d/目錄下面,linuxrc放在rootfs目錄下面。

(3)簡(jiǎn)單的配置文件的編寫(xiě)

linuxrc文件:

#!/bin/sh

echo "mount /etc as ramfs"

/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /

/bin/mount -t ramfs ramfs /var

/bin/mkdir -p /var/tmp

/bin/mkdir -p /var/run

/bin/mkdir -p /var/log

/bin/mkdir -p /var/lock

/bin/mkdir -p /var/emptymk

#/bin/mount -t usbdevfs none /proc/bus/usb

exec /sbin/init

rcS文件:

#!/bin/sh

/bin/mount –a

fstab文件:

none /proc proc defaults 0 0

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

注意應該使得上述文件具有執行權限,可以使用chmod755來(lái)修改其權限。

4.5生成Cramfs根文件系統映像

我們使用的是優(yōu)龍提供的cramfs-1.1.tar.gz源碼包,用該工具生成根文件系統映像,

解壓后將mkcramfs放到宿主機Red Hat9的/bin目錄下。

轉到rootfs目錄的上級目錄執行:mkcramfsrootfstest.cramfs

5下載運行test.cramfs

將test.cramfs通過(guò)dnw下載到優(yōu)龍FS2410開(kāi)發(fā)板的nandflash中的文件分區(其地址為:offset 0x200000 , size 0x1e00000),文件系統正常啟動(dòng)。啟動(dòng)界面如圖:

NET: Registered protocol family 1

NET: Registered protocol family 17

VFS: Mounted root (cramfs filesystem) readonly.

Mounted devfs on /dev

Freeing init memory: 124K

mount /etc as ramfs

mount: /etc/mtab: No such file or directory

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: No such file or directory

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

Please press Enter to activate this console.

BusyBox v1.00-pre10 (2009.09.01-12:23+0000) Built-in shell (ash)

Enter help for a list of built-in commands.

/ # ls

binetclibmntsbintmpvar

devhomelinuxrcprocsysusr

/ #



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>