嵌入式Linux開發-根文件系統NFS網絡掛載
1. 前言

根文件系統是Linux內核啟動之后掛載的第一個文件系統,上篇文章里已經介紹過,如何使用busybox來制作根文件系統。這篇文章介紹根文件系統制作成功后,如何讓內核找到文件系統,并完成掛載,進入到系統命令行終端。
根文件系統支持從網絡掛載和本地掛載兩種方式:
(1)如果是采用網絡掛載就將路徑設置為/dev/nfs,NFS是Linux下常用的網絡文件系統,這種方式掛載一般是在系統開發階段,方便修改調試代碼,也就是將根文件系統放在PC機上,嵌入式開發板通過網絡到PC機進行訪問。
(2)本地掛載就是讓內核從SD卡、EMMC、光盤等設備里加載根文件系統,設備路徑設置為/dev/sda、/dev/ram等等。具體設備節點名稱是什么就填什么。本地掛載一般用在產品發布的時候,當整個系統開發完畢,就將PC機上的完整目錄拷貝到本地存儲設備里,讓內核直接從本地加載,這樣開啟啟動的速度會快很多,文件讀寫也快很多,不在經過網絡傳輸。本地掛載不方便調試代碼,一般開發階段還是NFS方式比較方便。
上面說的路徑設置這些配置是在uboot里設置,uboot有一個環境變量專門用于給內核傳參,當內核啟動之后,會根據uboot傳遞的參數完成執行。
當前采用的開發板是友善之臂的Tiny4412,內核、uboot、交叉編譯器都采用官方光盤自帶的文件。
如果設置內核為NFS網絡掛載,uboot的環境變量設置格式如下:
TINY4412 # setenv bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702 TINY4412 # saveenv TINY4412 # reset
2. NFS網絡方式掛載
前提是先把根文件系統制作好才能繼續這一步。當前的宿主機采用redhat6.3,這個系統比較老,但是功能是很齊全的,運行起來很流暢。要進行NFS網絡掛載,需要先把PC機的網絡與開發板的網絡設置好,保證在同一個局域網內。當前的redhat6.3系統是跑在VM虛擬機里,接下來就對網絡進行配置。
開發板NFS網絡掛載的思路:
PC機開啟NFS服務器,配置NFS共享的路徑: 將rootfs共享出來.
開發板當做NFS客戶端,去掛載PC機共享的目錄,完成文件系統的訪問
(1)配置虛擬機網絡
(2)配置PC機NFS服務器
[wbyq@wbyq rootfs]$ sudo vim /etc/exports /home/wbyq/work/rootfs *(insecure,rw,no_root_squash,sync)
編寫個腳本方便啟動NFS服務器: 可以放在用戶目錄下
比如: nfs_restart.sh 運用腳本要使用管理員權限,腳本改權限為可執行
service nfs restart #重啟 NFS 服務器 service iptables stop #關閉防火墻 ifconfig eth0 192.168.10.11 #設置IP地址
查看系統網卡名稱: ifconfig
(3)運行腳本啟動NFS服務器
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh [sudo] password for wbyq: 關閉 NFS 守護進程: [失敗] 關閉 NFS mountd: [失敗] 關閉 NFS quotas: [失敗] 關閉 NFS 服務: [確定] 啟動 NFS 服務: [確定] 關掉 NFS 配額: [確定] 啟動 NFS mountd: [確定] 正在啟動 RPC idmapd: [確定] 正在啟動 RPC idmapd: [確定] 啟動 NFS 守護進程: [確定] [wbyq@wbyq ~]$ sudo ./nfs_restart.sh 關閉 NFS 守護進程: [確定] 關閉 NFS mountd: [確定] 關閉 NFS quotas: [確定] 關閉 NFS 服務: [確定] 啟動 NFS 服務: [確定] 關掉 NFS 配額: [確定] 啟動 NFS mountd: [確定] 正在啟動 RPC idmapd: [確定] 正在啟動 RPC idmapd: [確定] 啟動 NFS 守護進程: [確定] [wbyq@wbyq ~]$
(4)設置UBOOT的環境變量
進入到uboot的命令行,設置環境變量。 set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702 set bootargs root=/dev/nfs nfsroot=<服務器地址>:
重啟之后開發板正常就會進入到Linux命令行:
Linux 嵌入式 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。