最近一直研究imx53的nfs啓動,今天終於搞出來了,結果csdn又不能寫博客了,這幾天一直被這個問題困擾着,上網搜了好多資料,但都是給出了一系列的代碼,問題是針對每一種開發板的設置還不一樣,整的自己暈暈乎乎的,不知道用哪一種方法。今天把網上的方法整理了一下,終於把nfs啓動搞定了,下面廢話不多說,說說我的過程吧
虛擬機中的設置:
1)在虛擬機中的ubuntu下面的mnt下面建立一個rootfs文件夾,mkdir /mnt/rootfs
2)在虛擬機中添加的共享目錄中添加新建的文件名和訪問ip
gedit /etc/exports
在最後一行添加
/mnt/rootfs 192.168.0.*(insecure,rw,sync,no_root_squash,no_subtree_check)
如果不添加的話,無法掛載,而且後面的各種屬性的意思,百度上都有,我就不解釋了
3)重啓nfs 輸入命令 /etc/init.d/nfs-kernel-server restart
關閉防火牆 ufw status 先查看一下防火牆狀態,然後關閉 ufw disable
如果想看看共享文件夾是否成功的話,可以在開發板上掛載一下這個文件夾試試
比如我的虛擬機ip是192.168.0.61
在超級終端輸入:mount -o nolock 192.168.0.61:/mnt/rootfs /mnt/nfs
測試一下是否能掛載成功
在uboot邊的設置如下
建議使用環境變量沒改過的uboot,有時候改亂了,就不大好了,
我的uboot改正後是這樣的
1)開機的時候先觀察一下自己的uboot是如何引導的,看最後一行bootcmd=run bootcmd_net ,開機首先運行這一句,
2)然後我們跳到bootcmd_net這一句,這一句是我改正後的,bootcmd_net 運行了三句,其中第二句和第三句是關鍵,bootarts_nfs,在上面有,他設置了,rootfs文件系統的位置和定義爲nfs啓動,通過我們觀察bootarts_nfs,我們可以發現,我們只需要設置一下serverip和nfsroot就可以了,設置爲自己的,其中的root=/dev/nfs 是虛擬的,不用管,直接這麼寫就可以
3)第三句是我自己改正的,這句是引導內核的,其中loadaddr爲加載到內存中的地址,後面爲nfs內核的目錄(這種方法不穩定)
修正,這裏的bootcmd_net中的nfs加載內核的方式修改爲tftp ${loadaddr}......因爲nfs不穩定,加載不好使,所以改成tftp加載,這樣需要提前在虛擬機中修改tftp目錄,gedit /etc/xinetd.d/tftp
LINUX tftp配置方法:
1.下載tftp服務器、客戶端tftp和守護進程xinetd三個包
yum install xinetd tftp tftp-server
2.配置gedit /etc/xinetd.d/tftp
修改server_args = -s /tftpboot -c,這裏的-c一定要加上,否則只能下載不能上傳!!!
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
per_source = 11
cps = 100 2
flags = IPv4
}
3.關閉防火牆
lokkit --disabled
4.建立tftp工作目錄並修改屬性(不修改屬性會出現error)
cd /
mkdir tftpboot
chmod 777 -R /tftpboot/
然後
ifconfig
tftp 192.168.1.111
get 111
此時會出現錯誤
Error code 0: Permission denied
gedit /etc/sysconfig/selinux,
設定其中的
SELINUX=disabled
然後重啓電腦即可
然後在uboot中修改一下內核爲tftp目錄下就可以了,別忘了把內核複製到tftp目錄哈,
這麼多天,包括五一假期也放在這上面了,終於有結果了