最近一直研究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目录哈,
这么多天,包括五一假期也放在这上面了,终于有结果了
这样引导就可以使用了,其实把内容网上都有,但是不适合自己罢了,关键时刻还是要自己分析引导过程,懂得原理才能解决问题,一味的乱查资料,这样只会事倍功半