OMAPL138和Ubuntu1004的tftp开发环境搭建.docx
《OMAPL138和Ubuntu1004的tftp开发环境搭建.docx》由会员分享,可在线阅读,更多相关《OMAPL138和Ubuntu1004的tftp开发环境搭建.docx(18页珍藏版)》请在冰豆网上搜索。
OMAPL138和Ubuntu1004的tftp开发环境搭建
目录
1tftp简介2
2Linux服务器端tftp-server的配置2
2.1安装tftp所需的软件2
2.2配置相关服务文件3
2.3重新启动服务6
2.4本地tftp文件传输功能测试7
3开发板文件系统和虚拟机之间tftp文件传输功能实现9
3.1查看PC机Windows主机的IP地址10
3.2修改开发板的IP地址10
3.3设置Ubuntu虚拟机IP地址12
3.4Windos主机、开发板、虚拟机三者之间ping命令测试15
3.5开发板下载虚拟机tftp服务器文件19
4tftp下载内核到内存20
4.1在U-Boot中设置加载文件系统参数20
4.2在U-Boot中设置网络环境变量21
4.3在U-Boot中通过tftp下载内核文件到内存22
1tftp简介
简单文件传输协议或称小型文件传输协议(英文:
TrivialFileTransferProtocol,缩写tftp),是一种简化的文件传输协议,于1980年定义。
tftp是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。
嵌入式Linux的tftp最常用来完成开发板和开发环境Linux系统之间的的文件传输功能,避免了频繁的U盘拷贝的过程。
Linux下的tftp开发环境建立包括两个方面:
一是Linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。
本文将介绍基于Ubuntu10.04发行版的Linux服务器端tftp-server的配置和在主机和目标机之间的tftp文件传输方法。
2Linux服务器端tftp-server的配置
2.1安装tftp所需的软件
安装软件前务必保证虚拟机可以上网。
虚拟机要访问网络必须在“VirtualMachinesetting”菜单下选择NetworkAdapter->Networkconnection->NAT:
Usedtosharethehost'sIPaddress,设置如下图:
图1
需要安装tftp-hpa和tftpd-hpa(前者是客户端,后者是服务程序)以及xinetd。
在终端下输入如下命令安装tftp-hpa、tftpd-hpa和xinetd:
Host#sudoapt-getinstalltftp-hpa
Host#sudoapt-getinstalltftpd-hpa
Host#sudoapt-getinstallxinetd
2.2配置相关服务文件
进入根目录下的etc文件夹(cd/etc/),首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话运行“catxinetd.conf”查看其内容,看是否与下面的一致,若不一致则运行“sudogeditxinetd.conf”修改为相同,内容如下图:
图2
打开配置文件tftpd-hpa命令如下:
Host#sudogedit/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"
修改完成后如下图:
图3
TFTP_DIRECTORY="/home/tl/tftpboot":
表示tftp服务器的工作目录。
保存退出,然后执行命令“mkdir–p/home/tl/tftpboot”新建tftp工作目录,并修改权限为777,命令为“sudochmod777/home/tl/tftpboot”。
777是最松的权限,这样不仅可以允许别的主机或者目标机下载同时允许上传文件。
然后进入/etc下面的xinetd.d文件夹(cd/etc/xinetd.d),查看是否有一个tftp文件,如果没有就运行“sudogedittftp”新建一个并输入以下内容,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
servicetftp
{
socket_type=dgram
wait=yes
disable=no
user=root
protocol=udp
server=/usr/sbin/in.tftpd
server_args=-s/home/tl/tftpboot-c
#log_on_success+=PIDHOSTDURATION
#log_on_failure+=HOST
per_source=11
cps=1002
flags=IPv4
}
修改完成如下图:
图4
其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的。
然后保存文件,并退出编辑。
2.3重新启动服务
执行“sudoservicetftpd-hparestart”重启tftpd-hpa,,提示如下图:
图5
执行“sudo/etc/init.d/xinetdreload”重新加载一下xinetd进程,提示如下图:
图6
执行“sudo/etc/init.d/xinetdrestart”重启xinetd服务,提示如下图:
图7
每次修改完配置文件后,都需要重新启动一下服务。
2.4本地tftp文件传输功能测试
首先在/home/tl/tftpboot中新建一个文件test,在其中随便输入内容,例如内容如下图:
图8
然后进入一个不是“/home/tl/tftpboot”的目录。
再在终端中输入“sudotftplocalhost”,进入tftp命令符下,如下图:
图9
可以在其中输入help查看命令和命令的作用,提示如下:
图10
接着输入“gettest”再按回车,如果没有任何提示,就说明传输成功了。
然后输入q退出tftp命令行,如下图:
图11
在当前目录下运行“ls”就可以看到一个test文件,可以使用“cattest”命令查看其内容,可以发现是与开始新建的那个test的内容是一致的。
图12
修改test文件后,可以在tftp命令中输入“puttest”,把修改过的test文件上传到服务器文件夹中。
3开发板文件系统和虚拟机之间tftp文件传输功能实现
开发板和Windows主机先通过直连网线插到路由器,这样Winsows主机、虚拟机、开发板就相当于在同一个局域网了。
若没有路由器,也可以通过交叉网线将开发板和Windows主机互联。
3.1查看PC机Windows主机的IP地址
在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,再输入执行"ipconfig"查看Windows主机的IP地址,如下图所示:
图13
可以看到“本地连接”IPv4字段是:
192.168.0.2,这是主机的IP地址,子网掩码是:
255.255.255.0,不同主机的IP是不一样的。
3.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,设置命令如下:
Target#ifconfigeth0192.168.0.8netmask255.255.255.0
可以通过ifconfig命令查看修改后的IP和子网掩码等信息,操作如下图:
图14
一种更简便的方法是使用“udhcpc”命令让开发板自动获取路由器给它分配的IP,如下图所示:
图15
3.3设置Ubuntu虚拟机IP地址
在设置之前先将虚拟机和主机的网络连接方式设置为桥接,点击虚拟机"VM->Setting",弹出以下设置界面:
图16
点击“NetworkAdapter->NetworkConnection->Bridged”选项,如下图所示:
图17
点击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:
Host#sudoifconfigeth0192.168.0.5netmask255.255.255.0
通过ifconfig命令查看修改后的IP和子网掩码等信息,结果如下图:
图18
3.4Windos主机、开发板、虚拟机三者之间ping命令测试
Ubuntu虚拟机ping开发板和Windows主机
在虚拟机分别执行以下两个命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。
Host#ping192.168.0.8
Host#ping192.168.0.2
成功ping通提示如下图:
图19
备注:
(1)假如虚拟机出现“From*.*.*.*icmp_seq=1DestinationHostUnreachable”的错误提示,说明了没有成功ping通,请检查网线和地址的正确性。
(2)假如通过
(1)步骤还是存在错误,请运行“ifconfig”命令查看ip,有些用户会提示如下图:
图20
可以看到网络名字不是eth0而是eth2,这个是由于用户手动设置了网络名字的原因,MAC地址被缓存了,配置网络的时候可能会出现“eth0:
ERRORwhilegettinginterfaceflags:
Nosuchdevice。
Networkservicestart”。
解决办法:
在虚拟机下执行命令“sudorm/etc/udev/rules.d/70-persistent-net.rules”,然后关闭虚拟机,重启Windows系统,再开启虚拟机重新设置虚拟机IP即可。
(3)如果虚拟机里能ping同本机,而本机却ping不通虚拟机,或者虚拟机不能ping通本机,可能有如下原因:
虚拟机防火墙禁ping,请关闭虚拟机防火墙重试;桥接设置的ip有冲突或者是虚拟机桥接服务不正常。
Windows主机pingUbuntu虚拟机和开发板
将开发板和主机用网线连接起来,在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,分别执行以下两个命令:
ping192.168.0.5(请以实际主机IP作参考)
ping192.168.0.8(请以实际主机IP作参考)
成功ping通提示如下图:
图21
开发板pingUbuntu虚拟机和Windows主机
在开发板分别执行以下两个命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。
Target#ping192.168.0.5
Target#ping192.168.0.2
成功ping通提示如下图:
图22
3.5开发板下载虚拟机tftp服务器文件
在开发板/home/tl目录下执行以下命令:
Target#tftp-g-rtest192.168.0.5
-g:
代表get,下载文件
-r:
代表remote,远程服务器
test:
远程服务器tftpboot目录下的文件名字
192.168.0.5:
远程服务器的ip地址,这里指Ubuntu虚拟机
执行命令后可以在当前目录看到test文件,使用“cattest”命令查看其内容是否和服务器tftpboot目录下的test文件内容一样,结果如下图所示:
图23
4tftp下载内核到内存
通过tftp在U-Boot中下载内核文件,可以避免频繁的U盘拷贝和FLASH烧写,特别是用于测试的内核文件。
4.1在U-Boot中设置加载文件系统参数
在下载内核前,先设置加载文件系统的参数,决定文件系统的加载方式,这样就在下载内核后可以直接启动文件系统。
(1)SD卡启动文件系统设置
先插上已经正常使用的SD卡,在U-Boot执行以下命令:
U-Boot>setenvbootargsconsole=ttyS2,115200n8root=/dev/mmcblk0p2rwrootfstype=ext3mem=128M
图24
U-Boot>saveenv
图25
(2)NFS起根文件系统设置
此设置见《基于Ubuntu10.04的nfs开发环境搭建》的“nfs起根文件系统”章节。
4.2在U-Boot中设置网络环境变量
开发板上电后,按任意键进入U-Boot命令行,输入以下命令设置虚拟机TFTP服务器的IP地址变量serverip:
U-Boot>setenvserverip192.168.0.5
输入以下命令设置开发板的IP地址变量ipaddr和ethaddr:
U-Boot>setenvipaddr192.168.0.8
U-Boot>setenvethaddr00:
01:
02:
03:
04:
05
假如变量ethaddr已经设置过,重新设置可能会提示无法覆盖,无需理会,如下图所示:
图26
然后再执行以下命令保存环境变量:
U-Boot>saveenv
保存后重新上电就不用再次设置了,提示如下图:
图27
执行以下命令测试网络的连通性:
U-Boot>ping192.168.0.5
若提示“host*.*.*.*isalive”说明网络畅通,如下图所示:
图28
4.3在U-Boot中通过tftp下载内核文件到内存
保证有测内核文件uImage在虚拟机的tftp服务器目录“/home/tl/tftpboot”,如下图所示:
图29
在U-Boot中输入以下命令下载内核文件:
U-Boot>tftpc0700000uImage
c0700000:
指定的运行内存地址
uImage:
tftp服务器中的内核镜像
成功下载图示如下:
图30
执行“bootmc0700000”命令运行刚才下载的内核文件,结果如下图:
图31
需要上电自动通过tftp下载uImage的客户,可以在U-Boot里面设置bootcmd参数,设置命令如下:
U-Boot>setenvbootcmd'tftpc0700000uImage;bootmc0700000'
U-Boot>saveenv
操作如下图所示:
图32
重启后就自动进入SD卡或者nfs服务器的文件系统,可以通过前面提到的U-Boot参数设置决定。