開發環境:Ubantu11.04 arm-linux-gcc-4.3.2 ok6410開發板 busybox-1.10.3.tar
製作根檔案系統:
1、安裝 libncurses5-dev,這個程式庫提供了文本選單介面如果沒有安裝的話則無法進入圖形介面,連網安裝是最方便的直接打命令即可:
sudo apt-get install libncurses5-dev
2、拷貝 busybox 原始碼 /work(自己建立的)目錄下並且解壓檔案。tar -zxvf busybox-1.10.3.tar
3、修改“/work/busybox-1.10.3”目錄下的編譯配置
在 Makefile 檔案找到 ARCH 和 CROSS_COMPILE 修改成如下
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
即將處理器改為 arm,將編譯器設定為 arm-linux-gcc;
4、配置 busybox
(1)Linux 下開啟命令終端,切換到“/work/busybox-1.10.3”目錄,使用命令“make menuconfig”
按照以下選項進行配置:
設定 1:
Busybox Settings --->
Build Options --->
[ ]Build BusyBox as a static binary //不選此項進行動態編譯。
Busybox Library Tuning --->
[*] Support for /etc/networks
[*] vi-style line editing commands
(15) History size //曆史紀錄長度
[*] History saving
[*] Tab completion //支援按下 Tab 自動補全
[*] Username completion
[*] Fancy shell prompts
設定 2:
Miscellaneous Utilities --->
[ ]taskset //不要選這一項,bug,選了就會出錯!!!
設定 3:
Linux Module Utilities --->
[ ] Support version 2.2.x to 2.4.x Linux kernels //不要選這一項
配置完成後,在主菜單裡選擇<Exit>退出並儲存設定;
(再進行第5步時要安裝交叉編譯環境,否則無法順利編譯)
安裝arm-linux-gcc-4.3.2方法:
下載安裝包大約84M ,然後解壓到根目錄中,命令tar xvzf arm-linux-gcc-4.3.2.tgz -C / 然後以root身份進行配置,省得麻煩
注意以上命令必須要有-C而且是大寫的後邊有個空格也要注意然後配置下編譯環境路徑gedit /root/.bashrc等一會出來文字編輯器後在檔案最後(最後一行)加上 下面代碼 export PATH=/usr/local/arm/4.3.2/bin:$PATH 此時你可以在root使用者下驗證 arm-linux-gcc -v成功(注意必須得重新登入下)log out這個也是對profile進行配置
5、使用命令“make all install”進行編譯,若無錯誤將在 busybox-1.10.3/_install 目錄產生 bin,sbin ,usr 目錄及 linuxrc 啟動初始化程式;
(注:若進行了這步,還需修改第 4 步配置,先運行命令“make all uninstall”清除已產生的檔案)
在“/work”目錄下建立一目錄 rootfs,將產生 bin sbin usr 目錄及 linuxrc 啟動初始化程式拷貝到建立的 rootfs 目錄下(這個就是你自己製作的根檔案系統的主目錄了);
6、切換到“/work/rootfs”目錄,分別使用以下命令建立其它目錄;
mkdir dev etc home lib mnt proc sys tmp root
mkdir mnt/etc
mkdir usr/lib
7、拷貝依賴庫到 lib 目錄
(1)查看依賴庫,切換到“/work/busybox-1.10.3/_install/bin”目錄,使用命令
arm-linux-readelf -a ./busybox | grep "Shared library"查看需要哪些依賴庫(其實不用看也無所謂)
這說明要使檔案系統正常運行,需要最基本的庫檔案:libcrypt.so.1、libm.so.6、libc.so.6,
這些庫檔案位於“/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/”目錄下;
(2)libcrypt.so.1、libm.so.6、libc.so.6 分別為 libcrypt-2.8.so、libm-2.8.so、libc-2.8.so
檔案的軟串連,將 libcrypt.so.1、libm.so.6、libc.so.6 和 libcrypt-2.8.so、libm-2.8.so、
libc-2.8.so 這 6 個檔案拷貝到根檔案系統的 lib 目錄下(即“/work/rootfs/lib”;)
另外還需要拷貝動態載入器 ld-linux.so.3 和 ld-2.8.so 檔案,與上步驟相同;
8、在根檔案系統的 dev 目錄下建立基本的裝置檔案
(1)切換到目錄“/work/rootfs/dev”;
(2)用以下命令建立裝置檔案:
mknod console c 5 1
mknod null c 1 3
在 linux 系統啟動時,dev 目錄下必須要有 console 裝置檔案;
9、建立設定檔 rcS,是一個指令檔,藉助啟動指令碼可以設定各種程式開機後自動運行
(1)切換到目錄“/work/rootfs/etc”;
(2)在 etc 目錄下建立目錄“init.d”;
(3)在 init.d 目錄下建立檔案 rcS,其內容如下;
#! /bin/sh
mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
之後執行命令 chmod +x rcS 將 rcS 檔案變為可執行檔;
(其中:mount –a 為將 fstab 中的檔案系統進行掛載,echo /sbin/mdev > /proc/sys/kernel/hotplug 為設定核心的 hotplug handler 為 mdev,即當裝置熱插拔時,由 mdev 接受來自核心的訊息並作出相應,比如處理 USB 磁碟機的插拔,
mdev –s 為使用 mdev 機制(udev 的精簡版)根據核心的驅動註冊資訊在“/dev”自動建立裝置檔案;)
10、建立設定檔 fstab,該檔案定義了一些檔案系統的掛載點
(1)切換到目錄“/work/rootfs/etc”;
(2)建立檔案 fstab,其內容如下;
proc /proc proc defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
即將 proc 檔案系統掛載到/proc 目錄,裝置檔案系統掛載到/dev 目錄,sysfs 檔案系統掛載到
/sys 目錄,tmpfs 檔案系統掛載到/tmp 目錄;
11、建立設定檔 inittab;
(1)切換到目錄“/work/rootfs/etc”
(2)建立檔案 inittab,其內容如下;
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
其中含義見另外文章《根檔案系統inittab》;
12、建立設定檔 mdev.conf,這是 mdev 的設定檔
(1)切換到目錄“/work/rootfs/etc”;
(2)建立檔案 mdev.conf,其內容為空白;
ok!到此為止根檔案系統製作完畢,開始掛載。
nfs 掛載步驟:
1.準備製作好的檔案系統,本例中檔案系統位於/work/rootfs,許可權最好為755或777
2.pc端安裝nfs伺服器:
apt-getinstall nfs-kernel-server
3.修改/etc/exports,在末尾添加:/work/rootfs
192.168.2.*(rw,sync,no_root_squash)
///work/rootfs伺服器端共用目錄
//192.168.2.*允許訪問nfs伺服器共用目錄的客戶機的ip範圍,可自訂
//rw客戶機對共用目錄許可權
//sync同步寫入儲存空間,可選
//no_root_squash允許客戶機享有主機root身份,可選
//括弧中的三個參數之間不可有空格
///work/rootfs與192.168.2.*間有一個空格
4.重啟nfs服務:
servicenfs-kernel-server restart
5.使以上設定生效:
exportfs–a
5.連好開發板與pc的網線
6.啟動開發板,修改啟動參數:setenvbootargs
root=/dev/nfs nfsroot=192.168.2.1:/work/rootfsip=192.168.2.2:::::eth0 console=ttySAC0,115200
(注:192.168.2.1為pc機ip(nfs
server ip 地 址),192.168.2.2為開發板ip
, eth0前面是五個“:”,根 文 件 系 統 位 於/work/rootfs; root=/dev/nfs 表示以 NFS 方式掛載根)
7.saveenv並且reset
8.更改pc機ip為192.168.2.1
編輯連結選擇有限連結-》編輯-》將方法改為手動,添加IP:192.168.2.1 子網路遮罩:255.255.255.0 -》儲存
重啟開發板即可進入到自己掛載的nfs檔案系統中了!做完了!