前言:
最近在學(xué)習(xí)正點(diǎn)原子嵌入式Linux開(kāi)發(fā)板uboot的移植實(shí)驗(yàn),移植完之后想測(cè)試網(wǎng)絡(luò)部分的驅(qū)動(dòng)能否工作正常。最后經(jīng)過(guò)測(cè)試發(fā)現(xiàn)tftp可以正常下載,nfs卻一直報(bào)錯(cuò)無(wú)法下載文件,最后也是折磨了兩天才解決了問(wèn)題,特寫(xiě)下此博客進(jìn)行記錄、總結(jié)。
項(xiàng)目場(chǎng)景:
我的輕薄本沒(méi)有網(wǎng)口,事先買(mǎi)了一個(gè)刷過(guò)固件可以連校園網(wǎng)的路由器。準(zhǔn)備好路由器之后,校園網(wǎng)通過(guò)一根網(wǎng)線接路由器的wan口,剩余兩個(gè)lan口,一個(gè)接到正點(diǎn)原子alpha開(kāi)發(fā)板的ENET2、筆記本電腦連路由器的WiFi、ubuntu改為橋接靜態(tài)ip,使得三者在同一網(wǎng)段內(nèi)(windows、ubuntu、uboot(不是linux內(nèi)核))
ubuntu | 192.168.10.218 |
uboot | 192.168.10.220 |
windows | 192.168.10.46 |
具體實(shí)物圖:
然后測(cè)試了一下測(cè)試三者是否能互相ping通(只有windows和ubuntu無(wú)法ping通uboot,其余四種情況都可以正常ping通),ubuntu和windows無(wú)法ping通uboot好像是uboot沒(méi)有解析ping命令,但是這個(gè)不影響后面的實(shí)驗(yàn)。下面是三者互相ping的截圖



根據(jù)教程,一開(kāi)始想使用nfs服務(wù)但行不通,但使用tftp服務(wù)可以正常下載、nfs沒(méi)調(diào)通這個(gè)問(wèn)題就沒(méi)有過(guò)多理會(huì)。直到學(xué)習(xí)根文件系統(tǒng)測(cè)試時(shí),根文件系統(tǒng)都是通過(guò)nfs進(jìn)行掛載,我一開(kāi)始還是想取巧避開(kāi)nfs用tftp進(jìn)行掛載,但是我看了看linux內(nèi)核文件好像只支持nfs、沒(méi)有看到tftp的字眼,而且后面的教程都是用nfs,所以就躲不掉了,只能先調(diào)通nfs才能繼續(xù)往下走。



?
解決方案:
因?yàn)槲夷芡ㄟ^(guò)tftp服務(wù)進(jìn)行下載,說(shuō)明我的網(wǎng)絡(luò)拓?fù)鋺?yīng)該是沒(méi)有什么問(wèn)題的,問(wèn)題應(yīng)該就在nfs服務(wù)這部分。這期間我看了正點(diǎn)原子常見(jiàn)錯(cuò)誤的總結(jié)、還有一些大佬們的博客、咨詢某寶技術(shù)客服最后才得以解決,大家可以按順序針對(duì)下面的情況進(jìn)行設(shè)置和排查。
1、關(guān)閉殺毒軟件(火絨等)、關(guān)閉windows的防火墻、ubuntu的也關(guān)閉。(嫌麻煩ubuntu的我就直接卸載了)
2、uboot使用的nfs版本是version2,而ubuntu16以上默認(rèn)是version3或者version4,通過(guò)sudo cat /proc/fs/nfsd/versions可以查看當(dāng)前ubuntu支持的nfs版本。我用的ubuntu版本是20.04,為了兼容要修改 /etc/default/nfs-kernel-server配置文件,通過(guò)sudo vim /etc/default/nfs-kernel-server進(jìn)入文件進(jìn)行修改。

修改之后重啟nfs服務(wù)(sudo service nfs-kernel-server restart)看是否能成功下載,如果還是不行繼續(xù)往下看。
3、出現(xiàn)cannot mount或者編譯一段時(shí)間后出現(xiàn)TTT錯(cuò)誤,可以查看一下/etc/hosts、/etc/exports這兩個(gè)配置文件
sudo vim /etc/exports????????????????sudo vim /etc/hosts

/etc/exports添加的內(nèi)容分為三部分
1:nfs服務(wù)共享目錄絕對(duì)路徑
2:*代表所有的ip都可訪問(wèn)
???????如果只限定一個(gè)ip只需將*改為192.168.10.220(要和ubuntu在同一網(wǎng)段)
???????如果要使用同一網(wǎng)段只需將*改為192.168.10.*
3:(rw,sync,no_root_squash)為nfs服務(wù)的一些命令參數(shù)
?
修改完exports后記得重新聲明一下 sudo exportfs? -ar、重啟一下nfs服務(wù)。
我看完很多人的博客到這步基本上都弄好了,nfs可以成功下載文件了,但是我的還是不行。
4:設(shè)置完上述內(nèi)容后打印nfs的version還是出現(xiàn)-2,我用netstat看一下nfs對(duì)應(yīng)端口,發(fā)現(xiàn)沒(méi)有udp只有tcp
netstat -a | grep "nfs"
設(shè)置一下這個(gè)文件/etc/nfs.conf
sudo vim /etc/nfs.conf
注意重新啟動(dòng)nfs服務(wù)?sudo service nfs-kernel-server restart?重新執(zhí)行netstat,出現(xiàn)了udp
用sudo cat /proc/fs/nfsd/versions可以發(fā)現(xiàn)出現(xiàn)了+2,即支持nfs服務(wù)的version2,接下來(lái)要做的就是驗(yàn)證一下
在uboot中執(zhí)行命令nfs 80800000 192.168.10.218:/home/lpme/linux/nfs/zImage發(fā)現(xiàn)可以成功下載
其中一些T可能是網(wǎng)絡(luò)問(wèn)題,我們看一下dram里面的內(nèi)容和zImage(用winhex打開(kāi))里的內(nèi)容是否相同
md.b 80800000 2000
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-808899.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-808899.html
?進(jìn)行比較兩者是相同的,即nfs服務(wù)可以正常使用了。
總結(jié):
非常感謝你能看到這里,希望這篇文章能幫你解決問(wèn)題。
到了這里,關(guān)于嵌入式Linux開(kāi)發(fā)——解決uboot無(wú)法使用nfs服務(wù)從ubuntu中下載文件(TTT、cannot mount等錯(cuò)誤)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!