基于ubuntu10.04的tftp开发环境搭建

用OMAPL138这段时间以来,深深体会ARM9+DSP的强大数据采集和处理能力,难怪TI这一年也希望OMAPL138能在国内推广开来,现在我来拿国内一家做OMAPL138很到位的广州创龙电子公司的SOM-OMAPL138开发套件来说说,谈谈其基于ubuntu10.04的tftp开发环境搭建。

开发平台:广州创龙电子公司的OMAPL138开发板平台

开发环境:Ubuntu10.04(虚拟机建议采用VM7.0或以上)


首先我先说说tftp简介。

简单文件传输协议或称小型文件传输协议(英文:Trivial File Transfer Protocol,缩写tftp),是一种简化的文件传输协议,于1980年定义。

tftp是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式Linux的tftp最常用来完成开发板和开发环境Linux系统之间的的文件传输功能,避免了频繁的U盘拷贝的过程。Linux下的tftp开发环境建立包括两个方面:一是Linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。本文将介绍基于ubuntu10.04发行版的Linux服务器端tftp-server的配置和在主机和目标机之间的tftp文件传输方法。


        接下来,我给大家详细的简介TFTP开发环境的搭建步骤:

1.Linux服务器端tftp-server的配置

1.1安装tftp所需的软件

安装软件前务必保证虚拟机可以上网。虚拟机要访问网络必须在“Virtual Machine setting”菜单下选择NetworkAdapter->Network connection->NAT:Used to share the host's IP address,设置如下图:

需要安装tftp-hpa和tftpd-hpa(前者是客户端,后者是服务程序)以及xinetd。在终端下输入如下命令安装tftp-hpa、tftpd-hpa和xinetd:

tl@tl-desktop:~$sudo apt-get install tftp-hpa

tl@tl-desktop:~$sudo apt-get install tftpd-hpa

tl@tl-desktop:~$sudo apt-get install xinetd 

1.2配置相关服务文件

进入根目录下的etc文件夹(cd /etc/),首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话运行“cat xinetd.conf”查看其内容,看是否与下面的一致,若不一致则运行“sudo gedit xinetd.conf”修改为相同,内容如下图:


打开配置文件tftpd-hpa命令如下:

tl@tl-desktop:/etc$sudo gedit /etc/default/tftpd-hpa

将内容修改成:
# /etc/default/tftpd-hpa 

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/tl/tftpboot"

TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s" 

修改完成后如下图:



TFTP_DIRECTORY="/home/tl/tftpboot":表示tftp服务器的工作目录。

保存退出,然后执行命令“mkdir –p /home/tl/tftpboot”新建tftp工作目录,并修改权限为777,命令为“sudo chmod 777 /home/tl/tftpboot”。777是最松的权限,这样不仅可以允许别的主机或者目标机下载同时允许上传文件。

然后进入/etc下面的xinetd.d文件夹(cd/etc/xinetd.d),查看是否有一个tftp文件,如果没有就运行“sudo gedit tftp”新建一个并输入以下内容,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
service tftp
        {
            socket_type = dgram
            wait = yes
            disable = no
            user = root
            protocol = udp
            server = /usr/sbin/in.tftpd
            server_args = -s /tftpboot -c
            #log_on_success += PID HOSTDURATION
            #log_on_failure += HOST
            per_source = 11
            cps =100 2
            flags =IPv4
        }



其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的。然后保存文件,并退出编辑。

1.3重新启动服务

执行“sudo service tftpd-hpa restart”重启tftpd-hpa,,提示如下图:


执行“sudo /etc/init.d/xinetd reload”重新加载一下xinetd进程,提示如下图:


执行“sudo /etc/init.d/xinetd restart”重启xinetd服务,提示如下图:


每次修改完配置文件后,都需要重新启动一下服务。

1.4本地tftp文件传输功能测试

首先在/home/tl/tftpboot中新建一个文件test,在其中随便输入内容,例如内容如下图:


然后进入一个不是“/home/tl/tftpboot”的目录。再在终端中输入“sudo tftplocalhost”,进入tftp命令符下,如下图:


可以在其中输入help查看命令和命令的作用,提示如下:


接着输入 “get test”再按回车,如果没有任何提示,就说明传输成功了。然后输入 q 退出tftp命令符,如下图:


在当前目录下运行“ls”就可以看到一个test文件,可以使用“cat test”命令查看其内容,可以发现是与开始新建的那个test的内容是一致的。


修改test文件后,可以在tftp命令中输入 “put test”,把修改过的test文件上传到服务器文件夹中。

2开发板文件系统和虚拟机之间tftp文件传输功能实现

开发板和Windows主机先通过直连网线插到路由器,这样Winsows主机、虚拟机、开发板就相当于在同一个局域网了。若没有路由器,也可以通过交叉网线将开发板和Windows主机互联。

2.1查看PC机Windows主机的IP地址

在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,再输入执行"ipconfig"查看Windows主机的IP地址,如下图所示:



在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,再输入执行"ipconfig"查看Windows主机的IP地址,如下图所示:


2.2修改开发板的IP地址

开发板上电,进入开发板系统后设置IP的前三个字段和Windows主机的一样,最后一个字段务必不能相同,同时设置子网掩码为一致。只有前三个在字段和子网掩码相同,Windows主机、Ubuntu虚拟机、开发板三者之间才能互相ping通。例如,针对Windows主机的IP:192.168.0.2,子网掩码:255.255.255.0,可以设置开发板的IP地址为:192.168.0.8,子网掩码:255.255.255.0,设置命令如下:

root@tl:~# ifconfigeth0 192.168.0.8 netmask 255.255.255.0

         可以通过ifconfig命令查看修改后的IP和子网掩码等信息,操作如下图:


一种更简便的方法是使用“udhcpc”命令让开发板自动获取路由器给它分配的IP,如下图所示:


2.3设置Ubuntu虚拟机IP地址

在设置之前先将虚拟机和主机的网络连接方式设置为桥接,点击虚拟机"VM->Setting",弹出以下设置界面:


点击“Network Adapter->Network Connection->Bridged”选项,如下图所示:


点击OK,完成设置。、

         进入虚拟机Ubuntu系统后设置IP的前三个字段和Windows主机的一样,最后一个字段务必不能相同,同时设置子网掩码为一致。只有前三个在字段和子网掩码相同,Windows主机、Ubuntu虚拟机、开发板三者之间才能互相ping通。例如,针对Windows的IP:192.168.0.2,子网掩码:255.255.255.0,可以设置虚拟机的的IP地址为:192.168.0.5,子网掩码:255.255.255.0。

         执行以下命令配置IP:

tl@tl-desktop:~$ sudoifconfig eth0 192.168.0.5 netmask 255.255.255.0

         通过ifconfig命令查看修改后的IP和子网掩码等信息,结果如下图:


2.4Windos主机、开发板、虚拟机三者之间ping命令测试

2.4.1虚拟机ping开发板和Windows主机

在虚拟机分别执行以下两个命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。

tl@tl-desktop:~$ ping 192.168.0.8

tl@tl-desktop:~$ ping 192.168.0.2

         成功ping通提示如下图:


备注:

         (1)假如虚拟机出现“From *.*.*.*icmp_seq=1 Destination Host Unreachable”的错误提示,说明了没有成功ping通,请检查网线和地址的正确性。

         (2)假如通过(1)步骤还是存在错误,请运行“ifconfig”命令查看ip,有些用户会提示如下图:


可以看到网络名字不是eth0而是eth2,这个是由于用户手动设置了网络名字的原因,MAC地址被缓存了,配置网络的时候可能会出现“eth0: ERROR while gettinginterface flags: No such device。Network service start”,真正原因是MAC地址缓存了,所以eth0配置的MAC打不到,就是提示以上内容。

    解决办法:在虚拟机下执行命令“sudorm /etc/udev/rules.d/70-persistent-net.rules”,然后关闭虚拟机,重启Windows系统,再开启虚拟机重新设置虚拟机IP即可。


2.4.2主机ping Ubuntu虚拟机和开发板

将开发板和主机用网线连接起来,在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,分别执行以下两个命令:

ping 192.168.0.5(请以实际主机IP作参考)

ping 192.168.0.8(请以实际主机IP作参考)

成功ping通提示如下图:


2.4.3虚拟机和Windows主机

在开发板分别执行以下两个命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。

root@tl:~# ping192.168.0.5

root@tl:~# ping192.168.0.2

         成功ping通提示如下图:


2.5开发板下载虚拟机tftp服务器文件

在开发板/home/tl目录下执行以下命令:

root@tl:/home/tl# tftp-g -r test 192.168.0.5

-g:代表get,下载文件

-r:代表remote,远程服务器

test:远程服务器tftpboot目录下的文件名字

192.168.0.5:远程服务器的ip地址,这里指Ubuntu虚拟机

         执行命令后可以在当前目录看到test文件,使用“cat test”命令查看其内容是否和服务器tftpboot目录下的test文件内容一样,结果如下图所示:


3.tftp下载内核到内存

通过tftp在uboot中下载内核文件,可以避免频繁的U盘拷贝和FLASH烧写,特别是用于测试的内核文件。

3.1在uboot中设置加载文件系统参数

在下载内核前,先设置加载文件系统的参数,决定文件系统的加载方式,这样就在下载内核后可以直接启动文件系统。

(1)SD卡启动文件系统设置

  先插上已经正常使用的SD卡,在uboot执行以下命令:

U-Boot >setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3 mem=128M


U-Boot >saveenv


(2)NFS起根文件系统设置

         此设置见《基于ubuntu10.04的nfs开发环境搭建》的“nfs起根文件系统”章节。

3.2在uboot中设置网络环境变量

开发板上电后,按任意键进入uboot命令行,输入以下命令设置虚拟机TFTP服务器的IP地址变量serverip:

U-Boot > setenvserverip 192.168.0.5

         输入以下命令设置开发板的IP地址变量ipaddr:

U-Boot > setenvipaddr 192.168.0.8

         另外一个变量ethaddr已经在uboot里面写好了,无需设置。设置会提示无法覆盖,如下图所示:


         执行以下命令保存环境变量:

U-Boot >saveenv

         保存后重新上电就不用再次设置了,提示如下图:


执行以下命令测试网络的连通性:

U-Boot > ping192.168.0.5

         若提示“host *.*.*.*is alive”说明网络畅通,如下图所示:



3.3在uboot中通过tftp下载内核文件到内存

保证有测内核文件uImage在虚拟机的tftp服务器目录“/home/tl/tftpboot”,如下图所示:


在uboot中输入以下命令下载内核文件:

U-Boot > tftpc0700000 uImage

c0700000:指定的运行内存地址

uImage:tftp服务器中的内核镜像

         成功下载图示如下:


执行“bootm c0700000”命令运行刚才下载的内核文件,结果如下图:


需要上电自动通过tftp下载uImage的客户,可以在uboot里面设置bootcmd参数,设置命令如下:

U-Boot > setenvbootcmd 'tftp c0700000 uImage;bootm c0700000'

U-Boot > saveenv

         操作如下图所示:


重启后就自动进入SD卡或者nfs服务器的文件系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值