开发板和宿主机的TFTP&NFS配置问题

    在嵌入式开发中,由于嵌入式开发板资源有限,不能进行文件编译,因此我们都是将写好都代码在宿主机(Linux虚拟机)上进行调试编译好后生成二进制文件,然后通过tftpNFS来进行传输到开发板上运行。

 

但是如何来配置tftp呢?经过一番配置,我终于成功了。

硬件开发环境:TQ2440开发板

linux内核:linux2.6.25

PC系统:红帽LINUX

 

第一步:实现PC机、LINUX虚拟机和开发板 三者之间的网络搭建 即可互相ping

 

具体做法:

 

注意:在此之前,先说一下我的开发板和PC机或者虚拟机的连接情况,开发板通过串口线与PC机连接,通过网线直接将开发板和PC机连接,还有通过下载线和PC机相连,PC机连接无线网络。

 

PC机的本地连接IP(192.168.1.140,手动设置)、无线IP192.168.1.101

虚拟机IP192.168.1.102

开发板IP(192.168.1.6)

 

步骤1:虚拟机一定要选择桥接(bridged

步骤2:设置虚拟机的“Virtual Network Editor”

切记!!一定要选择PC机的本地网卡,不是虚拟网卡以及无线网卡(不要选择automatic选项,因为它有可能会选到无线网卡,因此虚拟机一定ping不通开发板)

 

步骤3:设置PC机、虚拟机、以及开发板的IP在同一个网段,即192.168.1.*,其他掩码、网关、DNS都设置一样

 

步骤4:通过以上的配置,就可以实现PC机、虚拟机、开发板直接的互相PING。注意:此时发现PC机通过本地连接IP(192.168.1.140)可以实现与虚拟机以及开发板直接的ping

 

第二步:实现PC机、虚拟机、开发板三者之间互相ping通之后,开始搭建TFTP开发环境

 

首先,我们需要以宿主机(Linux虚拟机)作为服务器端,因为我们是要将虚拟机上的文件下载到开发板上。

 

步骤1在虚拟机上安装tftp服务

1.加载光盘

#mount /dev/cdrom /mnt

 

2.安装tftp服务的服务器端

# rpm -ivh  tftp-server-0.49-7.el6.i686.rpm

 

3.安装tftp服务的客户端

# rpm -ivh  tftp-0.49-7.el6.i686.rpm

 

步骤2:配置tftp服务

安装完后,开始配置tftp服务:

 

1.编辑vi /etc/xinetd.d/tftp

service tftp

{

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /tftpboot -c

        disable                 = no

}

disable改为no,保存退出。

 

2.建立默认的tftp根目录,要跟上面的server_args的路径一样,这里是/tftpboot,即在根目录下创建tftpboot文件夹

 

 

3,启动ttfp服务器

# /etc/rc.d/init.d/xinetd restart

停止 xinetd:                                              [  确定  ]

启动 xinetd:                                              [  确定  ]

 

4.在命令行中输入setup

#setup

选择选中tftp并去掉iptables选项

还得选中portmap(端口映射),如果系统中没有那个选项,还得安装相关服务,#rpm -ivh portreserver-0.0.4-9.el6.i686.rpm就OK

 

5.再次运行 # /etc/rc.d/init.d/xinetd restart

这时,tftp就配置好了。

 

第三步:Tftp服务搭建完成,可以实现开发板(PC机)从虚拟机上下载/上传文件

 

注意:tftp功能的实现必须要以三者之间可以互相PING通为前提

 

最好先做个测试:本机测试tftp服务器功能

1.在虚拟机上启动tftp服务器

# /etc/init.d/xinetd restart

2.任意目录下在虚拟机上tftp虚拟机自身

#tftp 192.168.1.102  

3. 利用get <文件>来从/tftpboot下载文件

4. 利用put <文件>将文件上传到/tftpboot

 

 

若能实现上述功能,则说明tftp服务可用。可继续下面的试验。

Part1. PC机作为客户端,与虚拟机文件共享

在PC机上运行 tftpd32.exe 客户端软件

 

选择Tftp客户端,主机填虚拟机IP,本地文件是PC机上文件,远程文件是虚拟机上/tftpboot下的文件,点击上传或下载。即可实现。

 

Part2 .开发板作为客户端,与虚拟机文件共享

此时客户端(开发板)就可以上传下载文件到虚拟机上的/tftpboot目录下了。

 

那么在客户端是如何使用tftp上传下载文件的呢。这个和在虚拟机上还是有点不一样的。

 

步骤1在开发板上的终端输入

# tftp

Usage: tftp [OPTION]... HOST [PORT]

 Transfer a file from/to tftp server

 Options:

        -l FILE Local FILE

        -r FILE Remote FILE

        -g      Get file

        -p      Put file

        -b SIZE Transfer blocks of SIZE octets

参数说明:

-l  local的缩写,后跟本地或下载到本地后重命名的文件名。

-r  remote的缩写,后跟远程即PCtftp服务器根目录中的文件名,或上传到PC机后重命名后的文件名。

-g  get的缩写,下载文件时用,后跟PC机的IP地址

-p  put的缩写,上传文件时用,后跟PC机的IP地址

 

tftp 默认占用的是69端口

 

步骤2:下载/上传命令

下载文件:[root@wanyao /]# tftp -l hello.c -r hello.c -g 192.168.1.102 69

上传文件:[root@wanyao /]# tftp -l hello.c -r hello.c -p 192.168.1.102 69

其中,192.168.1.102是虚拟机的ip

 

注意:下载或上传文件时,服务器和本地文件名最好相同,否则会出现得到了文件,但文件大小却是 0k 的现象。如果出现了这种现象,请多敲几次命令,因为tftp服务是基于udp协议,不能保证文件正确的传输。

 

安装过程中出现的问题及原因

现象一:

tftp> get test.log

Transfer timed out.

原因:tftpd服务没有启动

现象二

tftp> put test2

Error code 0: Permission denied

原因:运行命令,查看系统日志

tail /var/log/messages

发现有如下一段文字:

Mar 24 19:05:26 localhost setroubleshoot:   

SELinux is preventing /usr/sbin/in.tftpd (tftpd_t) "write" to tftpboot (tftpdir_t).      

For complete SELinux messages.

run sealert -l 40a5a6bf-8ded-4bfa-ab6e-fa669a25fc6c

知道这是是由SELinux造成的,在FC3FC3以后的FC版本中SELinux默认的都是开启的,现关掉它,

修改文件 /etc/sysconfig/selinux,设定其中的SELINUX=disabled然后重启电脑即可,或者执行命令 system-config-securitylevel 打开 安全级别配置对话框,将SELinuxS)选项中强制改为允许

现象三:

tftp> put ex070416.log

Error code 1: File not found

原因:指定的文件不存在;或tftpd启动参数中没有指定-c选项,允许上传文件

现象四:

tftp> get test.log

Error code 2: Only absolute filenames allowed

原因:

/etc/xinetd.d/tftpd中设置的server_args/etc/default/tftpd-hpa

cat /etc/default/tftpd-hpa

#Defaults for tftpd-hpa

RUN_DAEMON="no"

OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"

设置的时候只要将server_args=改为你自己设定的服务器文件夹就行了

 

 

第四步:搭建NFS开发环境  

在应用程序开发环境,NFS方式比TFTP方式的执行效率要高的多,因为它不需要将linux服务器上的程序下载到嵌入式目标系统当中去就可以调试。

 

NFS服务端:虚拟机当中的NFS服务器

NFS客户端:开发板

 

实现NFS开发环境的前提也是相互PING

 

步骤1:建立NFS开发环境

在虚拟机上安装NFS软件包

一是虚拟机上的NFS服务器支持,二是开发板上的NFS客户端支持

root身份登录,编译文件/etc/exports

#vi /etc/exports

加入语句:/nfsfile 192.168.1.*(rw,sync,no_root_squash),表示的意思是:允许IP范围在192.168.1.*段的计算机来访问共享目录/nfsfile,具体参数自查。

 

步骤2:启用保护机制

配置/etc/hosts.deny/etc/hosts.allow

 

 

步骤3:启动NFS

 

注意,关闭防火墙

 

1.首先必须启动portreserve(portmap,即端口映射)服务,这是NFS本身需要的

#service portreserve restart

2.启动NFS服务器

#service nfs resatrt。此时NFS会激活守护进程,然后开始监听客户端的请求。

 

3.在虚拟机上进行NFS回环测试

在虚拟机上执行命令:

#mount -o nolock -t nfs 192.168.1.102:/nfsfile /nfsfile1

#ls /nfsfile1

若挂载成功,即可在nfsfile1文件夹下看到和nfsfile一样的内容

 

4.在开发板上执行命令

##mount -o nolock -t nfs 192.168.1.102:/nfsfile /mnt

#ls /mnt

挂载成功,可在/mnt文件夹下看到和nfsfile一样的内容,且两个文件夹内的内容的修改时同步的

 

 

 

转载于:https://www.cnblogs.com/jinchengsong/p/5765673.html

你可能感兴趣的:(开发板和宿主机的TFTP&NFS配置问题)