在针对嵌入式开发中,常常我们需要事先配置好一些网络服务,才能使开发板方便的下载或挂载主机的内核和文件系统。系统在启动BootLoader后,通过tftp来下载Linux内核镜像到内存运行,然后通过NFS来启动Linux主机上的目标文件系统,并通过DHCP服务器来为开发板分配IP地址。这里仅仅是搭建服务器环境。在配置TFTP服务一般遇到的问题都是比较多的。经过几次失败尝试后,总结了以下经验以共享:

 

一、检查是否已经安装好TFTP

caoyi@ubuntu:/home/study$ sudo netstat -nulg | grep 69
udp        0      0 0.0.0.0:69              0.0.0.0:*

或者

caoyi@ubuntu:/home/study$ sudo netstat -au | grep tftp
udp        0      0 *:tftp                  *:*   

则表示已经安装成功,如果没有出现以上信息或当行信息都表示有错误!

一、检查是否安装相关服务(一般没有)

首先得确定自己的主机或虚拟机已经连上网了,并且得确定下载过程是可靠的。

(1)、安装tftp(客户端)、tftpd(服务端)

caoyi@ubuntu:/home/study$ sudo apt-get install tftpd tftp

 

(2)、安装tftpd-hpatftp-hpa(功能增强的TFTP服务器)

caoyi@ubuntu:/home/study$ sudo apt-get install tftpd-hpa tftp-hpa

 

(3)、安装openbsd-inetd xinetd(网络管理服务。Ubuntu中,tftp不能独立运行,需要网络管理服务器 支持。)

caoyi@ubuntu:/home/study$ sudo apt-get install xinetd openbsd-inetd

二、配置TFTP服务器

(1)、配置tftpd-hpa(服务端)

caoyi@ubuntu:/home/study$ sudo vim /etc/default/tftpd-hpa

  1 # /etc/default/tftpd-hpa

2 RUN_DAEMON="yes"

3 TFTP_USERNAME="tftp"

4 TFTP_DIRECTORY="/tftpboot"                    这里为TFTP服务器目录

5 TFTP_ADDRESS="0.0.0.0:69"

6 TFTP_OPTIONS="-l -s /tftpboot"

(2)、配置inetd
 
caoyi@ubuntu:/home/study$ sudo vim /etc/inetd.conf                  

tftp  dgram   udp  wait nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /tftpboot  (在最末添加之)   

(3)、建立配置文件
/etc/xinetd.d/下建立一个配置文件tftp

sudo vim tftp

在文件中输入以下内容:
service tftp
{

socket_type = dgram
protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /tftpboot

disable = no

per_source = 11

cps = 100 2

flags = IPv4
}
保存退出

 

(4)、重启TFTP相关服务

 

  caoyi@ubuntu:/home/study$  sudo /etc/init.d/openbsd-inetd reload

     * Reloading internet superserver inetd                                  [ OK ]

caoyi@ubuntu:/home/study$  sudo /etc/init.d/openbsd-inetd restart
   * Restarting internet superserver inetd                                    [ OK ]

caoyi@ubuntu:/home/study$ sudo service tftpd-hpa restart   (如果没有反应,应重新安装sudo apt-get install tftpd-hpa

tftpd-hpa start/running

caoyi@ubuntu:/home/study$ sudo /etc/init.d/xinetd restart
     * Stopping internet superserver xinetd                                  [ OK ]
     * Starting internet superserver xinetd                                    [ OK ]

三、测试

(1)、在本地根目录下建立我们的TFTP服务器目录

caoyi@ubuntu:/home/study$ cd /

caoyi@ubuntu:/home/study$ sudo mkdir tftpboot

然后,放置一些测试文件,我这里放的是uImage 和 空文件a.c

  caoyi@ubuntu:/home/study$ sdo chmod 777 -R tftpboot

  caoyi@ubuntu:/home/study$ ls /tftpboot  

       a.c  uImage

(2)、进入/home目录下载/tftpboot/目录下的uImage文件(前面设置好了/tftpboot/目录为TFTP默认服务目录):

caoyi@ubuntu:/home/study$ sudo tftp 127.0.0.1
tftp> get uImage
Received 1508808 bytes in 0.2 seconds
tftp> quit
caoyi@ubuntu:/home/study$ ls
uImage
然后进行对/tftpboot/目录上传文件

caoyi@ubuntu:/home/study$ sudo tftp 127.0.0.1
tftp> put b.c
Error code 2: Access violation

(注意:当对TFTP文件进行上传是,应该在/tftpboot/目录下要有一个待上传同名文件)

(3)、在前面我的/tftpboot/目录中有一个a.c的空文件,那么我就可以对它上传一个名字为a.c的文件
caoyi@ubuntu:/home/study$ sudo tftp 127.0.0.1
tftp> put a.c
Sent 15 bytes in 0.0 seconds
tftp> quit
caoyi@ubuntu:/home/study$

(4)、在开发板上测试,首先设置好参数自动下载:然后boot

FS2410# boot
TFTP from server 192.168.7.112; our IP address is 192.168.7.239
Filename 'uImage'.
Load address: 0x30800000
Loading: #################################################################
         ######################################
done

 

至此关于LinuxTFTP服务配置完成!其间也会出现一些因版本或其它的错误,应该重复的确定你已经安装好所有的服务,然后不断重启,测试!

 

 

Logo

更多推荐