我在前一文中有提到,在 KB9202B 的相關文件中只教怎麼編 Kernel ,沒教怎麼安裝。而事實上,在嵌入式系統的開發階段,為了節省檔案傳輸的麻煩,是可以不需要將核心甚至是根檔案系統安裝到目標板上,而是將目標板設定成 - "直接使用遠端主機上的 Linux 核心及根檔案系統"。要做這樣子的設定,主要是要修改2個地方,一個是目標板上 U-Boot 的設定,一個是主機上,要讓目標板遠端掛載的根檔案系統。
note: 下面的操作前,必須先編譯好核心,並在主機端建立根檔案系統。同時並假設核心的放置目錄為 /tftpboot,檔名為 uImage,根檔案系統的目錄為 /usr/local/arm/target_fs 。目標板的 ip 是 192.168.11.3 ,主機的 ip 是 192.168.11.2 ,gateway ip 是 192.168.11.1 。
1. 主機端的網路配置
a. tftp 伺服器的安裝及設定
我是使用 Ubuntu/Linux 為主機,因此直接使用 apt 安裝 tftp 及 tftpd 兩個套件。
sudo apt-get install tftp tftpd openbsd-inetd接著開啟 /etc/inetd.conf 檔,並加入以下這行︰
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot其中 /tftpboot 就是放置編好的核心的地方,這個路徑是可以改的。
b. NFS 伺服器的安裝及設定
使用 apt 安裝 nfs-kernel-server 這個套件︰
sudo apt-get install nfs-kernel-server開啟 /etc/exports 這個檔案,並加入以下這行︰
/usr/local/arm/target_fs 192.168.11.11/32(rw,no_root_squash)其中 192.168.11.11 是我的目標板使用的 ip ,這行是指定,從 192.168.11.11 連線過來的 NFS 存取,具有讀寫的權限,同時 no_root_squash 這個引數讓目標板可以用其 root 權限來存取目錄。這個引數如果沒有設定,則在目標板掛載了之後,所有的寫入操作都無效。
2. 根檔案系統的修改
buildroot 預設建立在的根檔案系統,似乎無法直接使用 nfs 掛載,必須要在幾個地方做修改︰
a. 將 /usr/local/arm/target_fs/etc/init.d/目錄下的 S40network 改成 s40network ,即開機時不執行此 script 。
b. 修改 /usr/local/arm/target_fs/etc/network/interfaces ,加入如下關於 eth0 的描述,以開啟網路服務︰
auto eth0c. 修改 /usr/local/arm/target_fs/etc/inittab ,將以下這行前面的 # 刪掉,這樣才可以在開機後,仍然可以經由 Serial port 來接收資訊︰
iface eth0 inet static
address 192.168.11.3
netmask 255.255.255.0
gateway 192.168.11.1
#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100d. buildroot 並沒有正確建立 dev 下的節點,必須手動以 root 身份使用 mknod 建立。有哪些節點需要建立,可參考 buildroot 的 target/generic/device_table.txt 。建立單一節點的方式如下(必須使用super user)︰
mknod -m 0666 console c 5 1我寫了一個 script ,在 dev 目錄下以 root 執行,可直接建立 device_table.txt 指定的所有節點,執行此檔案前必須先清空 dev 目錄。建立後可再使用 chown 修改擁有者。
e. 修改根檔案系統的 /etc/fstab 檔設定
修改 /usr/local/arm/target_fs/etc/fstab 這個檔案。將原本存在 fstab 中的下面這行前面加個 # 號。
#/dev/root / ext2 rw,noauto 0 1這使的核心載入後,可以直接使用遠端的根檔案系統。
4. 修改 U-Boot 的設定
a. 在目標板開機倒數時,按下任意鍵進入 U-Boot 的設定程式。
b. 設定 target 及 host 的網路設定(依不同網路而異)︰
U-Boot> setenv ip 192.168.11.3c. 設定 bootp 要從 tftp 抓取的 kernel 影像檔名稱
U-Boot> setenv serverip 192.168.11.2
U-Boot> setenv netmask 255.255.255.0
U-Boot> setenv gatewayip 192.168.11.1
U-Boot> setenv bootfile uImaged. 指定核心下載的位置及根檔案系統位於 host 上的路徑
U-Boot> setenv kernel_addr 2000d000e. 設定開機命令稿
U-Boot> setenv rootpath /usr/local/arm/target_fs
U-Boot> setenv bootpnfs bootp \$(kernel_addr)\; setenv bootargs console=ttyS0,115200n8 root=/dev/nfs rw nfsroot=\$(serverip):\$(rootpath) ip=\$(ipaddr):\$(serverip):\$(gatewayip):\$(netmask):::off panic=1\; bootm \$(kernel_addr)f. 儲存及開機
U-Boot>saveenv
U-Boot>run bootpnfs
9 comments:
當然不是,我看起來像女生嗎=.=
我是女生 這會很超過嗎
網路沙豬.....
原來肉鬆你算娘的男生
哈哈哈~~~
我看人家是看上你們家阿娃了
呵呵,我想也是。我在flickr上放阿哇的相片,也有人誤會...
Hi,
我個人並沒有刻意要責怪你的意思,
但是 "你是女生嗎? 玩嵌入式 Linux 這麼精, 會不會有點超過" 這麼一句話,
對從事這個領域的女性工作者而言,就算是一種侮辱了。
網路上因為大家都是匿名的,有人會覺得開開玩笑無傷大雅,
但是卻因為看不到對方,不謹慎的言論是很容易引起誤會的。
再者,像這樣的一句玩笑話,如果用不同的方式來講,或許真的能讓人會心一笑,所以在開玩笑的同時,還是應該要思考一下。
謝謝chinson對這個領域女性工作者的仗義直言
這裏是你的blog 我其實不應該再多說什麼
只是 我還是想建議這位朋友
如果你真的想找這個領域的女性專家討論
那這種口氣只會讓人反感
是絕對不可能達到"有趣"的效果的
也許 完全排除性別的考量來互相討論
才可能得到最完整的知識
我的發言到此為止 chinson覺得不適合可以刪掉
^___^
This is gorgeous!
Post a Comment