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=<服務器地址>: ip=<開發板IP>:<服務器地址>:<網關>:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
?
執行示例:
TINY4412 # 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
TINY4412 # save
TINY4412 # reset
復制代碼共享路徑>
重啟之后開發板正常就會進入到Linux命令行:
審核編輯:湯梓紅
-
嵌入式
+關注
關注
5072文章
19026瀏覽量
303516 -
Linux
+關注
關注
87文章
11232瀏覽量
208949 -
根文件系統
+關注
關注
0文章
25瀏覽量
11972
發布評論請先 登錄
相關推薦
評論