1. 实验目的
搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs。用makefile 编译几个文件,在实验台上运行。
2. 实验内容
1) 安装ubuntu12.04
2) minicom端口配置
3) TFTP服务配置
4) NFS服务的配置。
5) 安装交叉编译器
6) 运行helloworld
3. 主要仪器设备
1) 笔记本,安装Ubuntu12.04系统。
2) 英培特eduk4-s3c2410试验平台
4. 操作方法和实验步骤
4.1 安装交叉编译器
4.1.1 下载交叉编译工具
下载地址:http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/ ,如图4-1-1所示。
图4-1-1 交叉编译工具下载地址
4.1.2解压交叉编译环境
使用以下命令进行解压:
tar -ivxzf .../arm-linux-tools-20080623.tar.gz -C /
注意加上参数-C,会自动解压到/usr/loacl/相关子目录下,例如用于编译、链接的命令在usr/local/bin目录下,如图4-1-2所示:
图4-1-2 解压后/usr/local/bin目录
4.1.3测试交叉编译环境是否可用
首先,检查环境变量设置,查看相关命令所在路径是否已经加入到环境变量。
图4-1-3 查看环境变量
如图4-1-3所示,编译、链接所用命令所在目录已经添加到环境变量中。
如果命令解压后所在目录不在环境变量中,可以使用如下方法进行添加:
方法1: 编辑~/.bashrc文件
vi ~/.bashrc
在文件的末尾加入如下内容:
export PATH=$PATH:usr/local/bin
保存并退出,重启Terminal即可生效。
注意这种方式只对当前用户有效,因为这仅仅编辑了当前用户下的.bashrc文件。而且仅仅对当前的shell有效。
方法2:编辑/etc/profile
/etc/profile是全局的,适用于所有的shell。
与方法1相同,打开/etc/profile文件在末尾添加如下语句即可:
export PATH=$PATH:usr/local/bin
然后使用如下语句使其生效:
source /etc/profile
然后,编写一个简单的文件进行编译测试。
使用vi编写一个简单的hello.c文件,输出“Hello,World!”,如图4-1-4所示。
图4-1-4 编写的Hello,World!文件
图4-1-5 使用arm-linux-gcc编译Hello,World!的结果
如图4-1-5所示,能够成功编译,说明交叉编译环境安装成功。
4.2 minicom端口配置
4.2.1 安装minicom
使用apt-get install minicom安装minicom工具。
图4-2-1 minicom安装过程
如图4-2-1,安装成功。
4.2.2 配置minicom
1. 输入minicom –s进行配置,如如4-2-2进入配置页面。
图4-2-2 minicom配置界面
2. 选择Serial port setup进行设置,进入如图4-2-3页面:
图4-2-3 Serial port setup设置页面
3. 检查Windows中串口:设备管理器->端口,如图4-2-4所示。
图4-2-4 设备管理器中端口选项
如图4-2-4所示,含有COM1和COM3两个串口。右键查看端口设置,如图4-2-5所示。
图4-2-5 Windows中COM1和COM3端口属性
4. 在windows下测试哪个串口可用(主机箱后面只有一个串口接口),使用串口调试助手,串口线一端连接PC,一端链接试验箱。打开串口,分别连接COM1和COM3,并设置好对应参数,并打开串口,如图4-2-6所示。
图4-2-6 连接COM1参数配置
然后打开试验箱电源,观察输出:发现没有任何输出。说明,当前连接的串口不是COM1。
5. 对COM3进行同样配置,观察输出,如图4-2-7所示。
图4-2-7 COM3输出信息(部分)
如图4-2-7所示,观察到以上输出信息,说明COM3当前可用。
6. 为虚拟机添加硬件COM。
图4-2-8 为虚拟机添加虚拟硬件Serial Port
如图4-2-8所示,添加Serial Port 2,using port COM3。这里要特别注意两个数字,Serial Port 2中的2和using port COM3中的3,之后会详细介绍。
7. 在虚拟机中连接了Serial Port 2,选择A修改Serial Device为/Dev/ttyS1(笔记本用USB串口线应该使用/dev/ttyUSB0),如图4-2-9所示。
图4-2-9 Serial Device设置
同样,进行其他选项的设置,Bps/Par/bits为115200 8N1;Hardware Flow Control为No。修改完成后按Enter键,返回上一级设置目录;选择Save Setup as dfl,最后选择 Exit From minicom退出。
注意,这里需要说明的是,应该特别注意Minicom配置、虚拟机和PC机中COM的对应关系。如果虚拟机中COM为Serial Port No,则minicom中名称为/dev/ttyS[No-1]。这样,还不行,还应该注意Serial Port No具体连接的是物理机器上得哪个串口,本实验中连接的是COM3。这两个对应关系一定要正确,否则不能正确工作。
8. 输入命令minicom,初始化后进入如图4-2-10页面:
图4-2-10 进入minicom界面
如图4-2-10所示,所配置的参数已经生效。
9. 按下CTRL+A键进入控制模式,此时按下Z键显示帮助菜单,如图4-2-11所示。
图4-2-11 minicom帮助页面
10. 选择O:Configure minicom;进入如图4-2-12所示页面:
图4-2-12 minicom配置页面
11. 选择Filename and paths选项进行设置,进入如图4-2-13所示页面。
图4-2-13 Filename and paths设置页面
如图2-2-13所示,相关设置选项含义如下:
A:Download directory:下载文件所在位置,传输方向:目标机->宿主机;
B:Upload directory:上传文件所在位置,传输方向:宿主机->目标机;从此处读取上传的文件(PC -> 开发板) PC机向开发板发送文件,需要发送的文件在PC机上的目录中。做了此项配置后,每次向开发板发送文件时,只需输入文件名即可,无需输入文件所在目录的绝对路径。
如图2-2-14所示设置A、B选项:
图4-2-14 Filename and paths设置
直接按下回车键,返回最初界面。
12. 此时如果重启试验箱,会发现和在Windows下测试COM3相同的信息,如图2-2-15所示,说明链接成功。
如4-2-15 目标机启动时minicom接收到的信息
13. 此时,在minicom中按下Enter键即可进行命令输入并执行,如ls。
图4-2-16 使用minicom在目标机中执行命令
由图2-2-16所示,ls列出目标机中当前目录下文件信息。
4.3 Tftp服务器安装与配置
4.3.1 安装tftp
apt-get install tftpd-hpa tftp-hpa
图4-3-1 tftp安装
4.3.2 配置
1. 使用vi /etc/default/tftpd-hpa打开配置文件,写入如图4-3-2(b)所示内容。
#/etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftproot"
TFTP_ADDRESS="192.168.1.100:69"
TFTP_OPTIONS="-l -c -s"
(a) 打开配置文件
(b)编写配置文件
图4-3-2 配置tftp服务器
注意此时使用网线直接连接目标机和宿主机,需要在同一网段,虚拟机选择桥接方式,宿主机IP为192.168.1.100,目标机IP为192.168.1.200。
关闭linux防火墙:sudo ufw disable
设置宿主机的tftp的ip地址:ifconfig eth0 192.168.1.100
如果你有打开无线网访问外网,请关闭,否则会导致宿主机和目标机ping不通。
2. 创建/tftproot目录,并修改权限chmod 777 /tftproot,修改效果如图4-3-3所示。
图4-3-3 创建/tftproot目录并修改权限
3. 执行 sudo service tftpd-hpa start,启动服务。效果如图4-3-4所示。
图 4-3-4 启动tftp服务
4.3.3 测试
将之前编译的hello文件复制到/tftproot目录下,用于进行测试。
cp /root/hello /tftproot
1. 进入minicom,使用tftp下载文件到目标机。键入tftp,显示如图4-3-5所示帮助信息。
图 4-3-5 minicom中显示帮助信息
2. 执行如图4-3-6命令,将hello文件下载到目标机,并执行,正确。
tftp -l hello -r hello 192.168.1.100 69 -g
图4-3-6 将hello下载到目标机并执行
注意1:有些时候,配置完成后可以使用;可是当系统重启时发现timeout或者其他提示,这时可能是因为tftp服务器没有启动,可以使用以下如图4-3-7命令进行查看,返回如下信息说明启动。
netstat –a | grep tftp
图4-3-7 查看tftp服务器是否启动
如果没有任何信息,可以使用下面命令进行启动:
service tftpd-hpa start
对应的重启命令:service tftpd-hpa restart。
注意2:使用tftp服务必须使目标机和宿主机在同一网段,设置方法如下:
1. 使用minicom查看目标机IP地址
进入minicom后,使用ifconfig进行查看,如图4-3-8所示。
图4-3-8 minicom中查看目标机ip
当然也可以使用ifconfig eth0 IPAddress进行修改。
2. 设置宿主机(虚拟机中的Ubuntu)IP地址使其在同一网段。
虚拟机的网络连接方式使用桥接方式,设置方法如图4-3-9所示。
图4-3-9 虚拟机网络设置为桥接方式
在虚拟机中使用ifconfig eth0 192.168.1.100(tftp的设置地址)进行设置。
这样,目标机和虚拟机就在同一网段,可以进行连接。可以使用ping命令进行互ping测试。
这些操作和Vmware所在的Windows本地连接的IP地址没有关系,使用自动获得IP地址方式即可。但是,不能在windows下ping通虚拟机或者目标机。如果需要三者互ping,则三者必须在同一网段,可以给windows设置为192.168.1.50。注意以上在网掩码均为255.255.255.0。
4.4 NFS服务的配置
4.4.1 安装
如图4-4-1安装nfs服务器。
(a)
(b)
图4-4-1 安装nfs服务器
4.4.2 配置
1. 查看nfs服务当前状态,若nfs服务正在运行则返回"nfsd running"。否则返回"nfsd not running"。
3. 创建目录/nfsroot用于共享文件。
root@ubuntu:/tftproot# apt-get install nfs-common
4. 配置共享目录。在主机上配置配置文件。安装好上面的软件后,会在/etc下出现一个名叫exports的文件(如果没有新建一个也可以),打开后可以看到如图4-4-2所示内容。
图4-4-2 /etc/exports内容
其实就是一些注释,提示你怎样配置nfs。因为nfs是一种网络共享,所以首先要确定你想把哪个文件夹共享出来,目前假设共享的文件目录为/nfsroot,建议不要把共享的文件夹选的太大,那样会严重影响共享传输的速度;还要确定主机的IP地址是多少,目前先假设IP为192.168.1.100。配置时只需要在exports文件的末尾加上一句话,如图4-4-3所示。
/nfsroot *(sync,rw,no_root_squash)
图4-4-3 /etc/exports加入的配置信息
下面解释一下,总共需要写三部分的东西,第一部分就是/nfsroot,也就是待共享的目录。第二部分192.168.1.0/24是指在这个IP地址段内可以共享,第三部分就是括号里的内容,就是参数,也是配置的重点地方,下面重点说一下:
第一个参数:rw:可擦写的权限;ro:只读的权限。
第二个参数:sync: 资料同步写入到内存与硬盘当中;async:资料会先暂存于内存当中,而非直接写入硬盘。
第三个参数: no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有root的权限!这个项目极不安全,不建议使用! root_squash:在登入 NFS 主机使用分享之目录的使用者如果是root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个身份。all_squash:不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody。anonuid:前面关于*_squash提到的匿名使用者的UID设定值,通常为nobody,但是你可以自行设定这个UID的值!当然,这个UID必需要存在于你的/etc/passwd当中! anongid:同anonuid,但是变成group ID就是了。
4.启动nfs服务。
首先把上面修改过的配置文件重新导入:sudo exportfs –rv ,如图4-4-4所示。
图4-4-4 重新载入配置文件
然后,重新启动portmap服务(端口映射):sudo /etc/init.d/portmap restart,如图4-4-5所示。
图4-4-5 重启portmap服务
最后,重新启动nfs服务:sudo /etc/init.d/nfs-kernel-server restart,如图4-4-6所示。
如4-4-6 重启nfs服务
以上三步输入完毕,就配置好了nfs服务了,如果后面有需要要修改exports文件,在修改之后,还是需要重新输入1步骤中的命令。
4.4.3 测试
1. 使用mount使用NFS,如图4-4-7所示。
图4-4-7 本地测试挂载/nfsroot目录
2. 如果要卸载只需umount /mnt即可,如果当前工作路径为/mnt则会返回device is busy,所以先退出mnt目录在进行umount操作。如图4-4-8所示。
图4-4-9 卸载过程
3. 在minicom中可以将/nfsroot目录挂载到目标机,并直接运行/nfsroot/hello文件。如图4-4-10所示。
图4-4-10 目标机挂载、执行程序、卸载过程