通过tftp下载文件到开发板
上位机上编译好可执行文件后需要下载到Arm开发版进行运行,可以通过U盘直接拷贝(太繁琐),可以使用串口通过rz等下载(串口传输速度太慢,不适用于大文件),还可以使用网络进行传输。下面介绍如何搭建tftp环境进行开发板和上位机(Ubuntu)之间的文件传输。
一、Ubuntu上搭建tftp服务器
1 安装tftp服务
sudo apt-get install tftpd tftp openbsd-inetd
2 配置工作目录
sudo gedit /etc/inetd.conf
找到文件里以下部分
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
将tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp这一行解除注释(如果没有此行则进行添加)。
创建tftp服务器的文件目录
cd /srv
sudo mkdir tftp
sudo chmod 777 /srv/tftp
3 重启xinetd服务
sudo /etc/init.d/openbsd-inetd restart
4 本机测试
首先在tftp中新建一个文件
cd /srv/tftp
echo helloworld > helloworld.txt
cat helloworld.txt #查看helloworld.txt内容,看是否成功创建
然后进入到其他目录,例如home
cd ~
sudo tftp 你的PC机ip #进入tftp
tftp> get helloworld.txt #取helloworld.txt文件
tftp> quit
cat helloworld.txt #查看是否传输成功
二、Arm开发板上使用tftp下载
将远程主机上的/srv/tftp/helloworld.txt下载到开发板/opt/下:
tftp -l /opt/helloworld.txt -r /srv/tftp/helloworld.txt -g 你的PC机ip
注:tftp命令,-l后跟local file, -r后跟remote file,-g表示下载,-p表示上传。
如果下载不下来,用ping先检查网络的连通性,如果ping不通,将开发板的ip网段设到Ubuntu同一网段中去。
可使用命令:
ifconfig eth0 192.168.1.120 netmask 255.255.255.0 broadcast 192.168.1.255 up
上述命令中ip,netmask,broadcast根据自己Ubuntu上的进行相应更改。
也可编辑interfaces文件,vi /etc/network/interfaces:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
#以下按自己的实际情况改
address 192.168.1.120
netmask 255.255.255.0
gateway 192.168.1.255
编辑完毕重启网络服务即可。
service networking restart
网络编程中recvfrom阻塞接受问题
使用recvfrom阻塞接收时,网不通时会一直等待,若改成非阻塞的,亦不可靠。
可通过设置一个超时时间来实现
struct timeval tv_out;
tv_out.tv_sec = 3; //等待3秒
tv_out.tv_usec = 0;
setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,&tv_out, sizeof(tv_out))
小注
将持续更新。