ARM開發板系統移植-----rootfs的製作

來源:互聯網
上載者:User

標籤:

  前面兩篇文章分別介紹了mini2440開發板上啟動並執行bootloader和kernel,到這裡系統啟動後其實是停留在一個“僵死”的狀態---無法掛載根檔案系統。

  這裡將介紹如何製作一個根檔案系統,並且掛載到核心中---即讓核心能夠訪問到檔案系統中的目錄和檔案。從使用者的角度來看檔案系統無非就是各個目錄和檔案,注意,這些目錄和檔案可以存在記憶體中,也可以存在Nand Flash 或者NOR Flash中,視具體的檔案系統而定。本文就用基於記憶體的initram 和基於網路的nfs檔案系統做例子介紹檔案系統的概念。

  首先什麼是檔案系統?就本人理解而言,它就是作業系統提供的一種抽象,即作業系統將儲存介質抽象化,並提供一種訪問這種抽象的方法,讓使用者能夠簡潔且方便的訪問儲存介質(如硬碟和nand flash等)。為了實現這種抽象,作業系統把儲存介質進行單元劃分,檔案儲存體在介質時就佔據若干個單元。當然作業系統還記錄下各個檔案的基本屬性(如檔案大小、儲存位置、所屬人、存取權限等等),並組成一個檔案控制區(FCB)。所有檔案的FCB儲存在一個目錄檔案中,即一個目錄檔案就是內容是FCB的檔案,其自身也有FCB目錄檔案的FCB記錄在上一層目錄中,這樣層層往上串連就形成了樹狀目錄結構。或者這樣描述:檔案系統包含兩部分:一組檔案(即所要儲存的資料)和目錄檔案(目錄檔案的內容是每個檔案的FCB,FCB記錄了檔案的所有屬性)。如所示:

  如所示是一個典型的Linux系統目錄結構,從使用者的角度看這就是Linux的檔案系統,從右往左看,假設run目錄下有個檔案file,那麼file的FCB就儲存在run目錄檔案中,而run又是一個檔案,其FCB 儲存在VAR這個目錄檔案中,最後var的FCB就儲存在根目錄檔案中。一次要訪問到file,實質就是要沿著/var/run/file 這樣一個路徑。但是從作業系統的角度來看,這僅僅是提供給使用者的可視性檔案系統,具體的實現細節(比如檔案的物理結構和邏輯結構)它已經隱藏起來。需要注意的是檔案系統儲存在外儲存空間中(nand flash等),記憶體中也會有相應的表明檔案屬性的目錄項,用以加快作業系統訪問檔案的效率。即核心中也會有FCB的內容,甚至目錄檔案也會存在記憶體中。

  根據上面的背景知識其實就可以總結出建立根檔案系統的步驟,無非就是建立這些目錄和檔案,然後讓核心能夠認識它們(即在核心中掛載根檔案系統)。

  具體步驟如下:

  1、建立各個目錄和必須的檔案

    1.1、建立空目錄:

      #mkdir rootfs

      #cd rootfs

      #mkdir bin dev etc lib proc sbin sys usr mnt tmp var

      #mkdir usr/bin usr/lib usr/sbin lib/modules

    1.2、建立裝置檔案:建立Linux啟動需要的裝置驅動檔案:控制台和空

      #cd rootfs/dev

      #mknod -m 666 console c 5 1

      #mknod -m 666 null c 1 3

    1.3、加入設定檔:添加核心啟動的一些設定檔

                 #tar etc.tar.gz

      #mv etc/* .../rootfs/etc/ -rf

    1.4、添加核心模組:

      #cd .../linux

      #make modules ARCH=arm CROSS_COMPILE=arm-linux-

      #make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs

      1.5、編譯/安裝busybox:使用busybox添加常用的命令如cd、ls、date等等

      #make menuconfig

      #make

      #make install    

   2、掛載根檔案系統:事實上掛載根檔案系統就是完成指明根檔案系統放在何處、作業系統如何使用檔案系    統的目錄檔案等等工作。這裡介紹一個基於記憶體的掛載方式,即根檔案系統在編譯後直接整合在核心代碼中,隨著代碼被載入到記憶體中,核心啟動過程中可以直接使用檔案系統。initramfs檔案系統的製作:

    2.1、#cd  .../rootfs/

       #ln -s ./bin/busybox init

           2.2、 配置核心,讓核心知道檔案系統的掛載方式是initramfs。

           2.3、編譯核心

    2.4、設定uboot參數:

       setenv bootargs noinitrd console=ttySAC0,115200

  完成上面的工作就可以製作成一個擁有initramfs 檔案系統的完整的Linux系統。

  至此一個完整的Linux系統就已經能夠在mini2440中運行,接下來就可以在其上進行驅動或者應用開發。

 

ARM開發板系統移植-----rootfs的製作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.