嵌入式系统开发实验指导Word格式.docx
- 文档编号:16408541
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:82
- 大小:2.35MB
嵌入式系统开发实验指导Word格式.docx
《嵌入式系统开发实验指导Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统开发实验指导Word格式.docx(82页珍藏版)》请在冰豆网上搜索。
二、实验内容29
三、预备知识29
四、实验设备及工具29
五、实验原理29
六、实验步骤36
实验五内核驱动设计入门-模块方式驱动实验40
一、实验目的40
二、实验内容40
三、预备知识40
四、实验设备及工具40
五、实验原理40
六、程序分析55
七、实验步骤58
八、思考题60
嵌入式Linux开发环境的建立
嵌入式LINUX开发环境有几个方案:
1、基于PC机WINDOWS操作系统下的CYGWIN;
2、在WINDOWS下安装虚拟机后,再在虚拟机中安装LINXUX操作系统;
3、直接安装LINUX操作系统。
基于WINDOWS的环境要么有兼容性问题,要么速度有影响,所以我推荐大家使用纯LINUX操作系统开发环境。
我们实际的开发环境为REDHAT9,它已经支持中文,并且包含了绝大部分的开发工具,不用担心装了LINUX就不能使用WINDOWS的问题。
一般的情况都是用户已经有了WINDOWS操作系统,再安装LINUX,LINUX会自动安装一个叫作GRUB的启动引导软件,可以选择引导多个操作系统。
预备知识
绝大多数Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。
通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。
运行Linux的PC【宿主机】开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器提供的支持作出选择。
宿主机和目标板的处理器一般不相同,宿主机为Intel处理器,而目标板如UP-NetARM2410-S开发板为三星S3c2410.GNU编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。
所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC机作宿主开发机,对于嵌入式LINUX,宿主机上的操作系统一般要求为REDHATLINUX。
嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount所用)。
然后要在宿主机上建立交叉编译调试的开发环境。
环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作,但现在已通过博创嵌入式教学套件中光盘的安装而自动完成了。
对开发PC机的性能要求
由于Redhat9.0安装后占用空间约为2.4G-5G之间,还要安装ARM-LINUX开发软件,因此对开发计算机的硬盘空间要求较大。
硬件要求:
CPU:
高于奔腾500M,推荐高于赛扬1.7G;
内存:
大于128M,推荐256M;
硬盘:
大于10G,推荐高于40G。
开发工具软件的安装与配置
1.REDHATLINUX9.0的安装
在一台PC上安装RedHatLINUX9.0,选择Custom定制安装,在选择软件Package时最好将所有包都安装,需要空间约2.7G,如果选择最后一项:
everything,即完全安装,将安装3张光盘的全部软件,需要磁盘空间大约5G。
因此建议提前为REDHATLINUX的安装预留大约5-15G的空间,具体视用户的硬盘空间大小来确定,在安装完Redhat后还要安装Linux的编译器和开发库以及ARM-Linux的所有源代码,这些包安装后的总共需要空间大约为800M。
2.开发工具软件的安装
将博创兴业科技有限公司提供的附带开发工具光盘插入CDROM,然后执行以下命令:
mount/dev/cdrom/mnt
若系统不识别/dev/cdrom的话,可以用如下命令,假设CDROM为从盘,即为/dev/hdb,则:
mount–tiso9660/dev/hdb/mnt
安装脚本程序将自动建立/arm2410s目录,并将所有开发软件包安装到/arm2410s目录下,同时自动配置编译环境,建立合适的符号连接。
注意:
安装完成后看一下主编译器Armv4l-unknown-linux-gcc是否在/opt/host/armv4l/bin/,如果不是这个路径,请使用vi修改/root/.bash_profile文件中PATH变量为PATH=$PATH:
$HOME/bin:
/opt/host/armv4l/bin/,存盘后执行:
source/root/.bash_profile,则以后armv4l-unknown-linux-gcc会自动搜索到,可以在终端上输入armv,然后按tab键,会自动显示armv4l-unknown-linux-
3.开发环境配置
配置网络,包括配置IP地址、NFS服务、防火墙。
网络配置主要是要安装好以太网卡,对于一般常见的RTL8139网卡,REDHAT9.0可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。
然后配置宿主机IP为192.168.0.121。
如果是在有多台计算机使用的局域网环境使用此开发设备,IP地址可以根据具体情况设置。
如图1.1所示:
图1.1网络配置
双击设备eth0的蓝色区域,进入以太网设置界面,如图1.2,1.3所示:
图1.2以太网常规设置界面
图1.3以太网路由设置界面
对于REDHAT9.0,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用NFSmount它,许多网络功能都将无法使用。
因此网络安装完毕后,应立即关闭防火墙。
操作如下:
点击红帽子开始菜单,选择安全级别设置,选中无防火墙。
如图1.4所示:
图1.4安全级别设置
在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将iptables服务的勾去掉,并确保nfs选项选中。
配置NFS:
点击主菜单运行系统设置->
服务器设置->
NFS服务器(英文为:
SETUP->
SYSTEM
SERVICE->
NFS),点击增加出现如下在界面,在目录(Drictory):
中填入需要共享的路径,在主机(Hosts):
中填入允许进行连接的主机IP地址。
并选择允许客户对共享目录的操作为只读(Read-only)或读写(Read/write)。
如图1.5所示:
图1.5NFS基本设置
图1.6是对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。
图1.6NFS用户访问设置
当将远程根用户当作本地根用户时,对于操作比较方便,但是安全性较差。
最后退出时则完成NFS配置。
配置好后,界面应显示如图1.7所示:
图1.7远程根用户当作本地根用户
图1.8配置好的NFS
我们也可以手工编写/etc/exports文件,其格式如下:
共享目录可以连接的主机(读写权限,其他参数)例如:
/arm2410s192.168.0.*(rw,sync)
表示将本机的/arm2410s目录共享给ip地址为192.168.0.1-192.168.0.254的所有计算机,可以读取和写入。
配置完成后,可用如下办法简单测试一下NFS是否配置好了:
在宿主机上自己mount自己,看是否成功就可以判断NFS是否配好了。
例如在宿主机/目录下执行:
mount192.168.0.10:
/arm2410s/mnt
其中192.168.0.10应为主机的IP地址。
然后到/mnt/目录下看是否可以列出/arm2410s目录下的所有文件和目录,可以则说明mount成功,NFS配置成功。
配置MINICOM:
1.在linux操作系统Xwindow界面下建立终端(在桌面上点击右键——>
新建终端),在终端的命令行提示符后输入minicom,回车,你就会看到minicom的启动画面(见图1.9)。
若没有启动Xwindow则在命令行提示符后直接输入minicom即可。
图1.9minicom启动画面
2.minicom启动后,先按Ctrl+A键,再按Z键(注意不是连续按,Ctrl+A松开后才按Z),进入主配置界面(见图1.10)。
图1.10主配置界面按“O”进入配置界面,如图1.11配置界面
图1.11配置界面
按上下键选择Serialportsetup,进入端口设置界面,这里有几个重要选项改为如下值(见图1.12):
(在Changewhichsetting后按哪个字母就进入哪项的配置,如按A进行端口号配置。
)
A————SerialDevice:
/dev/ttyS0(端口号使用串口1)
E————BPS/par/bits:
/1152008N1(波特率)
F,E硬件流,软件流都改为NO,若要使用PC机的串口2来接板子的串口1做监控,改为:
/dev/ttyS1即可。
3.选好后按ESC键退出到图1.11所示画面,选择Savesetupasdf1保存退出,以后只要启动minicom就是该配置,无需再做改动。
4.配置完成后,用串口线连接好pc机和2410-S,启动2410-S,即可在minicom上看到启动信息,并可以执行操作控制
图1.12端口设置界面
Linux开发软件的安装目录结构
表格1.1均以/arm2410s目录为起点:
表1.1/arm2410s下的文件说明
目录名
说明
busybox-1.00-pre10
Busybox-1.00源代码
doc
arm2410-Slinux使用说明书
Qt
Qt应用程序和库的源代码
insight-6.0
Linux下源代码查看器
root
2410-S平台根文件系统
kernel-2410s
2410-S平台linux内核源代码
demos
所有实验演示程序
img
vivi
系统引导程序
zImage
ARMLINUX-2.4内核压缩映象文件
root.cramfs
根文件系统映象文件
yaffs.tar.bz2
demos演示程序的压缩文件
exp
实验例程源码
sh
mount-dos.shlinux下挂装windows的分区示例脚本
mnt_udisk.shMOUNTU盘
mkroot.sh制作根文件系统的脚本
编译器安装路径说明如表1.2所示:
表1.2编译器安装路径说明
编译器
安装目录
arm-elf-gcc-2.95.3
/opt/host/armv4l
应用开发库和头文件
Armv4l-unknown-linux-gcc
/opt/host/armv4l/bin
主编译器
上述诸多程序的源代码都在光盘中提供.
在安装完成LINUX后,就是对LINUX的网络环境的配置,最主要是配置NFS服务器。
实验一熟悉Linux开发环境
一、实验目的
熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。
使用Linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。
二、实验内容
本次实验使用RedhatLinux9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并在其中编写hello.c和Makefile文件。
学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。
四、实验设备及工具(包括软件调试工具)
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
五、实验步骤
1、建立工作目录
[root@zxtsmile]#mkdirhello
[root@zxtsmile]#cdhello
2、编写程序源代码
在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。
Kdevelope、anjuta软件的界面与vc6.0类似,使用它们对于熟悉windows环境下开发的用户更容易上手。
实际的hello.c源代码较简单,如下:
#include<
stdio.h>
main()
{
printf(“helloworld\n”);
}
我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:
[root@zxthello]#vihello.c
按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:
wq”保存并退出。
这样我们便在当前目录下建立了一个名为hello.c的文件。
3、编写Makefile
要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。
使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。
下面我们介绍本次实验用到的Makefile文件。
CC=armv4l-unknown-linux-gcc
EXEC=hello
OBJS=hello.o
CFLAGS+=
LDFLAGS+=–static
all:
$(EXEC)
$(EXEC):
$(OBJS)
$(CC)$(LDFLAGS)-o$@$(OBJS)
clean:
-rm-f$(EXEC)*.elf*.gdb*.o
下面我们来简单介绍这个Makefile文件的几个主要部分:
●
CC指明编译器
EXEC表示编译后生成的执行文件名称
OBJS目标文件列表
CFLAGS编译参数
LDFLAGS连接参数
all:
编译主入口
clean:
清除编译结果
注意:
“$(CC)$(LDFLAGS)-o$@$(OBJS)”和“-rm-f$(EXEC)*.elf*.gdb*.o”前空白由一个Tab制表符生成,不能单纯由空格来代替。
与上面编写hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中
[root@zxthello]#viMakefile
4、编译应用程序
在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。
如果进行了修改,重新编译则运行:
[root@zxthello]#makeclean
[root@zxthello]#make
编译、修改程序都是在宿主机(本地PC机)上进行,不能在MINICOM下进行。
5、下载调试
在宿主PC计算机上启动NFS服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式Linux环境开发环境的建立。
在建立好NFS共享目录以后,我们就可以进入MINICOM中建立开发板与宿主PC机之间的通讯了。
[root@zxthello]#minicom
[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:
/arm2410s/host
IP地址需要根据宿主PC机的实际情况修改成功挂接宿主机的arm2410s目录后,在开发板上进入/host目录便相应进入宿主机的/arm2410s目录,我们已经给出了编辑好的hello.c和Makefile文件,它/arm2410s/exp/basic/01_hello目录下。
用户可以直接在宿主PC上编译生成可执行文件,并通过上面的命令挂载到开发板上,运行程序察看结果。
如果不想使用我们提供的源码的话,可以再建立一个NFS共享文件夹。
如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过MINICOM挂载到开发板上。
[root@zxthello]#cphello/root/share
/root/share/host
再进入/host目录运行刚刚编译好的hello程序,查看运行结果。
[/mnt/yaffs]cd/host
[/host]./hello
helloworld
开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。
这样可以反复修改、编译、调试,不需要下载到开发板。
六、思考题
1.Makefile是如何工作的?
其中的宏定义分别是什么意思?
实验二串行端口程序设计
一、实验目的
1.了解在linux环境下串行程序设计的基本方法。
2.掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。
3.学习使用多线程来完成串口的收发处理。
读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。
●有C语言基础。
●掌握在Linux下常用编辑器的使用。
●掌握Makefile的编写和使用。
●掌握Linux下的程序编译与交叉编译过程。
四、实验设备及工具
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。
五、实验原理
异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图2.1串行通信字符格式
图2.1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。
接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:
●奇偶错:
在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
●帧格式错:
一个字符从起始位到停止位的总位数不对。
●溢出错:
若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。
每一种错误都会给出相应的出错信息,提示用户处理。
一般串口调试都使用空的
MODEM连接电缆,其连接方式如下:
图2.2实用RS-232C通讯连线
六、程序分析
Linux操作系统从一开始就对串行口提供了很好的支持,为进行串行通讯提供了大量的函数,我们的实验主要是为掌握在Linux中进行串行通讯编程的基本方法。
本实验的程序流程图如下:
图2.3串口通讯实验流程图
本实验的代码如下:
#include<
termios.h>
unistd.h>
fcntl.h>
sys/signal.h>
pthread.h>
#defineBAUDRATEB115200
#defineCOM1"
/dev/ttyS0"
#defineCOM2"
/dev/ttyS1"
#defineENDMINITERM27/*ESCtoquitminiterm*/
#defineFALSE0
#defineTRUE1
volatileintSTOP=FALSE;
volatileintfd;
voidchild_handler(ints)
printf("
stop!
!
\n"
);
STOP=TRUE;
/*-------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 开发 实验 指导
![提示](https://static.bdocx.com/images/bang_tan.gif)