在烧写了 u-boot 之后,为了减少烧写根文件系统、调试程序之痛苦,本文档介绍如何通过 tftp 下载内核,nfs 服务挂接根文件系统启动系统,不用每次都烧到开发板上。
一、NFS 服务挂载根文件系统
1、Linux 服务器端 NFS 服务器的配置
以 root 身份登陆 Linux 服务器,编辑/etc 目录下的共享目录配置文件 exports,指定共享目录及权限等。执行如下命令编辑文件/etc/exports:
#sudo apt-get install nfs-kernel-server
#vi /etc/exports
在该文件里添加如下内容:
/tftpboot/rootfs 192.168.0.*(rw,sync,no_root_squash)
然后保存退出(添加的内容意思是:允许 ip 地址范围在192.168.0.*的计算机以读写的权限来访问/tftpboot/rootfs 目录,/tftpboot/rootfs 也称为服务器输出共享目录)。括号内的参数意义描述如下:
1)rw:读/写权限,只读权限的参数为 ro;
2)sync:数据同步写入内存和硬盘,也可以使用 async,此时数据会先暂存于内存中,而不立即写入硬盘;
3)no_root_squash: NFS 服务器共享目录用户的属性,如果用户是非 root,那么对于这个共享目录来说就具有 root 的权限;
如果用户想修改/etc/exports 以修改后或添加其它共享目录,可执行命令:
1)#sudo exportfs -rv 使/etc/exports 文件生效
2)接着执行如下命令,启动端口映射:
#/etc/init.d/portmap start(或:#sudo service portmap start)
3)最后启动 NFS 服务,此时 NFS 会激活守护进程,然后就开始监听 Client 端的请求:
#/etc/init.d/nfs-kernel-server restart(或:#sudo service nfs-kernel- server
restart)
Linux 服务器端 NFS 服务器的配置到此就已经配置好了。
二、开发板启动参数设置
当在第一步启动 Linux 主机 NFS 服务后,现在就可以在超级终端 u-boot 控制界面修改命令行参数通过 NFS 启动根文件系统了。假设 Linux 主机 IP 为192.168.0.100,NFS 目录为/tftpboot/rootfs,就可以如下设置命令行参数后启动内核。
方式一:
# set bootargs noinitrd root=/dev/nfs console=ttySAC0,115200 nfsroot=192.168.0.100:/tftpboot/rootfs ip=192.168.0.150:192.168.0.100:1 92.168.0.1:255.
255.255.0::eth0:off
方式二:
# set bootargs root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/rootfs
ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0 console =ttySAC0,115200
mem=64M
方式三:
# set bootargs root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/rootfs,
rsize=1500,wsize=1500 ip=192.168.0.150:192.168.0.100:192.168.0.1 :255.255.255.0
console=ttySAC0,115200 mem=64M
增加 rsize 和 wsize 参数,增加块大小(默认为1024),我猜想可以减小丢包概率;
# saveenv
命令参数行解释:
Targetboard IP addr :192.168.0.150
Host PC IP addr :192.168.0.100
Gateway :192.168.0.1
Nfs dir :192.168.0.100:/tftpboot/rootfs
各命令行格式:
1、 root=/dev/nfs :
并非真的设备,而是一个告诉内核经由网络取得根文件系统的旗标
2、nfsroot
参数nfsroot 这个参数告诉内核以那一台机器,那个目录以及那个网络文件系统选项作为根文件系统使用,命令格式:
nfsroot=[
1)
2)
3)
port = as given by server portmap daemon
rsize = 1024
wsize = 1024
timeo = 7
retrans = 3
acregmin = 3
acregmax = 60
acdirmin = 30
acdirmax = 60
flags = hard, nointr, noposix, cto, ac
3、nfsaddrs
参数nfsaddrs 设定网络通讯所需的各种网络接口地址。如果没有给定这个参数,则内核会试著使用反向地址解析协议以及/或是启动协议(BOOTP) 以找出这些参数。其格式如下:
nfsaddrs=
1)
2)
3)
三、内核配置要求添加内核对NFS 的支持:
1)选中networking support->networking options->IP:kernel level auloconfiguralion 项
2)选中file systems->network file systems-> 下的root file system on nfs 和nfs file system support