zju(1)嵌入式开发环境构建
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 目标机挂载、执行程序、卸载过程
zju(1)嵌入式开发环境构建的更多相关文章
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- 嵌入式实时操作系统VxWorks入门――开发环境构建[转]
VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通 信.军事.航空.航天等高精尖技术及实时性 ...
- 转:Qt 嵌入式开发环境搭建
地址: http://www.cnblogs.com/lishixian/articles/3013897.html 作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...
- Ubuntu嵌入式开发环境配置问题集锦(不断更新)
本文章主要记录在建立嵌入式开发环境中遇到的各种问题,并详细写上解决方法. 我的开发环境为:win7+Vmware9.0+Ubuntu12.04 之所以选择这样的开发环境是因为:1. 有 ...
- ubuntu-10.10嵌入式开发环境搭建【转】
本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...
- 嵌入式linux开发环境构建
2.1硬件环境构建 2.1.1主机与目标板结合的交叉开发模式 在主机上编辑.编译软件,然后再目标办上运行.验证程序. 对于S3C2440.S3C2410开发板,进行嵌入式Linux开发时一般可以分为以 ...
- Qt嵌入式开发环境搭建
一.Qt版本介绍 按照不同的图形界面来划分,分为四个版本: 1.Win32版:适用于windows平台 2.X11版:适用于各种X系统的Linux和Unix平台 3.Mac版:适用于苹果的MacOS ...
- Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)
PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...
- 使用eclipse搭建嵌入式开发环境
下载jdk http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-i586.tar.gz 下载eclipse-cpp-ga ...
随机推荐
- hdu 1087 Super Jumping! Jumping! Jumping! 简单的dp
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #371 (Div. 2) - A
题目链接:http://codeforces.com/contest/714/problem/A 题意:有两个人A,B 给定A的时间区间[L1,R1], B的时间区间[L2,R2],然后在正好K分钟的 ...
- iOS10 UI设计基础教程
iOS10 UI设计基础教程 介绍:本教程针对iOS初级开发人员,基于iOS 10系统,使用Swift 3.0语言讲解如何进行UI设计.本教程内容涵盖UI基础构成.UI元素.自动布局.自适应UI.UI ...
- 【Clr in c#】方法
1. 引用类型(class)与值类型(strust)的构造函数(实例构造器) 1, 创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始对象的附加字段,最后调用实例构造器来设置对象的初始 ...
- spring mvc 返回json
服务器端返回的是文本,客户端得到文本后将文本转换成json就可以了,服务器端将对象转换成json 的文本形式,并且需要设定文本的类型为text/plain,charset=UTF-8 所以在 appl ...
- OpenCV(5) 对比度和亮度
公式: 两个参数 \alpha > 0 和 \beta 一般称作 增益 和 偏置 参数.我们往往用这两个参数来分别控制 对比度 和 亮度 . #include "stdafx. ...
- HTML5学习之路
出于公司项目需求,我现在开始学习html5,虽然零零散散有过一点,比如说新出的语义化标签,本地存储之类的,但是从来都没有系统的去了解.
- qq邮箱邮我组件
http://openmail.qq.com/cgi-bin/qm_help_mailme?sid=uvkgSu7e0aOrc0Qc&t=open_mailme 邮我 使用"邮我&q ...
- IsPostback的原理
ispostback:就是判断页面是首次加载的,还是数据回发(有get或者post请求过的)后的页面.上代码吧,直观点. 1.asp.net页面 <body> <form id=&q ...
- DrawingContext.Pop Method
The following example shows the effect of the Pop command. using System; using System.Windows; using ...