新聞中心

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

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

        作者: 時間:2016-11-11 來源:網絡 收藏
        1引言

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

        本文引用地址:http://www.104case.com/article/201611/316934.htm

        2開發平臺簡介

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

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

        3根文件系統的基本結構

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

        (1)能夠保證嵌入式linux系統中的大多數應用程序能夠正常運行的最小化目錄包括/bin/dev/etc/lib/proc/sbin/usr/tmp/var。如果用戶需要為多用戶提供可擴展環境還需建立以下目錄:/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簡介

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

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

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

        4.2Busybox簡介

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

        4.3配置Busybox

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

        首先將busybox-1.00-pre10.tar.bz2拷貝到用戶家目錄: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

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

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

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

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

        圖2配置靜態庫界面

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

        圖3腳本文件配置界面

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

        圖4 shell配置

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

        4.3編譯并安裝Busybox

        配置完成后,退出保存(最好備份.config文件以供后用),然后開始生成,執行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文件系統

        (1)創建一個文件夾rootfs,把_install目錄下生成的bin、sbin、usr三個目錄拷貝到rootfs,并且在rootfs目錄下建立其他子目錄。執行命令mkdir dev etc home lib mnt procsystmp var,建立相應的文件夾,再建立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

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

        4.5生成Cramfs根文件系統映像

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

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

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

        5下載運行test.cramfs

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

        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

        / #



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 庆云县| 汤阴县| 潼南县| 贵阳市| 区。| 永吉县| 益阳市| 苍溪县| 特克斯县| 健康| 个旧市| 乳源| 邯郸市| 晋州市| 河津市| 页游| 汽车| 五家渠市| 成都市| 临朐县| 南昌市| 湛江市| 砀山县| 屏东县| 平顶山市| 虎林市| 乐都县| 临沭县| 深州市| 永川市| 长治县| 江北区| 梁山县| 龙川县| 黄陵县| 常熟市| 卫辉市| 邓州市| 四川省| 佛坪县| 中卫市|