TFTP安装与建立
1.安装xinetd:sudo apt-get install xinetd
xinetd是一个系统守护程序,它取代inetd用于控制TCP,UDP的连接。
2.安装TFTP,TFTPD:sudo apt-get install tftp tftpd
linux下的TFTP分客户端和服务器两种,前者是客户端,后者为服务器。
3.创建服务器工作目录 mkdir tftpboot
4.创建/etc/xinetd.d/tftp文件
安装好之后不会出现tftp文件,要自己创建,利用根用户创建该文件,内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/xinetd
server_args = -s /home/muzilong/tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
5.重启xinetd:/etc/init.d/xinetd restart
6.测试:tftp
tftp>?查看帮助
tftp>connet localhost连接主机
tftp>get filename从服务器上下载文件到当前目录
tftp>put filename上传文件到服务器
tftp>verbose
tftp>trace 这两条没查,打开以后可以看到传输的细节
xinetd安装后放在init.d目录里,开机就默认启动了,于是tftp服务器也已经启动,如果不需要可以移出来。测试是在主机模拟客户端,进行开发板下载时不需要打开客户端,启动xinetd就可以了。
遇到的问题:
1.第一次get文件时transfer time out
sent RRQ <file=testfile, mode=netascii>
sent RRQ <file=testfile, mode=netascii>
sent RRQ <file=testfile, mode=netascii>
sent RRQ <file=testfile, mode=netascii>
sent RRQ <file=testfile, mode=netascii>
Transfer timed out.
检查tftp文件,竟然是server那一句没有写,服务器没启动造成的。
2.error code:No such file or directory
3.Permission deny
上面两个问题都是因为TFTP服务器工作目录的权限没有设对,被它的提示信息弄糊涂了,没有搞清楚究竟如何,应该把这个文件夹对tftp用户的权限设为可读可执行,我设为755。
完成之后用直通网线连接开发板,并用串口连通;使用ifconfig eth0 ipaddr命令设置主机的IP地址;把需要下载的文件放到服务器的工作目录;之后在另一个终端下打开minicom,通过u-boot的命令下载程序,注意宿主机与目标板的网络环境设置。
NFS搭建
1.安装nfs:sudo apt-get install nfs-kernel-server
2.修改/etc/exports
在这个文件里添加nfs的共享目录,格式如下:
需要共享的目录 允许挂载的主机(读写,其他)
例如:/home/muzllong/nfsboot 192.168.0.10(rw,sync) <--允许IP地址为192.168.0.10的主机访问
3.建立nfs共享目录:mkdir nfsboot
4.启动portmap服务:/etc/init.d/portmap restart
5.重启nfs:/etc/init.d/nfs-kernel-server restart
6.测试,通过把共享目录挂载到本地/mnt目录上来测试nfs
mount 192.168.0.10:/home/muzilong/nfsboot /mnt/nfs
可以在/mnt/nfs目录下看到/nfsboot目录下的文件,挂载成功,NFS服务器端配置完成。
要把宿主机的共享文件挂载到开发板上还要费一番功夫。前几天编译出来的uclinux内核没有更改过任何配置,原来是没有把NFS的一些支持开启的,需要重新编译内核。在配置时要选定配置“Customize Kernel Setting”和“Customize Vendor/User Settings”两项。
内核配置中选择:
Net working option-->IP:fast network address
File systems -> Network file systems -> NFS File system support(Provide NFSv3 client support)
用户配置中选择:
Network->Applications->portmap
BusyBox-->mount(support NFS mount )
重新编译内核,,这次很顺利,进入之后配置好网络环境,直接用下面的命令:
mount -t nfs 192.168.0.10:/home/muzilong/nfsboot /mnt
可以在mnt目录下看到共享文件,但是出现错误:
RPC: sendmsg returned error 101
portmap: RPC call returned error 101
lock_up:makesock failed error=-101
mount:/etc/mtab:Read-only file system
运行命令:
portmap &
没有了这个错误:lock_up:makesock failed error=-101
在mount 命令后加上选项-o nolock之后,只剩下一个错误
mount:/etc/mtab:Read-only file system
这个问题没有解决,不过,可以在板子上看到mount过来的文件,在宿主机上交叉编译好Hello World,通过nfs 挂载到板子上,./hello成功!
也用tftp把Hello World下载到/var/tmp目录下,效果相同,只是有一个文件权限的问题,NFS过来的文件在板子上的文件权限与在宿主机上完全相同,不过不能在/mnt上修改权限,TFTP过来的文件权限改变了,但没有弄清楚是按照怎样的原则改变的,在/tmp目录下可以对权限进行修改。