Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1890274
  • 博文数量: 496
  • 博客积分: 12043
  • 博客等级: 上将
  • 技术积分: 4778
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-27 14:26
文章分类

全部博文(496)

文章存档

2014年(8)

2013年(4)

2012年(181)

2011年(303)

2010年(3)

分类: 嵌入式

2011-04-14 22:50:26

【背景】
由于想要在tq2440板子上用tftp下载kernel,所以要在自己的PC机的Ubuntu 10.10上安装tftp服务。
所以就去网上找了些教程,但是很悲剧,按照那些教程去操作,结果还都是无法正常运行tftp服务,最后还是从一个外国人的帖子中,最后解决了此问题的。现在记录一下所了解到内容。

截至目前2011-04-04,我用的Ubuntu 10.10,Ubuntu下面关于TFTP的程序,有三种:
1.tftp和tftpd
这个是最早的,最常用的。,其中tftp是client客户端,tftpd是server服务器端,d应该指的是daemon。
如果你要从别人的tftp服务器端上传/下载东西,就要用到tftp;如果你为别人提供tftp服务,供别人上传/下载东西,那就要安装tftpd服务程序。
如果安装tftp和tftpd,那么根据附录2说的:“因为tftp是要inetd来控制的,而debian类的系统,默认是没有安装inetd的,安装一下。” 所以,此处也要安装inetd,但是我这里发现Ubuntu 10.10里面,没有他们说的那个netkit-inetd:
  1. crifan@crifan-ubuntu10:~/develop$ sudo apt-get install netkit-inetd
  2. 正在读取软件包列表... 完成
  3. 正在分析软件包的依赖关系树
  4. 正在读取状态信息... 完成
  5. 软件包 netkit-inetd 是一个由下面的软件包提供的虚拟软件包:
  6. inetutils-inetd 2:1.6-3
  7. openbsd-inetd 0.20080125-4ubuntu2
  8. 请您明确地选择一个来进行安装。

  9. E: 软件包 netkit-inetd 没有可供安装的候选者
复制代码

而只有inetutils-inetd和openbsd-inetd,此处,我自己折腾tftp和tftpd的时候,装的是inetutils-inetd,但是却也一直没弄好,所以此处忽略不说。而openbsd-inetd,是我装的,可以正常使用的。具体方法下面会详细介绍。

2.加强版的tftp: atftp和atftpd
atftp即advanced tftp,加强了一些功能。这里我没用过,不多评价。

3. hpa版本的tftp:tftp-hpa和tftpd-hpa
我最后就是用的这个hpa版本的。
中间折腾过程翻来覆去弄了很多次,最后参考这里:

确定这样是可以安装成功的:

【Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本
1. 用新立得先去卸载tftp和tftpd(如果你安装的话),tftp-hpa和tftpd-pha(如果你安装的话)
系统 -> 系统管理 -> 新立得软件包管理器,即synaptic,
搜索 tftp,会找到和tftp相关的软件列表。
如果你已经装了tftp和tftpd,那么先用新立得去彻底删除他们。
如果也已经安装了tftp-pha和tftpd-hpa,那么也同样用新立得去彻底删除他们。
(注意,我之前就是用的命令行去装的tftp-hpa和tftpd-hpa,而安装他们的同时会自动卸载掉原先装过的tftp和tftpd,所以,我在新立得里面看到的是已经安装的tftp-hpa和tftpd-hpa,所以要先右键点击,选择彻底删除,然后选择应用,就可以去彻底删除了。)
2. 用新立得去安装tftp-hpa和tftpd-pha
同上,进入新立得,右键选中tftp-hpa和tftpd-pha,然后安装。
3. 安装openbsd-inetd
(此处搞不清是不是必须要装这个了,不过是反正是装了,现在的tftp是可以工作的,如果你也不确定要不要安装,那就也安装吧。。。)
我是用的命令行去安装的:
  1. crifan@crifan-ubuntu10:~/develop$ sudo apt-get install openbsd-inetd
复制代码

4.建立TFTP根目录及设置访问属性
去建立一个根目录,然后设置对应的访问属性:
  1. mkdir /home/crifan/develop/tftpboot
  2. cd /home/crifan/develop/
  3. chmod 777 tftpboot/
复制代码


其中:
(1)/home/crifan/develop/tftpboot是我的TFTP的根目录,你根据自己情况修改为你自己的根目录。
(2)chmod是去更改tftpboot这个TFTP根目录的访问属性,因为其他tftp用户需要使用put命令上传文件的话,那就需要write权限的,所以这里干脆省事,直接chmod 777,添加所有权限(读+写+执行)。

5. 更改配置文件/etc/default/tftpd-hpa
sudo gedit /etc/default/tftpd-hpa
去修改配置文件,修改好后,内容如下:
  1. # /etc/default/tftpd-hpa
  2. RUN_DAEMON="yes"
  3. OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
  4. TFTP_USERNAME="crifan"
  5. TFTP_DIRECTORY="/home/crifan/develop/tftpboot"
  6. TFTP_ADDRESS="0.0.0.0:69"
  7. TFTP_OPTIONS="--secure"
复制代码

其中:
(1)
OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
中的参数含义为:
-l Run the server in standalone (listen) mode, rather than run from inetd. In listen mode, the -t option is ignored, and the -a option can be used to  specify a specific local address or port to listen to.

-a [address][:port]
Specify a specific address and port to listen to when called with the -l option. The default is to listen to the tftp port specified in /etc/services on all local addresses.

-c Allow new files to be created. By default, tftpd will only allow upload of files that already exist. Files are created with default permissions allowing anyone to read or write them, unless the -p or -U options are specified.

-s (决定tftp根目录)Change root directory on startup. This means the remote host does not need to pass along the directory as part of the trans-fer, and may add security. When -s is specified, exactly one directory should be specified on the command line. The use of this option is recommended for security as well as compatibility with some boot ROMs which cannot be easily made to include a directory name in its request.

注意其中的-c, "-c为可创建新文件,若无此参数,put命令则可能出现错误提示,此时只能覆盖原有文件不能创建新文件;"

OPTIONS参数后面跟的是你的TFTP的根目录。
TFTP_USERNAME是用户名,我这里的是"crifan",你根据自己情况修改。
TFTP_DIRECTORY后面也是同样的根目录 "/home/crifan/develop/tftpboot",你根据自己情况修改。

(2)ubuntu10.04下的tftp-hpa配置文件和之前不一样,之前的是类似这种:
  1. #Defaults for tftpd-hpa
  2. RUN_DAEMON="yes"
  3. OPTIONS="-l -c -s /tftpboot"
复制代码

Ubuntu 10.10中安装之后的是这种:
  1. # /etc/default/tftpd-hpa
  2. TFTP_USERNAME="tftp"
  3. TFTP_DIRECTORY="/tftpboot"
  4. TFTP_ADDRESS="0.0.0.0:69"
  5. TFTP_OPTIONS="-l -c -s /tftpboot"
复制代码

而此处上面所用的配置,既有新的也有旧的,具体为何是这样,偶也不太清楚,只是参考上面那人的帖子而已。其他人有兴趣可以自己测试,删除旧的配置后是否同样可以工作。

6.重启tftp服务
  1. crifan@crifan-ubuntu10:~/develop$ sudo service tftpd-hpa restart
  2. tftpd-hpa start/running, process 3907
复制代码
其中:
(1)关于重启 某个服务,之前的Linux(Ubuntu是10.10之前)都是这样操作的:
sudo /etc/init.d/XXX reload
对于inetd来说,就是:
sudo /etc/init.d/inetd reload
现在新的LUbuntu 10.10中,是统一成调用service来操作了:
sudo service XXX restart
其中,启动和停止对应的是start和stop。
(2)记得不要少了sudo,否则“stop: Rejected send message”的错误。
(3)【确认tftp服务是否已经开启】
查看tftp相关进程:
  1. crifan@crifan-ubuntu10:~/develop$ ps aux |grep tftp
  2. root 3826 0.0 0.0 2352 120 ? Ss 14:27 0:00 /usr/sbin/in.tftpd --listen --user crifan --address 0.0.0.0:69 --secure /home/crifan/develop/tftpboot
  3. crifan 3828 0.0 0.0 5628 768 pts/0 S+ 14:27 0:00 grep --color=auto tftp
复制代码

如果能看到像上面的 /usr/sbin/in.tftpd已经启动,就说明tftp服务已经开启了。
此处可以看到:
--listen就是对应的配置文件中的参数 -l
--user crifan就是对应配置文件中的参数 TFTP_USERNAME="crifan"
/home/crifan/develop/tftpboot就是对应的配置文件中的参数 TFTP_DIRECTORY=" /home/crifan/develop/tftpboot"

7.验证tftp是否生效
  1. crifan@crifan-ubuntu10:~/develop$ tftp 192.168.1.101
  2. tftp>get u-boot.bin
  3. tftp>quit
复制代码


其中:
(1)192.168.1.101是我的机子的ip,可以通过ifconfig查得。你此处要改为你自己的机子的IP。当然你也可以直接写127.0.0.1,这个地址始终代表了你的本机IP。
(2)get是tftp的命令,即从tftp服务器中下载获得文件。你可以输入?查看其他命令。常见的命令有get下载文件,put上传文件等等。u-boot.bin是我已经存在在tftp根目录下面的文件。
(3)quit是退出tftp。

【总结】
看着步骤很复杂,实际归纳起来很简单,那就是用新立得synaptic去安装tftp-pha和tftpd-hpa,然后改一下配置,重启一下服务,然后验证一下tftp是否工作即可。
【后续】
经过验证tftp已经生效,然后回到开发板上就可以用tftp下载文件了:
  1. EmbedSky> tftp 0x30010000 u-boot.bin
  2. dm9000 i/o: 0x20000300, id: 0x90000a46
  3. MAC: 0a:1b:2c:3d:4e:5f
  4. TFTP from server 192.168.1.101; our IP address is 192.168.1.120
  5. Filename 'u-boot.bin'.
  6. Load address: 0x30010000
  7. Loading: T ###############
  8. done
  9. Bytes transferred = 207396 (32a24 hex)
复制代码


【另外】
关于Linux下的图形界面GUI版本的TFTP,网上找到了这个:


暂未试用,有机会试试。

【引用】
1. TFTP will not start (command returns a "rejected send message")

2.ubuntu中配置tftp服务
http://hi.baidu.com/wangy0919/blog/item/3808eaa1388bd389471064c2.html
3.Tftpd-hpa

4.ubuntu10.04下的tftp-hpa配置文件不一样了,如何修改阿?
阅读(1581) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

buaaroid2012-03-08 15:21:06

3. 安装openbsd-inetd
(此处搞不清是不是必须要装这个了,不过是反正是装了,现在的tftp是可以工作的,如果你也不确定要不要安装,那就也安装吧。。。)
我是用的命令行去安装的:

crifan@crifan-ubuntu10:~/develop$ sudo apt-get install openbsd-inetd

不必装安装 openbsd-inetd 。

crifan2011-08-07 10:53:30

这哥们,转我的帖子,也不注明转载,不厚道啊。