-
服务端(PC Ubuntu16.04)
- 安装nfs服务
sudo apt-get install nfs-kernel-server
- 修改配置文件
sudo gedit /etc/exports
主要添加共享的文件目录,添加一句:
/home/ws/nfs-share *(rw,sync,no_root_squash)
表示共享/home/ws/nfs-share目录,*表示所有IP地址,rw:表示可读可写,sync:同步,no_root_squash:不降低root用户的权限
- 重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
-
客户端配置(开发板BBB)
开发板中uboot启动时,连续按下空格键来打断uboot自动引导,切换到命令交互终端,对一些参数进行配置。最后执行nfsboot命令,相当于启动配置好的脚本。具体配置说明参考下面的博客:
https://blog.csdn.net/zy812248258/article/details/39291835
server_ip:
表示TFTP、NFS服务器的IP地址,nfsboot会执行将server_ip赋值给serverip
root_dir:
PC端NFS服务器的目录,我设置的是/media/ws/Extend/nfs-share
client_ip:
开发板的IP地址,必须与PC接在同一个局域网中。
gw_ip:
网关IP,默认就行,一般局域网网关IP都是192.168.1.1
Netmask:
子网掩码,保证目标机和开发板处于同一网段即可,默认设置
device=eth0:
网卡名,u-boot默认已经设置好,设置为开发板的第一块以太网网卡,故此项无需设置
autoconf=off
自动配置未明确指定参数的方式,可以是dhcp, rarp, bootp。如果不希望使用自动配置则可以使用off值来关闭,保留默认设置
loadaddr=0x82000000:
我觉得是内核镜像在内存中加载的地址,理解不一定对,保留默认设置。
bootfile=zImage:
内核镜像文件名,保留默认设置,如果想用其他名字自己,保证TFTP服务器目录下的文件名与此保持一致,否则会找不到内核
fdtaddr=0x88000000
我觉得是设备树文件在内存中加载的地址,理解不一定对,保留默认设置。
fdtfile=undefined
设备树文件的名称,设备树必须放在dts文件夹下,因为nfsboot脚本中代码为
tftp ${fdtaddr} dtbs/${fdtfile}。
在终端输入如下参数设置(根据自己情况而定):
setenv server_ip 192.168.1.108
setenv client_ip 192.168.1.109
setenv gw_ip 192.168.1.1
setenv root_dir /media/ws/Extend/nfs-share
setenv fdtfile am335x-boneblack.dtb
setenv autoconf off
run nfsboot
便可以看到系统启动完成,启动后直接是root权限了,sudo命令没用了:
如果哪儿设置的不对,在DHCP那儿卡住,然后显示无法加载根文件系统,那时候就需要回过头看一下配置的对不对。