1. 程式人生 > >轉:iTOP-4412實現NFS網路檔案系統

轉: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&amp;utm_source=website&amp;utm_medium=oschina&amp;utm_campaign=132-presell&amp;utm_content=oschina4" target="_blank"><strong style="font-size: 16px">程式設計師捅了馬蜂窩怎麼辦?開原始碼的版權怎麼看?勞動合同,你真的看懂了嗎?

  


本文轉自迅為:http://www.topeetboard.com

 

學習平臺:iTOP-4412開發板

 

本文講解如何在 iTOP-4412 開發板上實現 NFS 網路檔案系統。

我們使用的軟硬體環境是:一臺 PC,上面執行虛擬機器 UbuntuiTOP-4412 開發板一塊,PC 機和iTOP-4412 開發板通過網線連線到路由器上面,路由器分配的網段是 192.168.1.x 

的 ip 地址,預設閘道器是路由器的 ip 地址,即 192.168.1.1PC 機的 ip 地址是 192.168.1.103iTOP-4412 開發板的 ip 地址是192.168.1.230,網段的子網掩碼是 255.255.255.0。這幾個 ip 地址在後面配置 iTOP-4412 開發板核心 nfs的時候會用到,大家需要根據自己使用的網路環境來設定這幾個 ip 地址,設定的原則是確保 
PC 的 ip iTOP4412 開發板的 ip 在同一個網段。

 

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.103nfd伺服器的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>