1. 程式人生 > >構建根文件系統之根文件系統

構建根文件系統之根文件系統

構建根文件系統 最好 soft 動態庫 strong 文件系統 mod busybox 再處理

在構建根文件系統之busybox中,我們已經實現了配置,編譯,安裝busybox。即那個init程序的來源。

首先在pc看一下,/dev/console 和/dev/null的具體信息:

執行ls /dev/console /dev/null

crw------- 1 root root 5, 1 6月 27 08:06 /dev/console //字符設備 ,主設備號為5,次設備號為1
crw-rw-rw- 1 root root 1, 3 6月 27 08:06 /dev/null   //字符設備,主設備號為1,次設備號為3

切換到/work/nfs_root/first_fs目錄下,創建/dev/console /dev/null

mknod console c 5 1

mknod null c 1 3

這樣就完成了console和null設備的創建。

接下來再處理/etc/inittab,你如果不去創建的話,它就會使用默認的配置項。在默認的配置項中,有很多都是我們不需要的,因此需要我們自己處理這個配置項。

首先創建dev目錄,接下來創建配置文件inittab。加入這條信息:

console ::askfirst:-/bin/sh //執行時機:askfirst 執行程序或腳本: /bin/sh 標準輸入、標準輸出、標準錯誤定位到console中。

接下來安裝glibc庫

在我們制作交叉編譯工具鏈arm-Linux-gcc時,已經生成了glibc庫,可以直接使用它來構建根文件系統,本文使用的時光盤裏自帶的壓縮庫,是arm-linux-gcc3.4.5版本的glibc庫。

如果用arm-linux-gcc是4.3.2的,可不可以使用呢?我試驗過:

1、用arm-linux-gcc -4.3.2,然後將其裏面的所謂的glibc庫拷到了/work/nfs_root/first_fs/lib,這樣根文件系統起不來。

2、用arm-linux-gcc -4.3.2,,將arm-linux-gcc-3.4.5-glibc-2.3.6.tar中的所謂的glibc庫拷到了/work/nfs_root/first_fs/lib,這樣根文件系統起不來。

分析以上情況,是因為glibc庫出現了問題。最好索性用的是韋老大制作好的arm-linux-gcc-3.4.5-glibc-2.3.6.tar,成功了。

在開發板上只需要加載器和動態庫,構建的根文件系統的目錄為/work/nfs_root/first_fs,操作如下:

mkdir -p /work/nfs_root/first_fs/lib

cd ~/work/gcc-3.4.5-glibc-2.3.6/arm-linux/lib //每個人存放的位置是不同的。

cp *.so.* /work/nfs_root/first_fs/lib -d 註意-d表示,如果本來是一個鏈接文件,讓它保持鏈接文件

如果要創建目錄A並創建目錄A的子目錄B,沒有用-p的情況下是mkdir 2次

如果用-p 可以直接創建2個目錄 mkdir -p 目錄A/子目錄B就可以

這樣一個最小的文件系統就做好了,怎麽把它弄到開發板上呢?需要做一個映像文件。

所謂制作文件系統的映像文件,就是將一個目錄下的所有內容按照一定的格式存放到一個文件中,這個文件可以直接燒寫到存儲設備上去。當系統啟動後掛接這個設備,就可以看到與原來目錄一樣的內容。

怎樣做一個映像文件?制作yaffs2的映像文件

將光盤中的yaffs_source_util_larger_small_page_nand.tar拷貝到~/work目錄下

tar -xjf yaffs_source_util_larger_small_page_nand.tar   解壓得到Development_util_ok,

cd Development_util_ok/yaffs2/utils

執行make命令生成mkyaffs2image工具,將其復制到/usr/local/bin目錄

cp mkyaffs2image /usr/local/bin

加上可執行權限:chmod +x /usr/local/bin/mkyaffs2image

註意:在編譯遇到錯誤時,切換到root權限下試試

cd /work/nfs_root目錄

sudo mkyaffs2image first_fs first_fs.yaffs2

first_fs.yaffs2燒到開發板上,我這裏用的是tftp

tftp 30000000 first_fs.yaffs2

nand erase root

nand write.yaffs 30000000 0x260000 $(filesize)

然後重啟開發板,你會看到如下的內容:

Please press Enter to activate this console.

然後按下enter鍵,你又會看到:

starting pid 763, tty ‘/dev/console‘: ‘bin/sh‘
#

這不就是我們在etc/inittab中寫入的東西嘛!

構建根文件系統之根文件系統