1. 前言
根文件系統(tǒng)是Linux內(nèi)核啟動之后掛載的第一個文件系統(tǒng),上篇文章里已經(jīng)介紹過,如何使用busybox來制作根文件系統(tǒng)。這篇文章介紹根文件系統(tǒng)制作成功后,如何讓內(nèi)核找到文件系統(tǒng),并完成掛載,進(jìn)入到系統(tǒng)命令行終端。
根文件系統(tǒng)支持從網(wǎng)絡(luò)掛載和本地掛載兩種方式:
(1)如果是采用網(wǎng)絡(luò)掛載就將路徑設(shè)置為/dev/nfs,NFS是Linux下常用的網(wǎng)絡(luò)文件系統(tǒng),這種方式掛載一般是在系統(tǒng)開發(fā)階段,方便修改調(diào)試代碼,也就是將根文件系統(tǒng)放在PC機(jī)上,嵌入式開發(fā)板通過網(wǎng)絡(luò)到PC機(jī)進(jìn)行訪問。
(2)本地掛載就是讓內(nèi)核從SD卡、EMMC、光盤等設(shè)備里加載根文件系統(tǒng),設(shè)備路徑設(shè)置為/dev/sda、/dev/ram等等。具體設(shè)備節(jié)點(diǎn)名稱是什么就填什么。本地掛載一般用在產(chǎn)品發(fā)布的時候,當(dāng)整個系統(tǒng)開發(fā)完畢,就將PC機(jī)上的完整目錄拷貝到本地存儲設(shè)備里,讓內(nèi)核直接從本地加載,這樣開啟啟動的速度會快很多,文件讀寫也快很多,不在經(jīng)過網(wǎng)絡(luò)傳輸。本地掛載不方便調(diào)試代碼,一般開發(fā)階段還是NFS方式比較方便。
上面說的路徑設(shè)置這些配置是在uboot里設(shè)置,uboot有一個環(huán)境變量專門用于給內(nèi)核傳參,當(dāng)內(nèi)核啟動之后,會根據(jù)uboot傳遞的參數(shù)完成執(zhí)行。
當(dāng)前采用的開發(fā)板是友善之臂的Tiny4412,內(nèi)核、uboot、交叉編譯器都采用官方光盤自帶的文件。
如果設(shè)置內(nèi)核為NFS網(wǎng)絡(luò)掛載,uboot的環(huán)境變量設(shè)置格式如下:
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
復(fù)制代碼
2. NFS網(wǎng)絡(luò)方式掛載
前提是先把根文件系統(tǒng)制作好才能繼續(xù)這一步。當(dāng)前的宿主機(jī)采用redhat6.3,這個系統(tǒng)比較老,但是功能是很齊全的,運(yùn)行起來很流暢。要進(jìn)行NFS網(wǎng)絡(luò)掛載,需要先把PC機(jī)的網(wǎng)絡(luò)與開發(fā)板的網(wǎng)絡(luò)設(shè)置好,保證在同一個局域網(wǎng)內(nèi)。當(dāng)前的redhat6.3系統(tǒng)是跑在VM虛擬機(jī)里,接下來就對網(wǎng)絡(luò)進(jìn)行配置。
開發(fā)板NFS網(wǎng)絡(luò)掛載的思路:
- PC機(jī)開啟NFS服務(wù)器,配置NFS共享的路徑: 將rootfs共享出來.
- 開發(fā)板當(dāng)做NFS客戶端,去掛載PC機(jī)共享的目錄,完成文件系統(tǒng)的訪問
(1)配置虛擬機(jī)網(wǎng)絡(luò)
(2)配置PC機(jī)NFS服務(wù)器
[wbyq@wbyq rootfs]$ sudo vim /etc/exports
/home/wbyq/work/rootfs *(insecure,rw,no_root_squash,sync)
復(fù)制代碼
編寫個腳本方便啟動NFS服務(wù)器: 可以放在用戶目錄下 比如: nfs_restart.sh
運(yùn)用腳本要使用管理員權(quán)限,腳本改權(quán)限為可執(zhí)行
service nfs restart #重啟 NFS 服務(wù)器
service iptables stop #關(guān)閉防火墻
ifconfig eth0 192.168.10.11 #設(shè)置IP地址
復(fù)制代碼
查看系統(tǒng)網(wǎng)卡名稱: ifconfig
(3)運(yùn)行腳本啟動NFS服務(wù)器
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh
[sudo] password for wbyq:
關(guān)閉 NFS 守護(hù)進(jìn)程: [失敗]
關(guān)閉 NFS mountd: [失敗]
關(guān)閉 NFS quotas: [失敗]
關(guān)閉 NFS 服務(wù): [確定]
啟動 NFS 服務(wù): [確定]
關(guān)掉 NFS 配額: [確定]
啟動 NFS mountd: [確定]
正在啟動 RPC idmapd: [確定]
正在啟動 RPC idmapd: [確定]
啟動 NFS 守護(hù)進(jìn)程: [確定]
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh
關(guān)閉 NFS 守護(hù)進(jìn)程: [確定]
關(guān)閉 NFS mountd: [確定]
關(guān)閉 NFS quotas: [確定]
關(guān)閉 NFS 服務(wù): [確定]
啟動 NFS 服務(wù): [確定]
關(guān)掉 NFS 配額: [確定]
啟動 NFS mountd: [確定]
正在啟動 RPC idmapd: [確定]
正在啟動 RPC idmapd: [確定]
啟動 NFS 守護(hù)進(jìn)程: [確定]
[wbyq@wbyq ~]$
復(fù)制代碼
(4)設(shè)置UBOOT的環(huán)境變量
進(jìn)入到uboot的命令行,設(shè)置環(huán)境變量。
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=<服務(wù)器地址>: ip=<開發(fā)板IP>:<服務(wù)器地址>:<網(wǎng)關(guān)>:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
?
執(zhí)行示例:
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
復(fù)制代碼共享路徑>
重啟之后開發(fā)板正常就會進(jìn)入到Linux命令行:
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5122文章
19423瀏覽量
312774 -
Linux
+關(guān)注
關(guān)注
87文章
11414瀏覽量
212249 -
根文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
26瀏覽量
12180
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式Linux根文件系統(tǒng)怎么制作?
如何使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境呢
嵌入式linux開發(fā)遇到nfs無法掛載怎么解決
Linux啟動掛載根文件系統(tǒng)簡析
NFS掛載網(wǎng)絡(luò)文件系統(tǒng)學(xué)習(xí)
嵌入式Linux開發(fā)板上NFS文件系統(tǒng)的使用
嵌入式設(shè)備NFS掛載目錄(基于iTop 4412)

嵌入式Linux開發(fā)使用NFS掛載根文件系統(tǒng)

嵌入式Linux | 掛載網(wǎng)絡(luò)文件系統(tǒng)

嵌入式Linux移植3. NFS根文件系統(tǒng)掛載(從Ubuntu啟動內(nèi)核,文件系統(tǒng))

i.MX6ULL嵌入式Linux開發(fā)4-根文件系統(tǒng)構(gòu)建

評論