這兩天自己動手焊了塊9261的工業級ARM板,然後就打算在上面搭建系統。相應的bootloader和內核(linux-2.6.24)都是從相應的9261光盤裏得到併成功燒寫,至於文件系統,我自己就打算搭建NFS網絡文件系統,一來方便調試,二來是自己從頭開始搭建的系統,用起來肯定非常順手,而且也知根知底。我的步驟如下:
編譯所用交叉編譯器版本:arm-2007q1(來自9261光盤)
一,編譯busybox
從網上下載busybox-1.11.2-tar.bz2
解壓busybox,進入相關目錄,修改Makefile:
CROSS_COMPILE ?=arm-none-linux-gnueabi-
ARCH ?= arm
然後make menuconfig,進入busybox配置界面,配置時需要注意幾點:
1.添加如下兩個選項
Busybox Settings --->BusyboxLibrary Tuning --->
[*]Username completion
[*]Fancy shell prompts
如果不添加,文件系統是不識別PS1這個環境變量的參數的,也就無法修改shell終端的提示行(本人血和淚的教訓,足足折騰了兩天才搞明白這點)
2.選上靜態編譯
網上很多人說這樣在make時會出現很多警告和莫名其妙的錯誤,但是本人這裏卻很正常
3.[ ]Don't user usr
如果選上這項,假如你選的默認的安裝路徑_install,那麼busybox安裝的時候就會在_install下生成bin、sbin、linuxrc,不生成usr目錄;如果不選的話,就會生成bin、sbin、linuxrc、usr四個文件和目錄。
有文說如果不選此項的話安裝時就會覆蓋宿主系統的/usr,經驗證這種說法有誤。
make menuconfig後保存退出
make
make install 就可以在設定的目錄下生成bin,sbin.usr等目錄,裏面放的都是到busybox程序的軟鏈接
二. 製作根文件系統
1.建立根文件系統結構
編譯busybox的時候我已經設置安裝路徑在/opt/at9261/myrootfs目錄下,make install後已經生成了bin,sbin,usr,linuxrc,因此用mkdir命令生成其他的目錄:
mkdir -p dev etc home lib mnt proc sbin sys tmp var root
2.複製文件
複製所用交叉編譯器的庫文件(一般在相應編譯器目錄的arm-none-linux-gnueabi/libc/armv4t/lib下)到myrootfs的lib目錄下。
3.建立相關文件
首先刪除myroofs下的linuxrc文件。linuxrc是到busybox init 的鏈接,這裏不需要,因此刪除不要。
(1)inittab
inittab腳本告訴init在它的每個運行級別上需要做那些事情,詳情見參考文章:http://blog.csdn.net/madding/article/details/4337316 inittab文件詳解
但是上面鏈接裏詳解的是PC上的inittab文件,busbox的init對inittab的解析不同,
詳解見參考文章http://linfengdu.blog.163.com/blog/static/1177107320111186458110/
嵌入式linux啓動時運行的inittab文件 或
http://blog.sina.com.cn/s/blog_5f26cfd20100x3ox.html
BusyBox init及其inittab文件分析
(2)fstab
本文件配置了系統啓動後自動掛載的文件系統。 至於fstab裏的文件系統何時掛載,bootloader與kernel載入內存時以只讀掛載一次
這樣纔有/etc/rc.d/rc.sysinit裏寫的目錄結構 ;然後執行/etc/rc.d/rc.sysinit時以可讀寫方式再掛載一次。
(3)passwd,group
passwd文件記錄linux用戶的信息,每行代表一個用戶;group記錄相應的組的信息,每行代表一個組。
(4)host.conf,hosts,resolv.conf
host.conf文件記錄瞭解析器解析IP地址的順序,hosts文件記錄了主機名和IP地址的對應關係,resolv.conf設置了DNS
(5)ld.so.conf
配置除/lib,/usr/lib外系統自動查找的庫信息
(6)mdev.conf
mdev的配置文件,新建爲一個空文件即可
(7)profile
系統設置環境變量的文件,對每個用戶都有效。
(8)init/rcS
該文件一般是自啓動文件,設置在inittab裏。
這一切都做好後根文件系統就建立完畢了。
注:NFS掛載時uboot設置的bootargs環境變量如下:(以本人的IP地址202.4.155.188爲例)
setenv bootargs 'mem=64M console=ttyS0,115200 root=/dev/nfs rw nfsroot=202.4.155.188:/opt/at9261/myrootfs ip=202.4.155.98:202.4.155.1:255.255.255.0:eth0:off'
saveenv.