構建根文件系統之根文件系統
在構建根文件系統之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中寫入的東西嘛!
構建根文件系統之根文件系統