ARM開發板如何掛載NFS開發環境的方法步驟(mini2440無盤啟動)
首先介紹一下我的開發環境:
PC環境是ubuntu9。04,開發板為友善之臂的MINI2440
主機IP:192.168.50.72 網關:192.168.50.1 子網掩碼:255.255.255.0
開發板IP:192.168.50.168 網關:192.168.50.1 子網掩碼:255.255.255.0
為了能和主機建立起連接我必須得把開發板IP改成和主機一個網段的 .
這里首先要說明的是ubuntu的靜態IP設置問題:
默認安裝完成后,右上角的網絡配置上 wired ..和eth0為灰色。不能點選 。
然后禁用networdmanager啟動network以太網設置靜態IP的時候,不管怎么設置,子網掩碼都和網關一樣,
比如說:地址:192.168.0.22
子網掩碼: 192.168.0.1 //不管怎么輸入255.255.255.0 ,都不行!
網關: 192.168.0.1 //這里改了255.255.255.0的話,上面就也成255.255.255.0了。(auto ethernet是可以聯上網的)。所以就上GG找答案,找解決方法。
進入FC10,執行終端命令(也可以用VI修改)
$ su -c ‘gedit /etc/sysconfig/networking/devices/ifcfg-eth0′
直接修改文件中的子網掩碼信息就可以
代碼為:
# Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express
DEVICE=eth0
HWADDR=00:16:e6:db:c2:96
ONBOOT=yes
BOOTPROTO=static //這個應該是“static”,而不是“dhcp”或“none”;
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
NM_CONTROLLED=yes//這個應該是“yes”,如不修改,鏈接仍是disconnected;
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.50.72
GATEWAY=192.168.50.1
然后重新激活下網卡就可以了.
#service network restart
設置完成后,右上角的網絡配置上System eth0與auto ethernet就可以點選了.
需要說明的是因為我之前沒有設置靜態IP之前通過 NFS 啟動系統啟動不了.
連接主機和開發板
我選擇了串口線和網線連接起了主機和開發板
連接好電源,串口線,網線,打開串口終端
配置minicom(在FC10終端輸入命令minicom -s)
進入到minicom配置界面后選擇 :Serial port setup
然后按照下面的設置下就OK了
A – Serial Device : :/dev/ttyS0
B – Lockfile Location : /var/lock
C – Callin Program :
D – Callout Program :
E – Bps/Par/Bits : 115200 8N1
F – Hardware Flow Control : No
G – Software Flow Control : No
建立和配置 NFS 服務
(1)設置共享目錄
運行命令
#gedit /etc/exports
編輯 nfs 服務的配置文件(注意:第一次打開時該文件是空的),添加以下內容:
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中:
/opt/FriendlyARM/mini2440/root_qtopia 表示 nfs 共享目錄,它可以作為開發板的根文件系統通過 nfs 掛接;
* 表示所有的客戶機都可以掛接此目錄
rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力
no_root_squash 表示允許掛接此目錄的客戶機享有該主機的 root 身份
(2)通過命令啟動和停止 nfs 服務
在命令行下運行:
#/etc/init.d/nfs restart
這將啟動 nfs 服務,可以輸入以下命令檢驗 nfs 該服務是否啟動。
# mount -t nfs 192.168.50.72: /opt/FriendlyARM/mini2440/root_qtopia /mnt/
如 果 沒 有 出 現 錯 誤 信 息 , 您 將 可 以 瀏 覽 到 /mnt 目 錄 中 的 內 容和
/opt/FriendlyARM/mini2440/root_qtopia 是一致的。
使用這個命令可以停止 nfs 服務:
#/etc/init.d/nfs stop
檢查nfs服務器是否開啟: #service nfs status
重啟對應的2個服務: #service portmap restart
#service nfs restart
檢查防火墻看是否屏蔽了nfs端口
#service iptables stop
#service iptables status
通過 NFS 啟動系統
當 NFS 服務設置好并啟動后,我們就可以把 NFS 作為根文件系統來啟動開發板了。通過使用 NFS 作為根文件系統,開發板的“硬盤”就可以變得很大,因為您使用的是主機的硬盤,這是使用 linux 作為開發經常使用的方法,
設置目標板啟動模式為 Nand Flash 啟動,連接好電源,串口線,網線;打開串口終端,在開機或者復位的時候迅速按下 PC 機的空格鍵,這樣我們就進入了 vivi 模式,輸入以下命令:
Supervivi> param set linux_cmd_line “console=ttySAC0 root=/dev/nfs
nfsroot=192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.50.168:192.168.50.72:192.168.50.1:255.255.255.0:mini2440:eth0:off”
(1,如果通過minicom監控串口,如出現亂碼,可將波特率調高點,我調的是
115200 2,輸入命令過長的話,發現minicom沒法
換行,其實也可以設置一下:同時按下CTRL+A 松開后按 W換行開關)
注意:要是你用的是usb轉串口console=ttyUSB0。還有就是你要把你想掛載的文件系統放在共享的文件里面(root_qtopia)
其中 ,param set linux_cmd_line 是設置啟動 linux 時的命令參數。其各參數的含義如下:
nfsroot 后面是自己開發主機的 IP 地址。
“ip=”后面:
第一項(192.168.50.168)是目標板的臨時 IP(注意不要和局域網內其他 IP 沖突);
第二項(192.168.50.72)是開發主機的 IP;
第三項(192.168.50.1)是目標板上網關(GW)的設置;
第四項(255.255.255.0)是子網掩碼;
第五項是開發主機的名字(一般無關緊要,可隨便填寫)
eth0 是網卡設備的名稱
然后輸入 boot,按回車就可以通過 nfs 啟動系統了。
在開發板上掛載NFS網絡文件系統(Linux 中最常用的方法就是采用 NFS 來執行各種程序,這樣可以不必花費很多時間下載程序,雖然在此下載 hello 程序用不了多久,一旦您的應用程序變得越來越大,您就會發現使用 NFS 運行的方便所在。)
通過NFS啟動系統后,在開發板終端輸入
[root@FriendlyARM /]# mount -t nfs -o nolock 192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia /mnt/
這里我剛開始遇到了一個問題,以為為什么開發板不能mount,因為提示如下錯誤信
息: mount: mounting
192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia on /mnt/ failed: No
such file or directory
于是我就ls看了一下,發現沒有mnt文件夾,所以就自己創建了一個.再次mount就沒有問題了.
[root@FriendlyARM /]# ls
bin etc home linuxrc proc sbin tmp var
dev hello lib opt root sys usr www
[root@FriendlyARM /]# mkdir mnt
[root@FriendlyARM /]# ls
bin hello linuxrc proc sys var
dev home mnt root tmp www
etc lib opt sbin usr
[root@FriendlyARM /]# mount -t nfs -o nolock 192.168.50.72:/opt/FriendlyARM/mini
2440/root_qtopia /mnt/
[root@FriendlyARM /]# cd /mnt/
[root@FriendlyARM /mnt]# ls
bin hello linuxrc proc sys var
dev home mnt root tmp www
etc lib opt sbin usr
mount成功后你進入到/mnt目錄下就可以看到你主機root_nfs目錄下的內容了.
至此我成功在ARM開發板上掛載NFS網絡文件系統.
from:
http://www.cembed.com/bbsxp/ShowPost.asp?ThreadID=6579
下邊是我轉載的完美的實現ubuntu的nfs方法步驟:
網絡文件系統(NFS)
一、NFS簡介
1、NFS就是Network File
System的縮寫,它的最大功能就是可以通過網絡讓不同的機器,不同的操作系統彼此共享文件(share
files)——可以通過NFS掛載遠程主機的目錄,訪問該目錄就像訪問本地目錄一樣,所以也可以簡單的將它看作一個文件服務器(File
Server)。
注意:一般而言,使用NFS服務能夠方便地使各unix-like系統之間實現共享,但如果需要在unix-like和windows系統之間共享,那就得使用samba了。
2、NFS是通過網絡進行數據傳輸,那么NFS使用哪些端口呢,答案是……不知道,因為NFS傳輸數據時使用的端口是隨機的,唯一的限制就是小于1024,客戶端怎么知道服務器使用的是哪個端口,此時就要用到遠程過程調用RPC。
其實,NFS運行在SUN的RPC(Remote Procedure
Call,遠程過程調用)基礎上,RPC定義了一種與系統無關的方法來實現進程間通信,由此,NFS Server也可以看作是RPC
Server。正
因為NFS是一個RPC服務程序,所以在使用它之前,先要映射好端口——通過portmap設定。比如:某個NFS
Client發起NFS服務請求時,它需要先得到一個端口(port),所以它先通過portmap得到port
number(不僅是NFS,所有的RPC服務程序啟動之前,都需要先設定好portmap)。
注意:在啟動RPC服務(比如NFS)之前,需要先啟動portmap服務。
3、NFS允許系統將其目錄和文件共享給網絡上的其他系統。通過NFS,用戶和應用程序可以訪問遠程系統上的文件,就像它們是本地文件一樣。那么NFS最值得注意的優點有:
(1)本地工作站可以使用更少的磁盤空間,因為常用數據可以被保存在一臺機器上,并讓網絡上的其他機器可以訪問它。
(2)不需要為用戶在每臺網絡機器上放一個用戶目錄,因為用戶目錄可以在NFS服務器上設置并使其在整個網絡上可用。
(3)存儲設備如軟盤、光驅及USB設備可以被網絡上其它機器使用,這可能可以減少網絡上移動設備的數量。
二、與NFS相關的幾個文件和命令
1、/etc/exports
對NFS服務的訪問是由exports來批準,它枚舉了若干有權訪問NFS服務器上文件系統的主機名。
2、/sbin/exportfs
維護NFS的資源共享,可以通過它重新設定/etc/exports的共享目錄,卸載NFS
Server共享的目錄或者重新共享等。
3、/usr/sbin/showmount
上面的文件主要用在NFS
Server端,而showmount則主要用在Client端,showmount可以用來查看NFS共享的目錄資源。
4、/var/lib/nfs/xtab
NFS的記錄文檔:通過它可以查看有哪些Client連接到NFS主機的記錄。
下面這幾個并不直接負責NFS,實際上它們是負責所有的RPC。
5、/etc/default/portmap
實際上,portmap負責映射所有的RPC服務端口,它的內容非常非常之簡單。
6、/etc/hosts.deny
設定拒絕portmap服務的主機,即禁止訪問的客戶端IP列表。
7、/etc/hosts.allow
設定允許portmap服務的主機,即允許訪問的客戶端IP列表。
三、NFS安裝
在主機上安裝NFS服務軟件,因為Debian/Ubuntu上默認是沒有安裝的。
1、安裝端口映射器portmap(可選)
$
sudo apt-get install portmap
2、在終端提示符后鍵入以下命令安裝NFS服務器
$ sudo apt-get install nfs-kernel-server
3、安裝NFS客戶端(可選)
$ sudo apt-get install nfs-common
注意:nfs-
kernel-server和nfs-common都依賴于portmap。另外,在一些文檔中提出還需要使用apt-get來手動安裝NFS的客戶端
nfs-common,以及端口映射器portmap,但其實這是沒有必要的,因為在安裝nfs-kernel-server時,apt會自動把它們安裝
好。
這樣,宿主機就相當于NFS
Server。同樣地,目標系統作為NFS的客戶端,需要安裝NFS客戶端程序。如果是Debian/Ubuntu系統,則需要安裝nfs-common(第3步)。
四、NFS配置
1、配置portmap
方法1:編輯/etc/default/portmap,將"-i 127.0.0.1"去掉;
方法2:$ sudo dpkg-reconfigure portmap,出現“正在設定portmap”軟件包設置界面,對Should
portmap be bound to the loopback address?選擇“否(No)”。
2、配置/etc/hosts.deny
禁止任何host(主機)能和你的NFS服務器進行NFS連接。在該文件中加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
3、配置/etc/hosts.allow
允許那些你想要的主機和你的NFS服務器建立連接。
下列步驟將允許任何IP地址以192.168.1開頭的主機連接到NFS服務器上,具體要看你目標板的端口地址,也可以指定特定的IP地址。在該文件中加入:
### NFS DAEMONS
portmap: 192.168.1.
lockd:
192.168.1.
rquotad:
192.168.1.
mountd:
192.168.1.
statd: 192.168.1.
通過/etc/hosts.deny和/etc/hosts.allow設置對portmap的訪問,采用這兩個配
置文件有點類似"mask"的意思。先在/etc/hosts.deny中禁止所有用戶對portmap的訪問,再在/etc/hosts.allow中
允許某些用戶對portmap的訪問。
然后重啟portmap daemon:
$
sudo /etc/init.d/portmap restart
4、配置/etc/exports
(1)共享的NFS目錄在/etc/exports中列出,這個文件控制對目錄的共享(NFS掛載目錄及權限由該文件定義),書寫規則是每個共享為一行)。
格式:[共享目錄] [主機名或IP](參數,參數...)
第一個參數是要讓客戶機訪問的目錄,第二個是你允許的主機IP,最后的()內是訪問控制方式。
注意:客戶端可以使用主機名或者IP地址指定,在主機名中可以使用通配符(*),IP地址后也可以跟掩碼段(/24),但出于安全原因這種情況應該盡量避免。客戶端的說明后可在圓括號中加入一系列參數。很重要的一點,不要在最后一個客戶端聲明的后面留下任何空白或者沒關閉括號,因為空白都被解釋成客戶端的分隔符。
例如我要將/opt/FriendlyARM/mini2440/root_nfs目錄讓用戶的IP共享,則在該文件末尾添加下列語句:
/opt/FriendlyARM/mini2440/root_nfs
*(rw,sync,no_root_squash)
其中:
/opt/FriendlyARM/mini2440/root_nfs
表示NFS共享目錄,它可以作為開發板的根文件系統通過NFS掛接;
* 表示所有的客戶機都可以掛接此目錄;
rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力;
sync 表示所有數據在請求時寫入共享,即數據同步寫入內存和硬盤;
no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root身份。
注意:可以用主機名來代替*,盡量指定主機名以便使那些不想其訪問的系統不能訪問NFS掛載的資源。另外,最好加上sync,
否則$ sudo exportfs -r時會給出警告,sync是NFS的默認選項。
(2)下面是一些NFS共享的常用參數:
ro
只讀訪問
rw 讀寫訪問
sync 所有數據在請求時寫入共享
async NFS在寫入數據前可以相應請求
secure NFS通過1024以下的安全TCP/IP端口發送
insecure NFS通過1024以上的端口發送
wdelay 如果多個用戶要寫入NFS目錄,則歸組寫入(默認)
no_wdelay 如果多個用戶要寫入NFS目錄,則立即寫入,當使用async時,無需此設置
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)
no_subtree_check 和上面相對,不檢查父目錄權限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squash root用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的GID
(3)查看NFS Server的export
list:
$ sudo showmount -e
若更改了/etc/exports,運行以下命令進行更新:
$ sudo exportfs -r
然后重啟NFS服務:
$ sudo /etc/init.d/nfs-kernel-server restart
五、啟動和停止NFS服務
1、啟動NFS的方法和啟動其他服務器的方法類似,首先需要啟動portmap和NFS這兩個服務,并且portmap服務一定要先于NFS服務啟動。
$ sudo /etc/init.d/portmap start
$ sudo
/etc/init.d/nfs-kernel-server start
2、停止NFS服務
在停止NFS服務的時候,需要先停止NFS服務再停止portmap服務,如果系統中還有其他服務需要使用portmap服務,則可以不停止portmap服務。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop
3、重新啟動portmap和NFS服務
$ sudo /etc/init.d/portmap restart
$
sudo /etc/init.d/nfs-kernel-server restart
4、檢查portmap和NFS服務狀態
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status
5、設置自動啟動NFS服務
(1)檢查NFS的運行級別:
$ sudo chkconfig --list portmap
$ sudo chkconfig --list nfs-kernel-server
(2)在實際使用中,如果每次開啟計算機之后都手工啟動NFS服務是非常麻煩的,此時可以設置系統在指定的運行級別自動啟動portmap和NFS服務。
$ sudo chkconfig --level 235 portmap on
$ sudo chkconfig --level 235 nfs-kernel-server on
六、NFS客戶端配置(NFS測試)
1、在NFS服務器啟動后,還需要檢查Linux服務器的防火墻設置(一般需要關閉防火墻服務),確保沒有屏蔽
NFS使用的端口和允許通信的主機,主要是檢查Linux服務器iptables、ipchains等選項的設置,以及/etc/hosts.deny,
/etc/hosts.allow文件。通常都是在內部局域網中進行開發,再安裝系統時最好不要安裝防火墻等網絡安全軟件,以方便使用時的配置。
如果你有防火墻,請確保32771、111和2049端口保持開放。
2、手動掛載
使用mount命令來掛載其他機器共享的NFS目錄。
格式:$ sudo mount [Server IP]:/[share dir] [local
mount point]
例如:
$ sudo mount -t nfs [-o nolock]
localhost:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs 或
$ sudo mount -t nfs -o nolock
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
其中,localhost可以是具體的IP地址,同時掛載點/mnt/root_nfs目錄必須已經存在,而且在/mnt/root_nfs目錄中沒有文件或子目錄。
3、自動掛載
(1)另一個掛載其他機器的NFS共享的方式就是在/etc/fstab文件中添加一行,該行必須指明NFS服務器的主機名、服務器輸出的目錄名以及掛載NFS共享的本機目錄,同時必須是根用戶才能修改/etc/fstab文件。
格式:server.mydomain.com:/usr/local/pub /pub nfs
rsize=8192,wsize=8192,timeo=14,intr
注意:可以根據實際情況修改NFS服務器共享文件夾"servername.mydomain.com:/usr/local/pub"和在本機的掛載點"/pub",同時掛載點/pub在客戶端機器上必須存在。
(2)NFS常見掛載參數:
timeo 如果超時,客戶端等待的時間,以十分之一秒計算
retrans 超時嘗試的次數
bg 后臺掛載(很有用)
hard 如果server端沒有響應,那么客戶端一直嘗試掛載
rsize 讀塊大小
wsize 寫塊大小
4、使用autofs來掛載NFS
(1)掛載NFS共享的第三種方法是使用autofs,它使用automount守護進程來管理掛載點,只在文件系統被訪問時才動態地掛載。
autofs訪問主映射配置文件/etc/auto.master來決定要定義哪些掛載點,然后使用適用于各個掛載
點的參數來啟動automount守護進程。主映射配置中的每一行都定義一個掛載點,一個分開的映射文件定義在該掛載點下要掛載的文件系統。如/etc
/auto.misc文件可能會定義/misc目錄中的掛載點,這種關系在/etc/auto.master文件中會被定義。
(2)/etc/auto.master文件中的每個項目都有3個字段,第1個字段是掛載點;第2個字段是映射文件的位置;第3個字段可選,可以包括超時數值之類的信息。
例如:要在機器上的/misc/myproject掛載點上掛載遠程機penguin.example.net中的/project52目錄。
在/etc/auto.master文件中添加以下行:
/misc /etc/auto.misc --timeout 60
在/etc/auto.misc文件中添加以下行:
myproject -rw,soft,intr,rsize=8192,wsize=8192
penguin.example.net:/proj52
/etc/auto.misc中的第1個字段是/misc子目錄的名稱,該目錄被automount動態地創建,它不應該在客戶端機器上實際存在;第2個字段包括掛載選項,如rw代表讀寫訪問權,第3個字段是要導出的NFS的位置,包括主機名和目錄。
(3)autofs是一種服務,要啟動這項服務,在shell提示下鍵入以下命令:
$ sudo /sbin/service autofs restart
要查看活躍的掛載點,在shell提示下鍵入以下命令:
$ sudo /sbin/service autofs status
如果在autofs運行時修改了/etc/auto.master配置文件,則必須在shell提示下鍵入以下命令來通知automount守護進程重新載入配置文件:
$ sudo /sbin/service autofs reload
5、可以運行df命令查看是否掛載成功:
$ sudo df
取消掛載的命令如下:
$ sudo umount /mnt/root_nfs
七、目標板NFS配置操作
主機IP:192.168.1.101
目標板IP:192.168.1.230
將USB轉串口連接上,在終端輸入minicom與板子連起,作為“超級終端”使用。
啟動目標板并連通網絡后,首先查看目標板kernel自身是否支持NFS,在minicom中輸入cat
/proc/filesystems命令查看其中是否有NFS一行,若沒有則表示內核不支持NFS,就需要重新編譯和燒寫內核;有則OK,接下來就可以直接進行mount操作了。
具體命令是:
# mount -t
nfs -o nolock
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
無任何提示表示成功,這時可以進入/mnt/root_nfs目錄,對文件進行cp、mv等操作。
但是如果使用命令mount -t nfs
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs,則會有如下的錯誤提示(也就是省去了"-o
nolock"):
# mount -t
nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
portmap: server localhost
not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error=-5
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
這時如果使用ls
/mnt/root_nfs命令查看該目錄內容時,你會發現此時NFS確確實實已經掛載成功了。
然后取消掛載的時候會出現如下的錯誤提示:
#
umount /mnt/root_nfs/
lockd_down: no lockd running.
而成功取消掛載時沒有任何提示,同樣此時NFS也確實已經取消掛載了。
那么出現上面錯誤提示的可能原因是:
nfs
mount默認選項包括文件鎖,依賴于portmap提供的動態端口分配功能。
簡單的解決方法:kill文件鎖(lockd)或者使用mount -o
nolock命令。
上面說的文件鎖具體是什么原因,目前還沒有找到更好的解決辦法。不過,如果主機防火墻有設置時,也可能導致目標板無法正常訪問。
想要使用命令端口,只要進入MINICOM(主意用筆記本的話,你的端口不能用TTY0而是TTYUSB0)進入,ENTER
后就可以輸入命令了。然后直接,掛載。可以用。但是你的ETH0肯定會和你的無限沖突。自己覺得改了恐怕不行。因為他會不是別你的網卡,導致NFS不能連接
PC環境是ubuntu9。04,開發板為友善之臂的MINI2440
主機IP:192.168.50.72 網關:192.168.50.1 子網掩碼:255.255.255.0
開發板IP:192.168.50.168
為了能和主機建立起連接我必須得把開發板IP改成和主機一個網段的 .
這里首先要說明的是ubuntu的靜態IP設置問題:
默認安裝完成后,右上角的網絡配置上 wired ..和eth0為灰色。不能點選 。
然后禁用networdmanager啟動network以太網設置靜態IP的時候,不管怎么設置,子網掩碼都和網關一樣,
比如說:地址:192.168.0.22
子網掩碼: 192.168.0.1 //不管怎么輸入255.255.255.0 ,都不行!
網關: 192.168.0.1 //這里改了255.255.255.0的話,上面就也成255.255.255.0了。(auto ethernet是可以聯上網的)。所以就上GG找答案,找解決方法。
進入FC10,執行終端命令(也可以用VI修改)
$ su -c ‘gedit /etc/sysconfig/networking/devices/ifcfg-eth0′
直接修改文件中的子網掩碼信息就可以
代碼為:
# Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express
DEVICE=eth0
HWADDR=00:16:e6:db:c2:96
ONBOOT=yes
BOOTPROTO=static //這個應該是“static”,而不是“dhcp”或“none”;
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
NM_CONTROLLED=yes//這個應該是“yes”,如不修改,鏈接仍是disconnected;
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.50.72
GATEWAY=192.168.50.1
然后重新激活下網卡就可以了.
#service network restart
設置完成后,右上角的網絡配置上System eth0與auto ethernet就可以點選了.
需要說明的是因為我之前沒有設置靜態IP之前通過 NFS 啟動系統啟動不了.
連接主機和開發板
我選擇了串口線和網線連接起了主機和開發板
連接好電源,串口線,網線,打開串口終端
配置minicom(在FC10終端輸入命令minicom -s)
進入到minicom配置界面后選擇 :Serial port setup
然后按照下面的設置下就OK了
A – Serial Device : :/dev/ttyS0
B – Lockfile Location : /var/lock
C – Callin Program :
D – Callout Program :
E – Bps/Par/Bits : 115200 8N1
F – Hardware Flow Control : No
G – Software Flow Control : No
建立和配置 NFS 服務
(1)設置共享目錄
運行命令
#gedit /etc/exports
編輯 nfs 服務的配置文件(注意:第一次打開時該文件是空的),添加以下內容:
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中:
/opt/FriendlyARM/mini2440/root_qtopia 表示 nfs 共享目錄,它可以作為開發板的根文件系統通過 nfs 掛接;
* 表示所有的客戶機都可以掛接此目錄
rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力
no_root_squash 表示允許掛接此目錄的客戶機享有該主機的 root 身份
(2)通過命令啟動和停止 nfs 服務
在命令行下運行:
#/etc/init.d/nfs
這將啟動 nfs 服務,可以輸入以下命令檢驗 nfs 該服務是否啟動。
# mount -t nfs 192.168.50.72: /opt/FriendlyARM/mini2440/root_qtopia
如 果 沒 有 出 現 錯 誤 信 息 , 您 將 可 以 瀏 覽 到 /mnt 目 錄 中 的 內 容和
/opt/FriendlyARM/mini2440/root_qtopia 是一致的。
使用這個命令可以停止 nfs 服務:
#/etc/init.d/nfs stop
檢查nfs服務器是否開啟:
重啟對應的2個服務:
#service nfs restart
檢查防火墻看是否屏蔽了nfs端口
#service iptables stop
#service iptables status
通過 NFS 啟動系統
當 NFS 服務設置好并啟動后,我們就可以把 NFS 作為根文件系統來啟動開發板了。通過使用 NFS 作為根文件系統,開發板的“硬盤”就可以變得很大,因為您使用的是主機的硬盤,這是使用 linux 作為開發經常使用的方法,
設置目標板啟動模式為 Nand Flash 啟動,連接好電源,串口線,網線;打開串口終端,在開機或者復位的時候迅速按下 PC 機的空格鍵,這樣我們就進入了 vivi 模式,輸入以下命令:
Supervivi> param set linux_cmd_line “console=ttySAC0 root=/dev/nfs
nfsroot=192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.50.168:192.168.50.72:192.168.50.1:255.255.255.0:mini2440:eth0:off”
(1,如果通過minicom監控串口,如出現亂碼,可將波特率調高點,我調的是
115200
換行,其實也可以設置一下:同時按下CTRL+A
注意:要是你用的是usb轉串口console=ttyUSB0。還有就是你要把你想掛載的文件系統放在共享的文件里面(root_qtopia)
其中 ,param set linux_cmd_line 是設置啟動 linux 時的命令參數。其各參數的含義如下:
nfsroot 后面是自己開發主機的 IP 地址。
“ip=”后面:
第一項(192.168.50.168)是目標板的臨時 IP(注意不要和局域網內其他 IP 沖突);
第二項(192.168.50.72)是開發主機的 IP;
第三項(192.168.50.1)是目標板上網關(GW)的設置;
第四項(255.255.255.0)是子網掩碼;
第五項是開發主機的名字(一般無關緊要,可隨便填寫)
eth0 是網卡設備的名稱
然后輸入 boot,按回車就可以通過 nfs 啟動系統了。
在開發板上掛載NFS網絡文件系統(Linux 中最常用的方法就是采用 NFS 來執行各種程序,這樣可以不必花費很多時間下載程序,雖然在此下載 hello 程序用不了多久,一旦您的應用程序變得越來越大,您就會發現使用 NFS 運行的方便所在。)
通過NFS啟動系統后,在開發板終端輸入
[root@FriendlyARM /]# mount -t nfs -o nolock 192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia
這里我剛開始遇到了一個問題,以為為什么開發板不能mount,因為提示如下錯誤信
息:
192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia on /mnt/ failed: No
such file or directory
于是我就ls看了一下,發現沒有mnt文件夾,所以就自己創建了一個.再次mount就沒有問題了.
[root@FriendlyARM /]# ls
bin
dev
[root@FriendlyARM /]# mkdir mnt
[root@FriendlyARM /]# ls
bin
dev
etc
[root@FriendlyARM /]# mount -t nfs -o nolock 192.168.50.72:/opt/FriendlyARM/mini
2440/root_qtopia
[root@FriendlyARM /]# cd /mnt/
[root@FriendlyARM /mnt]# ls
bin
dev
etc
mount成功后你進入到/mnt目錄下就可以看到你主機root_nfs目錄下的內容了.
至此我成功在ARM開發板上掛載NFS網絡文件系統.
from:
http://www.cembed.com/bbsxp/ShowPost.asp?ThreadID=6579
下邊是我轉載的完美的實現ubuntu的nfs方法步驟:
網絡文件系統(NFS)
一、NFS簡介
1、NFS就是Network File
System的縮寫,它的最大功能就是可以通過網絡讓不同的機器,不同的操作系統彼此共享文件(share
files)——可以通過NFS掛載遠程主機的目錄,訪問該目錄就像訪問本地目錄一樣,所以也可以簡單的將它看作一個文件服務器(File
Server)。
注意:一般而言,使用NFS服務能夠方便地使各unix-like系統之間實現共享,但如果需要在unix-like和windows系統之間共享,那就得使用samba了。
2、NFS是通過網絡進行數據傳輸,那么NFS使用哪些端口呢,答案是……不知道,因為NFS傳輸數據時使用的端口是隨機的,唯一的限制就是小于1024,客戶端怎么知道服務器使用的是哪個端口,此時就要用到遠程過程調用RPC。
其實,NFS運行在SUN的RPC(Remote Procedure
Call,遠程過程調用)基礎上,RPC定義了一種與系統無關的方法來實現進程間通信,由此,NFS Server也可以看作是RPC
Server。正
因為NFS是一個RPC服務程序,所以在使用它之前,先要映射好端口——通過portmap設定。比如:某個NFS
Client發起NFS服務請求時,它需要先得到一個端口(port),所以它先通過portmap得到port
number(不僅是NFS,所有的RPC服務程序啟動之前,都需要先設定好portmap)。
注意:在啟動RPC服務(比如NFS)之前,需要先啟動portmap服務。
3、NFS允許系統將其目錄和文件共享給網絡上的其他系統。通過NFS,用戶和應用程序可以訪問遠程系統上的文件,就像它們是本地文件一樣。那么NFS最值得注意的優點有:
(1)本地工作站可以使用更少的磁盤空間,因為常用數據可以被保存在一臺機器上,并讓網絡上的其他機器可以訪問它。
(2)不需要為用戶在每臺網絡機器上放一個用戶目錄,因為用戶目錄可以在NFS服務器上設置并使其在整個網絡上可用。
(3)存儲設備如軟盤、光驅及USB設備可以被網絡上其它機器使用,這可能可以減少網絡上移動設備的數量。
二、與NFS相關的幾個文件和命令
1、/etc/exports
對NFS服務的訪問是由exports來批準,它枚舉了若干有權訪問NFS服務器上文件系統的主機名。
2、/sbin/exportfs
維護NFS的資源共享,可以通過它重新設定/etc/exports的共享目錄,卸載NFS
Server共享的目錄或者重新共享等。
3、/usr/sbin/showmount
上面的文件主要用在NFS
Server端,而showmount則主要用在Client端,showmount可以用來查看NFS共享的目錄資源。
4、/var/lib/nfs/xtab
NFS的記錄文檔:通過它可以查看有哪些Client連接到NFS主機的記錄。
下面這幾個并不直接負責NFS,實際上它們是負責所有的RPC。
5、/etc/default/portmap
實際上,portmap負責映射所有的RPC服務端口,它的內容非常非常之簡單。
6、/etc/hosts.deny
設定拒絕portmap服務的主機,即禁止訪問的客戶端IP列表。
7、/etc/hosts.allow
設定允許portmap服務的主機,即允許訪問的客戶端IP列表。
三、NFS安裝
在主機上安裝NFS服務軟件,因為Debian/Ubuntu上默認是沒有安裝的。
1、安裝端口映射器portmap(可選)
$
sudo apt-get install portmap
2、在終端提示符后鍵入以下命令安裝NFS服務器
$ sudo apt-get install nfs-kernel-server
3、安裝NFS客戶端(可選)
$ sudo apt-get install nfs-common
注意:nfs-
kernel-server和nfs-common都依賴于portmap。另外,在一些文檔中提出還需要使用apt-get來手動安裝NFS的客戶端
nfs-common,以及端口映射器portmap,但其實這是沒有必要的,因為在安裝nfs-kernel-server時,apt會自動把它們安裝
好。
這樣,宿主機就相當于NFS
Server。同樣地,目標系統作為NFS的客戶端,需要安裝NFS客戶端程序。如果是Debian/Ubuntu系統,則需要安裝nfs-common(第3步)。
四、NFS配置
1、配置portmap
方法1:編輯/etc/default/portmap,將"-i 127.0.0.1"去掉;
方法2:$ sudo dpkg-reconfigure portmap,出現“正在設定portmap”軟件包設置界面,對Should
portmap be bound to the loopback address?選擇“否(No)”。
2、配置/etc/hosts.deny
禁止任何host(主機)能和你的NFS服務器進行NFS連接。在該文件中加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
3、配置/etc/hosts.allow
允許那些你想要的主機和你的NFS服務器建立連接。
下列步驟將允許任何IP地址以192.168.1開頭的主機連接到NFS服務器上,具體要看你目標板的端口地址,也可以指定特定的IP地址。在該文件中加入:
### NFS DAEMONS
portmap: 192.168.1.
lockd:
192.168.1.
rquotad:
192.168.1.
mountd:
192.168.1.
statd: 192.168.1.
通過/etc/hosts.deny和/etc/hosts.allow設置對portmap的訪問,采用這兩個配
置文件有點類似"mask"的意思。先在/etc/hosts.deny中禁止所有用戶對portmap的訪問,再在/etc/hosts.allow中
允許某些用戶對portmap的訪問。
然后重啟portmap daemon:
$
sudo /etc/init.d/portmap restart
4、配置/etc/exports
(1)共享的NFS目錄在/etc/exports中列出,這個文件控制對目錄的共享(NFS掛載目錄及權限由該文件定義),書寫規則是每個共享為一行)。
格式:[共享目錄] [主機名或IP](參數,參數...)
第一個參數是要讓客戶機訪問的目錄,第二個是你允許的主機IP,最后的()內是訪問控制方式。
注意:客戶端可以使用主機名或者IP地址指定,在主機名中可以使用通配符(*),IP地址后也可以跟掩碼段(/24),但出于安全原因這種情況應該盡量避免。客戶端的說明后可在圓括號中加入一系列參數。很重要的一點,不要在最后一個客戶端聲明的后面留下任何空白或者沒關閉括號,因為空白都被解釋成客戶端的分隔符。
例如我要將/opt/FriendlyARM/mini2440/root_nfs目錄讓用戶的IP共享,則在該文件末尾添加下列語句:
/opt/FriendlyARM/mini2440/root_nfs
*(rw,sync,no_root_squash)
其中:
/opt/FriendlyARM/mini2440/root_nfs
表示NFS共享目錄,它可以作為開發板的根文件系統通過NFS掛接;
* 表示所有的客戶機都可以掛接此目錄;
rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力;
sync 表示所有數據在請求時寫入共享,即數據同步寫入內存和硬盤;
no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root身份。
注意:可以用主機名來代替*,盡量指定主機名以便使那些不想其訪問的系統不能訪問NFS掛載的資源。另外,最好加上sync,
否則$ sudo exportfs -r時會給出警告,sync是NFS的默認選項。
(2)下面是一些NFS共享的常用參數:
ro
只讀訪問
rw 讀寫訪問
sync 所有數據在請求時寫入共享
async NFS在寫入數據前可以相應請求
secure NFS通過1024以下的安全TCP/IP端口發送
insecure NFS通過1024以上的端口發送
wdelay 如果多個用戶要寫入NFS目錄,則歸組寫入(默認)
no_wdelay 如果多個用戶要寫入NFS目錄,則立即寫入,當使用async時,無需此設置
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)
no_subtree_check 和上面相對,不檢查父目錄權限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squash root用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的GID
(3)查看NFS Server的export
list:
$ sudo showmount -e
若更改了/etc/exports,運行以下命令進行更新:
$ sudo exportfs -r
然后重啟NFS服務:
$ sudo /etc/init.d/nfs-kernel-server restart
五、啟動和停止NFS服務
1、啟動NFS的方法和啟動其他服務器的方法類似,首先需要啟動portmap和NFS這兩個服務,并且portmap服務一定要先于NFS服務啟動。
$ sudo /etc/init.d/portmap start
$ sudo
/etc/init.d/nfs-kernel-server start
2、停止NFS服務
在停止NFS服務的時候,需要先停止NFS服務再停止portmap服務,如果系統中還有其他服務需要使用portmap服務,則可以不停止portmap服務。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop
3、重新啟動portmap和NFS服務
$ sudo /etc/init.d/portmap restart
$
sudo /etc/init.d/nfs-kernel-server restart
4、檢查portmap和NFS服務狀態
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status
5、設置自動啟動NFS服務
(1)檢查NFS的運行級別:
$ sudo chkconfig --list portmap
$ sudo chkconfig --list nfs-kernel-server
(2)在實際使用中,如果每次開啟計算機之后都手工啟動NFS服務是非常麻煩的,此時可以設置系統在指定的運行級別自動啟動portmap和NFS服務。
$ sudo chkconfig --level 235 portmap on
$ sudo chkconfig --level 235 nfs-kernel-server on
六、NFS客戶端配置(NFS測試)
1、在NFS服務器啟動后,還需要檢查Linux服務器的防火墻設置(一般需要關閉防火墻服務),確保沒有屏蔽
NFS使用的端口和允許通信的主機,主要是檢查Linux服務器iptables、ipchains等選項的設置,以及/etc/hosts.deny,
/etc/hosts.allow文件。通常都是在內部局域網中進行開發,再安裝系統時最好不要安裝防火墻等網絡安全軟件,以方便使用時的配置。
如果你有防火墻,請確保32771、111和2049端口保持開放。
2、手動掛載
使用mount命令來掛載其他機器共享的NFS目錄。
格式:$ sudo mount [Server IP]:/[share dir] [local
mount point]
例如:
$ sudo mount -t nfs [-o nolock]
localhost:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs 或
$ sudo mount -t nfs -o nolock
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
其中,localhost可以是具體的IP地址,同時掛載點/mnt/root_nfs目錄必須已經存在,而且在/mnt/root_nfs目錄中沒有文件或子目錄。
3、自動掛載
(1)另一個掛載其他機器的NFS共享的方式就是在/etc/fstab文件中添加一行,該行必須指明NFS服務器的主機名、服務器輸出的目錄名以及掛載NFS共享的本機目錄,同時必須是根用戶才能修改/etc/fstab文件。
格式:server.mydomain.com:/usr/local/pub /pub nfs
rsize=8192,wsize=8192,timeo=14,intr
注意:可以根據實際情況修改NFS服務器共享文件夾"servername.mydomain.com:/usr/local/pub"和在本機的掛載點"/pub",同時掛載點/pub在客戶端機器上必須存在。
(2)NFS常見掛載參數:
timeo 如果超時,客戶端等待的時間,以十分之一秒計算
retrans 超時嘗試的次數
bg 后臺掛載(很有用)
hard 如果server端沒有響應,那么客戶端一直嘗試掛載
rsize 讀塊大小
wsize 寫塊大小
4、使用autofs來掛載NFS
(1)掛載NFS共享的第三種方法是使用autofs,它使用automount守護進程來管理掛載點,只在文件系統被訪問時才動態地掛載。
autofs訪問主映射配置文件/etc/auto.master來決定要定義哪些掛載點,然后使用適用于各個掛載
點的參數來啟動automount守護進程。主映射配置中的每一行都定義一個掛載點,一個分開的映射文件定義在該掛載點下要掛載的文件系統。如/etc
/auto.misc文件可能會定義/misc目錄中的掛載點,這種關系在/etc/auto.master文件中會被定義。
(2)/etc/auto.master文件中的每個項目都有3個字段,第1個字段是掛載點;第2個字段是映射文件的位置;第3個字段可選,可以包括超時數值之類的信息。
例如:要在機器上的/misc/myproject掛載點上掛載遠程機penguin.example.net中的/project52目錄。
在/etc/auto.master文件中添加以下行:
/misc /etc/auto.misc --timeout 60
在/etc/auto.misc文件中添加以下行:
myproject -rw,soft,intr,rsize=8192,wsize=8192
penguin.example.net:/proj52
/etc/auto.misc中的第1個字段是/misc子目錄的名稱,該目錄被automount動態地創建,它不應該在客戶端機器上實際存在;第2個字段包括掛載選項,如rw代表讀寫訪問權,第3個字段是要導出的NFS的位置,包括主機名和目錄。
(3)autofs是一種服務,要啟動這項服務,在shell提示下鍵入以下命令:
$ sudo /sbin/service autofs restart
要查看活躍的掛載點,在shell提示下鍵入以下命令:
$ sudo /sbin/service autofs status
如果在autofs運行時修改了/etc/auto.master配置文件,則必須在shell提示下鍵入以下命令來通知automount守護進程重新載入配置文件:
$ sudo /sbin/service autofs reload
5、可以運行df命令查看是否掛載成功:
$ sudo df
取消掛載的命令如下:
$ sudo umount /mnt/root_nfs
七、目標板NFS配置操作
主機IP:192.168.1.101
目標板IP:192.168.1.230
將USB轉串口連接上,在終端輸入minicom與板子連起,作為“超級終端”使用。
啟動目標板并連通網絡后,首先查看目標板kernel自身是否支持NFS,在minicom中輸入cat
/proc/filesystems命令查看其中是否有NFS一行,若沒有則表示內核不支持NFS,就需要重新編譯和燒寫內核;有則OK,接下來就可以直接進行mount操作了。
具體命令是:
# mount -t
nfs -o nolock
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
無任何提示表示成功,這時可以進入/mnt/root_nfs目錄,對文件進行cp、mv等操作。
但是如果使用命令mount -t nfs
192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs,則會有如下的錯誤提示(也就是省去了"-o
nolock"):
# mount -t
nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs
/mnt/root_nfs
portmap: server localhost
not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error=-5
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
這時如果使用ls
/mnt/root_nfs命令查看該目錄內容時,你會發現此時NFS確確實實已經掛載成功了。
然后取消掛載的時候會出現如下的錯誤提示:
#
umount /mnt/root_nfs/
lockd_down: no lockd running.
而成功取消掛載時沒有任何提示,同樣此時NFS也確實已經取消掛載了。
那么出現上面錯誤提示的可能原因是:
nfs
mount默認選項包括文件鎖,依賴于portmap提供的動態端口分配功能。
簡單的解決方法:kill文件鎖(lockd)或者使用mount -o
nolock命令。
上面說的文件鎖具體是什么原因,目前還沒有找到更好的解決辦法。不過,如果主機防火墻有設置時,也可能導致目標板無法正常訪問。
想要使用命令端口,只要進入MINICOM(主意用筆記本的話,你的端口不能用TTY0而是TTYUSB0)進入,ENTER
后就可以輸入命令了。然后直接,掛載。可以用。但是你的ETH0肯定會和你的無限沖突。自己覺得改了恐怕不行。因為他會不是別你的網卡,導致NFS不能連接
評論