Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143690
  • 博文数量: 101
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 9
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-17 08:11
文章分类
文章存档

2017年(91)

2016年(10)

我的朋友

分类: 嵌入式

2016-04-15 13:52:54

用tftp连接主机和开发板的学习过程

交叉编译环境建立好了,总要琢磨着干点更好玩的吧,下一个目标就是要能把交叉编译成功的例子下载到学习板上来看看运行效果了。

1. 用minicom连接串口:
fc12上默认是没有安装minicom的,yum安装一个很简单的了。
$ yum install minicom
这样minicom就安装成功了。

运行:
$ minicom -s
出现如下界面:

            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

向下移动光标到 Serial port setup 上,回车,进入Serial port setup 配置界面,如下:
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+

配置完成以后直接保存退出就ok了。
以上由于我是用usb转串口的,所以,需要写成这样“A -Serial Device : /dev/ttyUSB0“。
然后直接输入:
$ minicom
就可以进入到开发板的环境中了。

2. 用tftp来下载程序:
首先配置主机的IP地址和开发板在同一个网段,我就配成了192.168.1.1,
直接在开发板环境下输入tftp的命令,提示:
[root@FriendlyARM /]# tftp                                                     
BusyBox v1.13.3 (2009-03-25 15:48:45 CST) multi-call binary                    
                                                                               
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                                 
                                                        

跟在PC主机环境下还不一样的。
跟据Usage提示,我需要把主机上的hello程序下载到开发板上,于是就输入了:
[root@FriendlyARM /my_tt]# tftp -g -r hello 192.168.1.1
半分钟以后,屏幕上提示:
tftp: timeout 

也不知道什么原因,就在主机上试一下了。
在主机上,fc12默认也是没有安装tftp客户端的,后来发现tftp-server也是没有安装的,就直接用yum安装一下吧。
安装好tftp-server,用vi配置/etc/xinetd.d/tftp 文件后如下,
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftp_server_root -c
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

然后建立一个tftp_server_root文件夹在/下面。

说明:修改项server_args= -s         -c,其中处可以改为你的tftp-server的根目录,参数-s指定chroot-c指定了可以创建文件。

然后重新启动tftp-server:

#service xinetd restart

在主机上测试一下:
$ tftp 192.168.1.1
出现 tftp> 这样的二级提示符,用
get hello
put
查看成功与否。

接下来就是从把程序下载到开发板上去了。
在开发板上运行:
[root@FriendlyARM /my_tt]# tftp -g -r hello 192.168.1.1
还是显示 tftp: timeout
晕了,刚才在主机上试验还是好的阿,怎么到开发板上就不行了阿。

没有办法就只能抓包了,运行:
$ tcpdump -i eth0 -w dump1.cap
同时在开发板上运行刚才的命令,出现 tftp: timeout的时候停止抓包,
然后用:
$ tcpdump -r dump1.cap 打开看到
[root@localhost tmp]# tcpdump -r dump1.cap
reading from file dump1.cap, link-type EN10MB (Ethernet)
23:27:24.372593 ARP, Request who-has 192.168.1.1 tell 192.168.1.230, length 46
23:27:24.372628 ARP, Reply 192.168.1.1 is-at 00:26:9e:e4:2e:4e (oui Unknown), length 28
23:27:24.372800 IP 192.168.1.230.44845 > 192.168.1.1.tftp:  14 RRQ "hello" octet
23:27:24.372849 IP 192.168.1.1 > 192.168.1.230: ICMP host 192.168.1.1 unreachable - admin prohibited, length 50
………………
23:27:32.046571 IP 192.168.1.230.44845 > 192.168.1.1.tftp:  14 RRQ "hello" octet
23:27:32.046619 IP 192.168.1.1 > 192.168.1.230: ICMP host 192.168.1.1 unreachable - admin prohibited, length 50


主机收到请求,但是没有给目标机回复,考虑到防火墙的问题,检查了一下iptables,太多的规则了,没有细看,直接运行:
$ iptables -F 全部清除,
然后再次运行:
[root@FriendlyARM /my_tt]# tftp -g -r hello 192.168.1.1
成功下载!
然后修改一下文件的权限,就可以了。
现在就像在主机上一样运行hello测试程序,见到了熟悉的"hello world!"的字样。



欢迎交流!
互相学习,共同提高!
阅读(1860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~