<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/316934.htm

          2開發(fā)平臺簡介

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

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

          3根文件系統(tǒng)的基本結(jié)構(gòu)

          嵌入式linux根文件系統(tǒng)的系統(tǒng)的頂層目錄各有其特殊的用法和目的。一般來說嵌入式linux系統(tǒng)的根文件系統(tǒng)應(yīng)該包含以下內(nèi)容:

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

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

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

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

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

          4使用Busybox制作Cramfs根文件系統(tǒng)

          4.1Cramfs簡介

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

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

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

          4.2Busybox簡介

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

          4.3配置Busybox

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

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

          [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

          進入配置菜單界面,我們做如下配置:

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

          圖1配置支持設(shè)備文件系統(tǒng)界面

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

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

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

          圖3腳本文件配置界面

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

          圖4 shell配置

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

          4.3編譯并安裝Busybox

          配置完成后,退出保存(最好備份.config文件以供后用),然后開始生成,執(zhí)行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三個子目錄和一個鏈接文件linuxrc。

          4.4準備生成cramfs文件系統(tǒng)

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

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

          (3)簡單的配置文件的編寫

          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

          注意應(yīng)該使得上述文件具有執(zhí)行權(quán)限,可以使用chmod755來修改其權(quán)限。

          4.5生成Cramfs根文件系統(tǒng)映像

          我們使用的是優(yōu)龍?zhí)峁┑腸ramfs-1.1.tar.gz源碼包,用該工具生成根文件系統(tǒng)映像,

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

          轉(zhuǎn)到rootfs目錄的上級目錄執(zhí)行:mkcramfsrootfstest.cramfs

          5下載運行test.cramfs

          將test.cramfs通過dnw下載到優(yōu)龍FS2410開發(fā)板的nandflash中的文件分區(qū)(其地址為:offset 0x200000 , size 0x1e00000),文件系統(tǒ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ù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();