轉:iTOP-4412實現NFS網路檔案系統
[學習嵌入式開發板]iTOP-4412實現NFS網路檔案系統
<div class="extra ui horizontal list meta-wrap"> <div class="item"> <a href="https://my.oschina.net/u/2371345" class="__user"><span>歌之王子殿下</span></a> 釋出於 2016/03/18 16:47</div> <div class="item">閱讀 1K+</div> <div class="item collect-btn " data-id="2158782" data-user-id="2371345" data-obj-type="2" data-max="99" data-tag-required="" data-current-user-id="" data-recommend-tags="紅旗嵌入式Linux,NFS">收藏 <span data-collect-count="" data-id="2158782" data-obj-type="2">0</span></div> <div class="item comment-count"><a href="#comments" class="normal"><i class="comment outline icon"></i> 評論 <span data-article-reply-count="">0</span></a></div> </div> <div class="tags"> <a class="ui horizontal label" href="https://www.oschina.net/question/tag/redflag-embed-linux" target="_blank"><img src="https://static.oschina.net/img/logo/redflag.gif">紅旗嵌入式Linux</a> <a class="ui horizontal label" href="https://www.oschina.net/question/tag/nfs" target="_blank">NFS</a> </div> <div class="content" id="articleContent"> <div class="ad-wrap"> <a data-traceid="question_detail_above_text_l<a data-traceid=" question_detail_above_text_link_1"="" data-tracepid="question_detail_above_text_link" style="color:#A00;font-weight:bold; " href="https://time.geekbang.org/column/intro/132?utm_term=zeusWR5JE&utm_source=website&utm_medium=oschina&utm_campaign=132-presell&utm_content=oschina4" target="_blank"><strong style="font-size: 16px">程式設計師捅了馬蜂窩怎麼辦?開原始碼的版權怎麼看?勞動合同,你真的看懂了嗎?
本文轉自迅為:http://www.topeetboard.com
學習平臺:iTOP-4412開發板
本文講解如何在 iTOP-4412 開發板上實現 NFS 網路檔案系統。
我們使用的軟硬體環境是:一臺 PC,上面執行虛擬機器 Ubuntu,iTOP-4412 開發板一塊,PC 機和iTOP-4412 開發板通過網線連線到路由器上面,路由器分配的網段是 192.168.1.x
NFS 是 Network FileSystem 的縮寫,是由 SUN 公司研製的 UNIX 表示層協議(pressentation layerprotocol) ,NFS 是基於 UDP/IP 協議的應用。它的最大功能就是可以通過網路讓不同的機器,不通的作業系統彼此共享檔案,可以通過 NFS 掛載遠端主機的目錄,訪問該目錄就像訪問本地目錄一樣,所以也可以簡單的將它看做一個檔案伺服器。通過 NFS 服務,我們可以實現線上除錯檔案系統或應用程式,而不用像傳統的方式生成檔案系統映象,然後燒寫到 iTOP-4412 的 eMMC 裡,在啟動開發板。通過 NFS 服務可以提高我們的除錯效率。
實現 NFS,我們需要一個主機作為 NFS 伺服器,我們選擇我們的虛擬機器 Ubuntu 作為主機。首先我們需要在虛擬機器的 Ubuntu 上安裝 Ubuntu NFS 服務,這是一個軟體包,我們可以使用 apt 命令下載, (下載前請確認你的虛擬機器可以上網) 。首先登入到虛擬機器上,使用快捷鍵 Ctrl+Alt+t 組合按鍵開啟終端如下圖:
輸入 su root 命令切換到 root 使用者,如下圖:
輸入 apt-get install nfs-kernel-server 命令安裝 Ubuntu NFS 服務,如下圖:
在安裝的過程中會提示“是否繼續安裝”的資訊,如下圖:
我們輸入“Y” ,如下圖:
然後按回車,會繼續安裝,如下圖:
安裝完成,如下圖:
接下來需要配置/etc/exports,使用 vi 命令開啟/etc/export,如下圖:
在/etc/export 檔案的最後一行新增:
/home/topeet/linux/ *(rw,sync,no_root_squash),如下圖:
下面講解一下上面輸入的內容都代表什麼意思:
/home/topeet/linux:是要共享的目錄;
*:代表允許所有的網路段訪問;
rw:是可讀寫許可權;
sync:是資料同步寫入記憶體和硬碟;
no_root_squash:是 Ubuntu nfs 客戶端分享目錄使用者的許可權,如果客戶端使用的是 root 使用者,那麼對於
該共享目錄而言,該客戶端就具有 root 許可權;
其他 Ubuntu nfs 常用的引數有:
ro:只讀訪問
async :nfs 在寫入資料前可以相應請求
secure: nfs 通過以下的安全 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
接下來重啟 portmap 服務,輸入/etc/init.d/portmap restart 命令,如下圖:
執行結果如下圖:
然後重啟 nfs 服務,輸入/etc/init.d/nfs-kernel-server restart 命令,如下圖:
執行結果如下圖:
現在 Ubuntu nfs 伺服器端的配置就完成了,下面我們可以在虛擬機器 Ubuntu 本機上驗證一下,例如我們把
/home/topeet/linux/app/system 掛載到/mnt 目錄下,需要輸入 mount -t nfs
localhost:/home/topeet/linux/app/system /mnt 命令,如下圖:
執行完上面的命令,可以使用 df 命令檢視是否掛載成功,如下圖:
我們可以看到上圖中高亮的那一行就是我們掛載的 nfs 檔案系統,這說明我們的 Ubuntu nfs 伺服器端搭建成
功了。
本章節我們用前面章節制作的做小 linux 系統為例,通過 nfs 來掛載它。我們把 linux 最小檔案系統放到虛擬
機 Ubuntu 的/home/topeet/linux/app 目錄下,如下圖:
實現 nfs 檔案系統我們需要修改 linux 最小檔案系統的 etc/init.d/ifconfig-eth0 檔案,如下圖:
使用 vi 命令修改第八行,修改為:if grep -q nfs /proc/mounts ; then,修改後如下圖:
修改完成後儲存並退出。
下面我們開始配置 iTOP-4412 開發板的核心。要實現 nfs 功能,需要修改核心配置來支援,開啟核心源
碼,輸入 cp config_for_linux .config 命令生成支援 linux 最小檔案系統的核心配置檔案,如下圖:
然後輸入 make menuconfig 命令進入 linux 配置介面,如下圖:
選中“Networking support” ,如下圖:
然後按回車進入 Networking support 配置介面,如下圖:
選中“Networking options”選項,如上圖所示,然後按回車進入 Networking options 配置介面,如下圖:
在 Networking options 配置介面,選中“IP: kernel level autoconfiguration” ,如下圖:
然後返回到 make menuconfig 的初始介面,如下圖:
然後選擇“File systems”選項,如下圖:
然後輸入回車,進入 File systems 配置介面,如下圖:
選中“Network File Systems”選項,如下圖:
然後輸入回車,進入 Network File Systems 配置介面,如下圖:
選中“ NFS client support” , “ NFS client support for NFS version 3” , “ NFS client support for the NFSv3
ACL protocol extension” , “NFS client support for NFS version 4” , “NFS client support for NFSv4.1” ,
“Root file system on NFS” ,如下圖:
然後返回到 make menuconfig 的初始配置介面,如下圖:
然後在初始配置介面選中“Boot options” ,如下圖:
按回車進入 Boot options 配置介面,然後再 Default kernel command 裡面輸入:
root=/dev/nfs rw nfsroot=192.168.1.103:/home/topeet/linux/app/system
ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off rootfstype=ext4
init=/linuxrc console=ttySAC2,115200",如下圖:
下面講解一下上面輸入命令的命令裡面的幾個引數:
root=/dev/nfs rw nfsroot=192.168.1.103:/home/topeet/linux/app/system 表示掛載的 nfs 伺服器 ip 是
192.168.1.103,掛載的目錄是/home/topeet/linux/app/system, (注意:/home/topeet/linux/是前面我
們搭建 nfs 伺服器設定的) ;
ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off 這裡面,第一個
ip192.168.1.230是我們開發板的ip地址, 第二個ip192.168.1.103是nfd伺服器的ip, 第三個ip192.168.1.1
是開發板的閘道器, 255.255.255.0 是子網掩碼, iTOP 是開發主機的名字 (一般無關緊要, 可以隨便填寫) , eth0
是網絡卡裝置的名稱。
至此,linux 核心的配置就完成了,退出 make menuconfig 配置,會彈出儲存視窗,如下圖:
使用鍵盤的左右方向鍵,選中上圖的”Yes“,然後輸入回車,退出儲存配置,如下圖:
然後輸入 make 命令開始編譯核心,如下圖:
編譯過程如下圖:
編譯完成,如下圖:
至此,linux 核心支援 nfs 製作完成了,大家可以把編譯生成的 zImage 燒寫到 iTOP-4412 開發板上看下執行
結果。我們可以在串列埠上看到核心啟動掛載 nfs 檔案系統的 log,如下圖:
<div class="poll-wrap">
</div>
<div class="additional-remarks">
</div>
<div class="ui basic center aligned segment action">
<div class="ui big buttons">
<a class="ui basic button collect-btn hover" data-id="2158782" data-user-id="2371345" data-obj-type="2" data-max="99" data-tag-required="" data-current-user-id="" data-recommend-tags="紅旗嵌入式Linux,NFS"><i class="star outline icon"></i>收藏 (<span data-collect-count="" data-id="2158782" data-obj-type="2">0</span>)</a>
<div class="ui basic dropdown share button bdsharebuttonbox reset dropdown-share bdshare-button-style0-16" data-tag="share-blog" tabindex="0" data-bd-bind="1540974977824">
<i class="share icon"></i> <span>分享</span>
<div class="menu" tabindex="-1">
<a class="item" data-cmd="tsina"><i class="weibo icon"></i>微博</a>
<a class="item" data-cmd="sqq"><i class="qq icon"></i>QQ</a>
<a class="item" data-cmd="weixin"><i class="weixin icon"></i>微信</a>
</div>
</div>
</div>
<div class="ui basic segment">
<a class="ban" style="cursor: pointer" ban-report="" data-id="2158782" data-obj-type="2" data-url="https://www.oschina.net/question/2371345_2158782">
<i class="flag red icon"></i>舉報</a>
</div>
</div>
</div>