1、通過在主機/虛擬機、開發板上分別佈置服務器、客戶端,使用mount命令直接加載·開發板上的已有·的
文件系統;
2、只在主機/虛擬機上安裝nfs服務器,在開發板的內核支持nfs的前提下,通過修改啓動參數,讓開發板掛載
主機/虛擬機上·的文件系統。
因爲不清楚在開發板上佈置客戶端的步驟(網上這種做法的沒找到提及開發板的操作,多數只說明瞭主機/虛
擬機上的環境搭建),所以我最後是採用了第二種做法。
這裏用ifconfig eth0 192.168.1.68配置宿主機ip,開發板的ip配置爲192.168.1.66,
主機ip可以配置爲192.168.1.67,兩兩可以互ping。(主要是宿主機和板子可以互ping)
ubuntu10.4 開啓NFS/TFTP
涉及文件
portmap hosts.deny hosts.allow
涉及操作(按順序如下)
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-common restart
sudo /etc/init.d/nfs-kernel-server restart
安裝server 和client
Ubuntu 上默認是沒有安裝NFS 服務器的, 首先要安裝NFS 服務程序:
$ sudo apt-get install nfs-kernel-server
( 安裝nfs-kernel-server 時,apt 會自動安裝nfs-common 和 portmap)
這樣, 宿主機就相當於NFS Server。
同樣地, 目標系統作爲NFS 的客戶端, 需要安裝NFS 客戶端程序。如果是Debian/Ubuntu 系統
則需要安裝nfs-common。(這裏我的開發板不止ubuntu系統導致後面我用
mount -t nfs -o nolock 192.168.1.68:/opt/nfs /mnt 一直不能掛載,有誰知道可以和我說下)
$ sudo apt-get install nfs-commmon
nfs-common 和nfs-kernel-server 都依賴於portmap!
這樣就安裝完了,下面進行配置
配置NFS
配置portmap(默認的配置也可以)
方法1: 編輯/etc/default/portmap, 將最後一行註釋掉.
方法2: $ sudo dpkg-reconfigure portmap , 對Should portmap be bound to theloopback address? 選N.
配置/etc/hosts.deny
( 禁止任何host(主機) 能和你的NFS 服務器進行NFS 連接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
配置/etc/hosts.allow
允許那些你想要的主機和你的NFS 服務器建立連接。下列步驟將允許任何IP 地址以192.168.197
開頭的主機( 連接到NFS 服務器上), 也可以指定特定的IP 地址。參看man 頁
hosts_access(5), hosts_options(5)。加入:
### 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 的訪問.
配置/etc/exports
NFS 掛載目錄及權限由/etc/exports 文件定義
比如我要將將我的home 目錄中的/opt/nfs 目錄讓192.168.1.* 的IP 共享,則在該文件末尾添加下列語句:
/opt/nfs *(rw,sync,no_root_squash)
*表示所有ip地址可以訪問此文件夾
至此配置完成, 下面啓動NFS
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-common restart
sudo /etc/init.d/nfs-kernel-server restart
測試NFS
Ubuntu 下
sudo mount localhost:/opt/nfs /mnt
ls /mnt
看是否已經掛載成功(我這裏可以掛載成功)
開發板下
mount -t nfs -o nolock 192.168.1.68:/opt/nfs /mnt;這裏ip爲宿主機,
ls /mnt
看是否已經掛載成功(192.168.1.68 是Ubuntu 的IP 地址)
/mnt是開發板的目錄(我這裏測試不成功,應該是開發板這邊沒有配置好吧)
換另一種方法,直接從ubuntu宿主機里加載文件系統到板子:
測試NFS
在斷電情況下連接ICETEK-OMAPL138-KB-AZ 板:ICETEK-OMAPL138-KBA 板的串
口J13 到開發主機COM1;連接ICETEK-OMAPL138-KBA 板的網口J5 到開發主機網
卡,撥碼開關U15 的狀態撥爲1000。
在開發主機的Windows 系統中啓動超級終端【Davinci】
接通ICETEK-OMAPL138-KB-AZ 板電源
按回車鍵暫停linux 的起動
輸入setenv bootcmd 'nand read.e 0xc0700000 0x200000 0x400000; bootm'
輸入setenv bootargs 'console=ttyS2,115200n8 noinitrd rw ip=192.168.1.3 root=/dev/nfs
nfsroot=192.168.1.103:/opt/nfs,nolock mem=32M@0xc0000000
mem=64M@0xc4000000'
輸入boot
觀察【Davinci】中的輸出的起動信息。
輸入root 登錄
輸入cd / 進入根目錄輸入cd / 進入根目錄
輸入ls 列出根目錄文件, 列出的即爲/opt/nfs 目錄下的
TFTP 安裝配置
1:sudo apt-get install tftp tftpd openbsd-inetd
特別指出很多文章裏用的是netkit-inetd,但是實際下載時發現
這個軟件是下不到的,特改用openbsd-inetd,實驗效果不錯。
2:在根目錄下創建文件夾 tftpboot
cd /
sudo mkdir tftpboot 建立文件夾
sudo chmod 777 tftpboot 更改文件夾權限
3: sudo gedit /etc/inetd.conf 修改成如下樣子
tftp dgram udp wait nobody /usr/sbin/tcpd
/usr/sbin/in.tftpd /tftpboot
4: sudo gedit /etc/xinetd.d/tftp 修改成如下樣子(如果沒有tftp文件就創建它)
service tftp
{
disable =no
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /tftpboot -c
source = 11
cps = 100 2
}
5: sudo gedit /etc/default/tftpd-hpa 修改成如下樣子
RUN_DAEMON="no"
OPTIONS="-s /tftpboot -c -p -U tftpd"
6:sudo /etc/init.d/openbsd-inetd reload
sudo /etc/init.d/xinetd restart
sudo in.tftpd -l /tftpboot
7: 在tftpboot文件夾下新建測試文件 aaa
cd /tftpboot
sudo touch aaa
sudo chmod 777 aaa
9: 開始測試tftp服務
cd /home
tftp 192.168.1.68
get /tftpboot/aaa
如果沒有出現錯誤代碼且在home目錄下出現aaa文件則證明tftp服務建立成功
10.開始測試目標板
ubuntu裏輸入
gedit /tftpboot/test.txt
目標板輸入
tftp -g -r test.txt 192.168.1.68
-l 是local的縮寫,後跟存在於Client的源文件名,或下載Client後重命名的文件名。
-r 是remote的縮寫,後跟Server即PC機tftp服務器根目錄中的源文件名,或上傳Server後重命名後的文件名。
-g 是get的縮寫,下載文件時用,
-p 是put的縮寫,上傳文件時用,
tftp 默認佔用的是69端口。
注意: 1:如果出現permission denied 錯誤 則是操作者權限不夠,
需要提升權限
su root
輸入密碼後就可以正常進行tftp傳輸操作了
2:如果出現Access violation錯誤 則是文件權限沒有解開,
將要操作的文件操作權限全解開就可以了
chmod 777 文件名