一:UBuntu14.04下配置TFTP服务器
TFTP(Trivial File Transfer Protocol),是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,在U-Boot下通过TFTP协议从服务器上加载内核并运行。
(1)使用命令“ sudo apt-get install tftpd-hpa tftp-hpa xinetd ”安装tftpd-hpa(服务端),tftp-hpa(客户端),xinetd(超级服务器)。
(2) 根目录/下使用命令“ mkdir /home/chenhao/Tools/tftpboot ”建立服务的共享目录tftpboot(任意命名,注意在home文件夹下不需要加sudo,尽量将文件夹放在home文件夹下),路径为/home/chenhao/Tools/tftpboot(任意路径)。切换至tftpboot所在目录下,使用命令“ chmod -R 777 tftpboot/ ”更改tftpboot目录权限。
(3)使用命令“ sudo gedit /etc/xinetd.d/tftp ”修改tftp配置文件,即在/etc/xinetd.d/下建立一个配置文件,如果该目录没有名为tftp的文件,则创建该文件。在文件中输入(修改)为以下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/chenhao/Tools/tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的,-s制定chroot目录,-c意思是可以创建文件。
(4)使用命令“ sudo gedit /etc/default/tftpd-hpa ”修改tftpd-hpa文件,修改相应的路径,修改内容如下:
RUN_DAEMON="yes"
OPTIONS="-s /home/chenhao/Tools/tftpboot -c -p -U tftpd"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/chenhao/Tools/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
注意修改TFTP_DIRECTORY与OPTIONS为真实tftp服务器路径。
(5)使用“ sudo /etc/init.d/xinetd reload ”,“ sudo service tftpd-hpa restart ”,“ sudo /etc/init.d/xinetd restart ”命令重启tftp和tftpd-hpa服务,每次修改完配置文件后,都需要重新启动一下服务。
(6)测试,将zImage与devicetree-zImage-am335x-evm.dtb文件放入tftpboot文件夹,在u-boot命令行下设置好ip地址:setenv ipaddr xxx,setenv serverip xxx。
二:UBuntu14.04下配置NFS服务器
NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操作系统无关。NFS分服务器和客户机,当使用远端文件时只要用mount命令就可把远端NFS服务器上的文件系统挂载在本地文件系统之下,操作远程文件与操作本地文件没有不同。NFS服务器所共享文件或目录记录在/etc/exports文件中。嵌入式Linux开发中,会经常使用NFS,目标系统通常作为NFS客户机使用,Linux主机作为NFS服务器。在目标系统上通过 NFS,将服务器的NFS共享目录挂载到本地,可以直接运行服务器上的文件。在调试系统驱动模块以及应用程序,NFS都是十分必要的,并且Linux还支 持NFS根文件系统,能直接从远程NFS root启动系统,这对嵌入式Linux根文件系统裁剪和集成也是十分有必要的。
(1)通过命令“ sudo apt-get install nfs-kernel-server ”安装NFS服务。
(2)通过命令“ mkdir /home/chenhao/Tools/nfsboot ”建立一个nfs服务的专有的文件夹,此目录可以自己选择定制。
(3)建立好文件夹后,接着执行命令“ sudo gedit /etc/exports ”来配置nfs,NFS允许挂载的目录及权限在文件/etc/exports中进行了定义。例如,要将根目录下的/home/chenhao/Tools/nfsboot目录共享出来,需要在/etc/exports文本的最后一行添加:
/home/chenhao/Tools/nfsboot *(rw,sync,no_root_squash,no_subtree_check)
在上述nfs配置文件中的含义是:
1)/home/chenhao/Tools/nfsboot:与nfs服务客户端共享的目录,这个路径必须和你前面设置的文件的路径一致;
2)*:允许所有的网段访问,也可以使用具体的IP;
3)rw:挂接此目录的客户端对该共享目录具有读写权限;
4)sync:资料同步写入内存和硬盘;
5)no_root_squash:root用户具有对根目录的完全管理访问权限;
6)no_subtree_check:不检查父目录的权限;
(4)通过命令“ sudo /etc/init.d/rpcbind restart ”重启rpcbind 服务,nfs是一个RPC程序,使用它前需要映射好端口,通过rpcbind 设定,此和unbuntu12.04有区别。
(5)通过命令“ sudo /etc/init.d/nfs-kernel-server restart ”重启nfs服务。
附录:NFS常用参数如下:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
三:基于AM335x-EVM开发板测试
(1)编辑uEnv.txt设置IP地址以及根目录地址:
console=ttyO0,115200n8
ipaddr=115.156.211.165
serverip=115.156.211.164
gatewayip=115.156.211.255
netmask=255.255.255.0
hostname=am335x-evm
dev=eth0
autoconf=off
rootpath=/home/chenhao/Tools/nfsboot
ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${device}:${autoconf}
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw
netboot=echo Booting from network ...; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootz ${loadaddr} - ${fdtaddr}
(2)u-boot环境下打印变量printenv loadaddr bootfile fdtaddr fdtfile,loadaddr为内核加载地址,bootfile为内核名称,fdtaddr为设备树文件加载地址,fdtfile为设备树文件名称,将tftpboot目录下的文件改为图中名称,也可通过修改uEnv.txt编辑不同名称。
(3)u-boot环境下执行run netboot加载。