嵌入式Linux系统开发教程实验报告

2024-09-11

嵌入式Linux系统开发教程实验报告(通用5篇)

1.嵌入式Linux系统开发教程实验报告 篇一

??1 嵌入式系统与Linux

按照电气工程师协会的一个定义:嵌入式系统是用来控制或监视机器、装置或工厂等的大规模系统的设备。具体说来,它是电脑软件和硬件的综合体;是以应用为中心,以计算机技术为基础,软硬件可裁减,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。一般来说,嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,终端用户很难或者不可能改变固件。而Linux也早已成为IT界家喻户晓的一个名字。概括说来,将Linux应用于嵌入式系统的开发有如下一些优点:

① Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。

② 内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易得到实现。

③ 强大的网络支持,使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。

2 嵌入式系统设计的过程

按照嵌入式系统的工程设计方法,嵌入式系统的设计可以分成三个阶段:分析、设计和实现。分析阶段是确定要解决的问题及需要完成的目标,也常常被称为“需求阶段”;设计阶段主要是解决如何在给定的约束条件下完成用户的要求;实现阶段主要是解决如何在所选择的硬件和软件的基础上进行整个软、硬件系统的协调实现。在分析阶段结束后,通常开发者面临的一个棘手的问题就是硬件平台和软件平台的选择,因为它的好坏直接影响着实现阶段的任务完成。

通常硬件和软件的选择包括:处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件调试工具、软件组件等。

在上述选择中,通常,处理器是最重要的,同时操作系统和编程语言也是非常关键的。处理器的选择往往同时会限制操作系统的选择,操作系统的选择又会限制开发工具的选择。

3 硬件平台的选择

3.1 处理器的选择

嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30几个系列。但与全球PC市场不同的是,没有一种微处理器和微处理器公司可以主导嵌入式系统,仅以32位的CPU而言,就有100种以上嵌入式微处理器。由于嵌入式系统设计的差异性极大,因此选择是多样化的。

调查上市的CPU供应商,有些公司如Motorola、Intel、AMD很有名气,而有一些小的公司,如QED(Santa Clara.CA)虽然名气很小,但也生产很优秀的微处理器。另外,有一些公司,如ARM、MIPS等,只设计但并不生产CPU,他们把生产权授予世界各地的半导体制造商。ARM是近年来在嵌入式系统有影响力的微处理器制造商,ARM的设计非常适用于小的电源供电系统。Apple在Newton手持计算机中使用ARM,另外有几款数字无线电话也在使用ARM。

设计者在选择处理器时要考虑的主要因素有:

① 处理性能。一个处理器的性能取决于多个方面的因素,如时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和I/O子系统。如果是面向高性能的应用设计,那么建议考虑某些新的处理器,其价格相对低廉,如IBM和Motorola Power PC。

② 技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,减少了芯片的数量,降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无需过多的胶合逻辑(GL,Glue Logic)就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如DMA控制器,内存管理器,中断控制器,串行设备、时钟等的配套。

③ 功耗。嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS导航器、智能家电等消费类电子产品。这些产品中选购的微处理器,典型的特点是要求高性能、低功耗。许多CPU生产厂家已经进入了这个领域。今天,用户可以买到一颗嵌入式的微处理器,其速度像笔记本中的Pentium一样快;而它仅使用普通电池供电即可,并且价格很便宜。如果用于工业控制,则对这方面的考虑较弱。

④ 软件支持工具。仅有一个处理器,没有较好的软件开发工具的支持也是不行的,因此选择合适的软件开发工具对系统的实现会起到很好的作用。

⑤ 是否内置调试工具。处理器如果内置调试工具可以大大缩小调试周期,降低调试的难度。

⑥ 供应商是否提供评估板。许多处理器供应商可以提供评估板来验证理论是否正确,决策是否得当。

3.2 硬件部件选择的其它因素

① 生产规模。打算做1套?多套?还是规模生产?如果生产规模比较大,可以自己设计和制备硬件,这样可以降低成本。反之,最好从第三方购买主板和I/O板卡。

② 开发的市场目标。如果想使产品尽快发售,以获得竞争力,此时要尽可能买成熟的硬件;反之,可以自己设计硬件,降低成本

③ 软件对硬件的依赖性。软件是否可以在硬件没有到位的时候并行设计或先行开发。

④ 只要可能,尽量选择使用普通的硬件。在 CPU 及架构的选择上,一个原则是:只要有可替代的方案,尽量不要选择 Linux 尚不支持的硬件平台。

4 软件平台的选择

图1所示的嵌入式软件的开发流程,主要涉及到代码编程、交叉编译、交叉连接、下载到目标板和调试等几个步骤,因此软件平台的选择也涉及到以下几个方面。

4.1 操作系统的选择

(1)操作系统选择应考虑的因素

硬件方案确定之后,操作系统的选择就相对轻松了。硬件的不同,会影响操作系统的选择。低端无MMU(Memory Management Unit,存储器管理单元)的CPU,要使用uClinux 操作系统;而相对高端的硬件,则可以用普通的嵌入式 Linux 操作系统。uClinux 和普通的 Linux 有各自的优势和缺点。可用于嵌入式系统软件开发的操作系统很多,但关键是如何选择一个适合开发项目的操作系统。经过多年的开发实践,笔者认为应该从以下几点进行考虑:

① 操作系统提供的开发工具。有些实时操作系统(RTOS)只支持该系统供应商的开发工具,因此,还必须向操作系统供应商获取编译器、调试器等;而有些操作系统使用广泛,且有第三方工具可用,因此,选择的余地比较大。

② 操作系统向硬件接口移植的难度。操作系统到硬件的移植是一个重要的问题,是关系到整个系统能否按期完工的一个关键因素。因此,要选择那些可移植性程度高的操作系统,避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。

③ 操作系统的内存要求。均衡考虑是否需要额外花钱去购买RAM或EEPROM来迎合操作系统对内存的较大要求。

④ 开发人员是否熟悉此操作系统及其提供的API。

⑤ 操作系统是否提供硬件的驱动程序,如网卡等。

⑥ 操作系统的可剪裁性。有些操作系统具有较强的可剪裁性,如嵌入式Linux、Tornado/VxWorks等等。

⑦ 操作系统的实时性能。

(2)几类嵌入式Linux系统的比较

(本网网收集整理)

嵌入式Linux系统方面的产品主要分为三类:

第一类是专门为Linux的嵌入式应用而做的。如何让Linux更小、更容易嵌入到体积要求和功能、性能要求更高的硬件中去,是他们的产品开发方向,如MontaVista的MontaVista Linux等。第二类是专门为Linux的实时特性设计的产品。将Linux开发成实时系统尤其是硬实时系统,应用于一些关键的控制场合(不仅仅是信息电器)。如,Fsmlabs公司开发出来的RT-Linux产品已经用在工业控制的很多方面;葡萄牙的Coimbra大学已经利用RT-Linux实现了化工生产控制厂里用来控制反应和程序控制的系统。第三类的产品是将实时性和嵌入式方案结合起来的方案。很多公司都这么做,并且提供集成化的开发方案,如Lineo、TimeSys等等。

因此选择操作系统时,要根据自己的嵌入式要求和实时性要求,选择适合自己的嵌入式Linux;同时,和选择硬件的原则一样,如果可能,尽量选择使用普通的嵌入式 Linux 系统。

4.2 编程语言的选择

编程语言的`选择主要考虑以下因素:

① 通用性。不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现。而高级语言一般和具体机器的硬件结构联系较少,多数微处理器都有良好的支持,通用性较好。

② 可移植性程度。汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,移植性差;而高级语言对所有微处理器都是通用的,程序可以在不同的微处理器上运行,可移植性较好。

③ 执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢;但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能间的权衡问题。

④ 可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。

几种开发语言的比较:

在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有:Ada、C/C++、Modula-2和Java等。Ada语言定义严格,易读易懂,有较丰富的库程序支持,目前在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C语言具有广泛的库程序支持,目前在嵌入式系统中是应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域占重要地位。C++是一种面向对象的编程语言,目前在嵌入式系统设计中也得到了广泛的应用,如GNU C++。Visual C++,是一种集成开发环境,支持可视化编程,广泛应用于GUI程序开发。但C与C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。Modula-2定义清晰,支持丰富,具有较好的模块化结构,在教学科研方面有较广泛的应用。虽然该语言的开发应用一直比较平缓,但近两年在欧洲有所复苏。J

ava语言相对年轻,但有很强的跨平台特性,目前发展势头较为强劲。Java语言的“一次编程,到处可用”的特性,使得它在很多领域备受欢迎。随着网络技术和嵌入式技术的不断发展,Java及嵌入式Java的应用也将越来越广泛,但是Java消耗硬件资源较大。

4.3 集成开发环境考虑的因素

集成开发环境IDE(Integrated Development Environment)应考虑以下因素:

① 系统调试器的功能。系统调试特别是远程调试是一个重要的功能。

② 支持库函数。许多开发系统提供大量使用的库函数和模板代码,如大家比较熟悉的C++编译器就带有标准的模板库。它提供了一套用于定义各种有用的集装、存储、搜寻、排序对象。与选择硬件和操作系统的原则一样:除非必要,尽量采用标准的 glibc。

③ 编译器开发商是否持续升级编译器。

④ 连接程序是否支持所有的文件格式和符号格式。

4.4 硬件调试工具的选择

好的软件调试程序可以有效地发现大多数的错误,但是如果再选择一个好的硬件调试就会达到事半功倍的效果。常用的硬件调试工具有以下几种:

① 实时在线仿真器(ICE,In-Circuit Emulator)。用户从仿真插头向ICE看,ICE应是一个可被控制的MCU。ICE是通过一根短电缆连接到目标系统上的。该电缆的一端有一个插件,插到处理器的插座上,而处理器则插到这个插件上。ICE支持常规的调试操作,如单步运行、断点、反汇编、内存检查、源程序级的调试等等。

② 逻辑分析仪。逻辑分析仪最常用于硬件调试,但也可用于软件调试。它是一种无源器件,主要用于监视系统总线的事件.

③ ROM仿真器。ROM仿真器用于插入目标上的ROM插座中的器件,用于仿真ROM芯片。可以将程序下载到ROM仿真器中,然后调试目标上的程序,就好像程序烧结在PROM中一样,从而避免了每次修改程序后直接烧结的麻烦。

④ 在线调试OCD或在线仿真(on-chip emulator)

特别的硅基材料以及定制和CPU引脚的串行连接,在这种特殊的CPU芯片上使用OCD (On-Chip Debugging),才能发挥出OCD的特点。用低端适配器就可以把OCD端口和主工作站以及前端调试软件连接起来。从OCD的基本形式看来,它的特点和单一的ROM监测器是一致的,但是不像后者那样,需要专门的程序以及额外的通信端口。

4.5 软件组件的选择

有些软件组件是免费的,有些软件组件是授权的。授权软件组件的费用一般都很高,但大都经过严格的测试,可靠性高,调试时间短。现在也有一些免费的自由软件组件,它们的性能、可靠性也很好。因此开发人员在选择的时候要加以权衡,确定哪种方案更好。

5 展 望

国外的开发已经如火如荼,国内的开发也不甘示弱。Linux在嵌入式系统中具有强大的生命力和利用价值,很多公司和大学都不同程度地表现出对这个方面的兴趣。有理由相信,嵌入式Linux的发展将带领我们进入嵌入式系统的新时代!

2.嵌入式Linux系统开发教程实验报告 篇二

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁减,适用于应用系统对功能、可靠性、 成本、功耗有严格要求的专用计算机系统,通常由嵌入式微处理器、 外围硬件设备、嵌入式操作系统、及用户应用程序四部分组成,用于实现对其他设备的控制、监视或者管理等功能[1],类似于PC机上的Windows XP系统。嵌入式操作系统是一种更加精简、功能相对完整的操作系统,目前比较流行的嵌入式操作系统主要有Linux,Windows CE,Vxworks,μC/OS-Ⅱ等。Linux操作系统是一个免费并且源代码开放的操作系统,用户可以免费获得Linux源代码,然后根据自己的应用需求对系统进行定制和改造[2]。

本文选用的32位ARM920T内核微处理器是三星公司的S3C2410A-20[3],它可以支持2.4版本和2.6版本内核的Linux操作系统。本文把2.4版本内核的Linux操作系统嵌入到ARM体系结构中,并在此基础上搭建嵌入式开发平台,然后进行各种应用程序的开发。

1 硬件平台

本文使用的硬件平台是杭州立宇太电子有限公司的ARMSYS系列嵌入式系统开发板。它使用三星公司的S3C2410A处理器。S3C2410A是一款包含ARM920T内核的16/32位精简指令集计算机(RISC)嵌人式微处理器。ARM920T核由ARM9TDMI、存储管理单元(MMU)和高速缓存3部分组成。该处理器主要面向手持设备以及高性价比、 低功耗的应用,运行频率可达203 MHz,可支持ARM-Linux,Windows CE等操作系统的嵌入式硬件平台。

ARMSYS2410开发板的硬件资源主要由CPU、存储器、串口、2个USB Host A型接口、1个USB Slave B型接口、以太网控制器CS8900及接口、JTAG调试口、LCD(夜晶显示屏)触摸屏接口,音频接口、电源复位等电路组成。其中,CPU采用S3C2410A;存储器由1片64 MB的SDRAM,1片1 MB的NOR FLASH和1片64 MB NADN FLASH构成;2个串口为COM0和COM1。

2 嵌入式Linux系统的移植

有些操作系统如Linux,Windows CE等经过移植后可以运行在不同的硬件平台上。移植就是把某一个平台上的代码运行在其他平台上的过程。

2.1 U-Boot的移植

一般而言,计算机系统都需要有启动的引导程序。PC机的引导代码就是BIOS引导程序,而嵌入式Linux系统的引导加载程序称之为Bootloader。Bootloader是系统加电后运行的第一段代码,它的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统[4]。通过Bootloader小程序可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境[3]。Uboot是最常见的Bootloader,主要用来完成系统环境的初始化,将后期执行代码复制到SDRAM空间,为Linux内核的运行准备好条件。

2.1.1 Windows 和Linux系统的文件共享

实现Windows下文件到Linux系统的共享方法有很多种,比如使用Samba,硬盘挂载mount和直接使用虚拟机的Shared Folders等。在PC上安装一个虚拟机VMware和Red Hat Linux,虚拟机的好处就是可以在虚拟机中打开操作系统Linux,实现Windows XP系统下资源的共享和Linux操作系统图像界面的全屏化,共享的文件可以在/mnt/hgfs目录下看到[5]。

2.1.2 配置和编译U-boot

不同硬件板的U-boot配置也稍有不同。移植U-boot主要包括添加开发板硬件相关的文件等。为了不改动原来的smkd2410.h文件,在uboot2410/include/configs/下的smdk2410.h复制一份并更名为armsys2410.h,可以通过armsys2410.h来修改U-boot软硬件配置,包括硬件板直接相关联的CPU类型、开发板IP、波特率等。设置所需要的配置后就能编译U-boot。U-boot编译的具体过程如下:

(1) 将板子取名为armsys2410,在Makefile中加入armsys2410_config:unconfig@./mkconfig $(@:_config=) arm arm920t armsys2410 NULL s3c24x0.

(2) 在/u-boot_2410/board/下建立armsys2410目录,并把/board/smdk2410/下的文件拷贝到/board/armsys2410下,将smdk2410.c更名为armsys2410.c

(3) 编译U-boot,即可生成u-boot.bin可执行文件,具体的执行命令如下:

make smdk2410_config

make all ARCH = arm

(4)下载u-boot.bin到S3C2410开发平台的NAND FLASH,成功下载后开发板上电就能从超级终端上看到刚下载的U-boot启动程序。启动过程中按下任意键,出现如图1所示的启动画面。

2.2 zImage的移植

Linux内核主要由以下5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。内核结构中的几个主要目录存放着大量的源代码等信息[3]。ARMSYS2410开发板的CPU内核可以移植2.4和2.6版本的Linux内核,本文选用2.4版本的Linux内核。对Linux内核的移植是一个庞大的工程,首先要对其源码结构有清楚的认识,并能深刻理解其中的源代码,然后在此基础上修改或编写需要的源代码,以达到预期的目的。Linux内核目录[2]如下:/Documentation:存放了许多的文档/arch:不同体系结构特定的内核代码;/drivers:设备的驱动程序; /fs:文件系统代码;/include:相关库文件;/init:内核的初始化代码;/ipc:进程通信代码;/kernel:主内核代码;/lib:存放高速体系结构特有的和通用函数的实现;/mm:内存管理代码;/net:网络相关代码;/scripts:存放了配置内核的一些脚本文件。

2.2.1 交叉编译环境

开发板是ARM9处理器,开发板平台上没有编译器,只负责存放编译好的目标代码,并能够执行。源代码的编译器是存放主机Linux系统上的,为了使在主机Linux系统上编译的代码能够在ARM9处理器中执行,必须有一交叉编译工具。交叉编译器和链接器是在宿主机上运行的,并且能够生成在目标机上直接运行的二进制可执行文件。安装cross-2.95.3.tar.bz2,并设置好交叉编译器的启动路径,完成交叉编译环境的建立,上文编译u-boot.bin时已经用到arm-linux-gcc。

2.2.2 配置和编译Linux内核

tar zxvf kernel_armsys_070730.tar.gz(解压内核文件),当出现文件夹/kernel时,就能看到上述几个目录。每个目录下都有很多的相关模块,通过筛选和裁剪,选择所需要的极少部分即可。开发板的内存容量比较有限,而且有很多的用途,不能一味地去装很大的内核,所以只有通过适当地裁剪才能真正达到移植的目的。

配置内核:make menuconfig,对开发板做进一步的裁剪,Load an Alternate Configuration File,选择一个ARMSYS2410板的内核配置文件作为模板:Armsys2410_cfg;选择适合LCD和触摸屏规格的配置,Console drivers→Frame-buffer support→S3C2410 Board LCD Display Size→320x240;触摸屏选择:Character devices→S3C2410 TOUCHSCREEN Size→X>Y,表示横放模式。为了使嵌入式目标系统的Linux内核支持NFS客户端,在进行配置内核时必须选择File systems->Network File Systems->Provide NFSv3 client support 和NFS file system support。做这样简单的配置之后就可以进行编译了,make clean,make dep,创建内核的依赖关系;make zImage,创建内核镜像文件,编译成功后可得到刚裁剪配置的Linux内核压缩映像文件zImage。

2.2.3 zImage的下载

系统映像的下载只能由 bootloader 提供。通过bootloader 提供的命令行或者交互Shell界面可以指定内核映像和文件系统映像的下载位置,也可以检查目标板上内存地址中的内容[6]。使用U-boot下载Linux内核的最快捷方法是通过网络传输。TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议,用于提供不复杂、开销不大的文件传输服务,它基于UDP协议实现。U-boot支持TFTP协议,因此可以利用网络接口,使用tftp传输的方法来下载zImage,在根目录下建一个/tftpboot目录,把zImage拷到/tftpboot目录下,启动tftp:/etc/init.d/vsftpd start。假设PC主机设IP为10.192.3.100,则开发板的设置如下:

使用ping命令查看是否与主机连通,若显示host 10.192.3.100 is alive,说明宿主机已经与目标机建立链接。传输zImage到开发板的内存为:

SMDK2410 # tftp 30000000 zImage ;映像文件zImage传送到暂存地址0x30000000

SMDK2410 # nandw c e0000 30000000 ;写入内核的起始块号为c的NAND FLASH

这样就可以把zImage固化到开发板的内存中,通过boot命令即可启动内核。

2.3 文件系统的移植

文件系统是操作系统中用来管理用户文件的内核软件层。根文件系统是Linux系统的核心部分,包括系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读/写结果的区域。在Linux系统启动时,首先完成内核安装及环境初始化,最后寻找一个文件系统作为根文件系统被加载。嵌入式系统中通常可以选择的根文件系统有:Romfs,Cramfs,Ramfs,YAFFS,JFFS和JFFS2等。本文使用的YAFFS是专为NAND FLASH存储器设计的嵌入式文件系统,适用于大容量的存储设备,YAFFS 是可读写的文件系统,而且保存在文件系统的文件和设置在掉电后不会丢失[1,2]。

U-boot也支持nfs挂载功能,把开发板提供的root-armsys-nfs-050801.tgz放到/armsys2410目录下,解压后的文件名更改为root,这是网络文件系统。在/armsys2410/root/bin/目录下有一个用于下载根文件系统到NAND FLASH的下载工具Writerootfs。把根文件系统压缩包root_armsys_l35t32.tgz拷到在/armsys2410/root目录下,这个压缩包就是用于固化在NAND FLASH上的根文系统YAFFS。

(1) 关闭Windows XP和Linux系统的防火墙,设置文件系统的nfs挂载,在宿主机上先启动NFS服务:/etc/rc.d/init.d/nfs start。设置服务器的共享目录,编辑文件/etc/exports,在文件中添加内容:/armsys2410/root *(rw,sync,no_root_squash),然后保存退出。其中:/armsys2410/root代表要共享输出的root文件系统的共享目录;*代表所有客户机都可以挂载次文件系统;rw代表客户机可以读写许可地挂载它们的根文件系统;no_root_squash表示允许客户机以主机上的root身份挂载根文件系统[2]。

(2) 开发板的启动参数设置:setenv linux_arg root=/dev/nfs init=/linuxrc nfsroot=10.192.3.100:/armsys2410/root ip=10.192.3.200:10.192.3.100:10.192.3.1:255.255.255.0:jmaylin:eth0:off console=ttyS0。它说明宿主机挂载在目标机上的目录是/armsys2410/root。

(3) 重启开发板,看到Welcome to NFS root file system!说明成功挂载主机目录/armsys2410/root。使用Writerootfs命令开始下载文件系统root_armsys_l35t32.tgz,该文件系统集成了Qtoqia等应用程序,开发板上电后,除了进入文件系统外,还在LCD上显示Qtoqia应用程序图形界面。

3 嵌入式Linux应用程序的开发

经过上面的过程,一个嵌入式开发平台基本搭建完成。在这个平台上就能进行各种应用程序的开发。基于ARMSYS2410开发板,其源程序的编写、编译调试等过程都在主机上进行,最后再把编译生成的可执行文件固化到开发板上去运行,下面讨论几种调试方法。

3.1 调试方法

(1) Nfs挂载

在配置内核的时候,选择选项File systems→Network File Systems→Provide NFSv3 client support 和NFS filesystem support,这样才能保证正常地从开发板的文件系统去挂载主机上的共享目录。然后可以在主机上使用交叉编译工具编译和直接运行,只要把相应的库文件设置好即可。这种方法不用传递可执行文件,即可在开发板的文件系统直接运行主机上的可执行文件,方便快捷,是较为常用的一种调试方法。

(2) ftp传输方法

① 查看主机有没有装ftp服务:

rpm -qa|grep vsftpd,然后启动ftp:/sbin/service vsftpd start。主机上的/var/ftp目录就是ftp的共享目录,把可执行文件(比如hello)放在该目录下。

② 开发板文件系统:

设置开发板的IP,使其与宿主机IP处于同一网段。在开发板的文件系统里ftp登录主机:ftp 10.192.3.100,使用匿名登录,显示主机共享/var/ftp目录下的hello可执行文件,下载可执行文件到开发板的文件系统:ftp>get hello。通常,使用这种方法还要修改可执行文件的执行模式。

(3) U盘挂载

可以把在主机上可执行文件hello拷到U盘里面,利用开发板的USB HOST端口把U盘挂载到板上,然后拷贝U盘里的hello到文件系统里执行。

(4) 整体打包

上面几种方法都是在已有的文件系统上操作的,整体打包的方法是对预下载的整个文件系统进行编辑。加载的文件系统YAFFS是压缩格式的root_armsys.tgz,只有当开发板上电启动后,才把根文件系统解压出来。在主机Linux系统/armsys2410目录下,新建一个test文件夹,把root_armsys.tgz拷到/test目录下并解压,再把应用程序的可执行文件放到/test目录下,重新把所有文件打包成root_armsys.tgz:tar -czvf root_armsys.tgz ./* ,再一次加载到NAND FLASH中,更新原来的文件系统。这种方法是直接对整个根文件系统进行编辑,适用于在开发文件系统时使用,但是每次都要重新下载整个文件系统,比较繁琐。

3.2 Qtopia应用程序

Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,2000年11月发布了第一个Qt/E版本,而Qtopia则是构建于Qt/E之上的类似桌面系统的应用环境,包括PDA和手机等掌上系统常见的功能,如:电话簿、图像浏览、Media播放器、日历等[6]。Qt应用程序实现的是对静态图像的显示及其形态的处理操作[7]。

为了开发和调试Qtopia应用程序,必须安装基于PC和ARM的Qt开发环境。下面以一个简单的菜单程序为例来说明Qtopia应用程序的开发过程。程序开发流程如图2所示。

(1) 使用基于PC的Qt开发环境编译

在建立基于PC的Qt开发环境时,需要编辑/etc/ld.so.conf,使得在源程序编译链接过程中能找到相应的库文件:/armsys2410/qt_x86/qt/lib和/armsys2410/qt_x86/qtopia/lib。保存退出后激活设置ldconfig。当用完库后可以把/etc/ld.so.conf改回来,不然会影响系统上其他应用程序的启动,加上“#”将其注释掉。设置基于PC的Qt开发环境的环境变量,保证编译的正确路径:source set-env。主程序源代码main.cpp如下:

利用Qt环境调试过程:

① 产生工程文件:progen -t app.t -o main.pro;

② 产生Makefile文件:tmake -o Makefile main.pro,修改Makefile中的lib,加链接库-lm lstdc++即可;

③ 运行make产生menu的可执行文件;

④ 打开虚拟帧缓存:qvfb &,运行可执行文件menu:./menu -qws。

(2) 使用基于开发板的Qt开发环境编译

设置基于ARM的Qt开发环境的环境变量:source set-env。为了能生成可在目标板上运行的可执行文件,需要把生成Makefile文件中的编译器、链接器gcc,g++分别改为arm-linux-gcc和arm-linux-g++,其他步骤同上。最后选择一种文件传输办法,把menu送到ARM板上运行,执行界面如图3所示。

4 结 语

本文在分析ARM和Linux特点的基础上,详细介绍了Linux系统移植的各个部分,其中包括U-boot,zImage和YAFFS文件系统的具体操作过程。由此构建了嵌入式Linux开发系统平台,指出Linux移植过程中系统的精简度、安全性、稳定性等方面均需要开发人员做进一步的考虑和研究。 给出了几种常见的嵌入式开发的调试方法,并进行简单的讨论和比较。最后通过调试和编译简单的Qtopia应用程序,说明了嵌入式应用程序的开发过程,为开发实际应用程序和驱动程序奠定了基础。

参考文献

[1]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].北京:电子工业出版社,2005.

[2]王黎明,陈双桥,闫晓玲,等.ARM9嵌入式系统开发与实践[M].北京:北京航空航天大学出版社,2008.

[3]Samsung Electronic.User′s mannual S3C2410X 32Bit RISC mi-croprocessor[M].South Korea:Samsung Electronic,2003.

[4]叶林,方建军.基于ARM9嵌入式系统的BootLoader设计[J].科技信息,2009(11):36-37.

[5]邹颖婷,李绍荣.ARM9上的嵌入式Linux系统移植[J].自动化技术与应用,2009,28(6):43-45.

[6]刘文峰,李程院,李善平.嵌入式Linux操作系统的研究[J].浙江大学学报:工学版,2004,38(4):447-452.

[7]刘福才,赵佳伟,汤丽娜.基于嵌入式Linux系统的Qt/Em-bedded图像处理界面开发[J].计算机应用与软件,2009,26(11):116-117,149.

[8]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.

[9]邹思轶.嵌入式Linux设计与应用[M].北京:清华大学出版社,2002.

3.嵌入式Linux开发环境搭建 篇三

Ubuntu 8.10的安装和网络配置

1.安装虚拟机软件Vmware 6.0.2 虚拟机安装版本Vmware 6.0.2的版本

在 winxp操作系统下用鼠标双击VMware-workstation-6.0.2-59824图标,开始安装虚拟机Vmware,如下图所示:

双击VMware-workstation-6.0.2-59824图标,出现vmware的安装界面,所有的选项都采用默认值,用鼠标点【下一步】,然后出现安装进度条,系统开始安装vmware,等待安装完成后,出现如下安装完成界面:

用鼠标点【Finish】,虚拟机安装完成。系统提示重新启动计算机,选择【是】重新启动计算机,电脑重新启动后,虚拟机安装完成。

2.新建虚拟机

打开Vmware虚拟机软件,选【File】->【New】->【Virtual Machine】,弹出新建虚拟机向导对话框,注意以下几个重要的选项,其他都采用默认选项即可。选择操作系统和版本,如下图所示:

选择虚拟机名称和存放的路径,如下图所示:

设置虚拟机硬盘大小为20G ,如下图所示:

点击【完成】按钮,这样我们就新建了一个虚拟机,下面我们设置一下虚拟机的内存,步骤如下:

点击虚拟机Vmware的【VM】->【settings】时菜单,弹出虚拟机设置对话框,设置虚拟机使用的内存为512M或1024M,如下图所示:

点击【OK】按钮,这样我们就新建了一个虚拟机,该虚拟机的硬盘为20G, 内存为512M.接着我们就可以在该虚拟机上安装ubuntu操作系统了。

注: 键盘和鼠标控制权在虚拟机和Windows系统之间的切换是通过组合键【Ctrl】+【Alt】来实现的。安装Linux操作系统ubuntu Ubuntu安装版本 ubuntu 8.10 点击vmware软件工具栏上的【绿色箭头】启动虚拟机,如下图所示:

点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:

在Connection中选中【Use ISO image】,设置ubuntu软件安装包的路径,如上图所示。然后重新启动虚拟机,开始在虚拟机上安装ubuntu操作系统。重新启动虚拟机后,出现如下ubuntu安装界面:

选择语言版本为【English】,然后按【回车】键,出现如下安装界面:

选择Install Ubuntu,然后【回车】,开始安装Ubuntu,出现ubuntu安装进度界面如下:

在出现的安装向导主要设置一下城市和用户名密码,如下图所示,其余的安装对话框都采用默认值,选择【Forward】即可。设置安装所在城市

当出现安装所在城市对话框时,选择【ShangHai】,通过选择地图上的点选择,如下图所示:

设置系统的用户名和密码

系统安装过程中出现设置用户名和密码对话框时,设置登陆到ubuntu的用户名和密码,如下图所示:

然后点击【Forward】按钮,在出现的最后安装向导对话框中点击【Install】按钮,开始安装ubuntu,ubuntu安装完成后,最后出现安装完成对话框,如下图所示:

点击【Restart now】开始重新启动ubuntu系统。在系统重启过程中出现如下界面:

提示移走光驱中的磁盘后按回车键,这时我们点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:

在Connection中选中【Use physical drive】,点【OK】按钮,然后按【回车】即可,系统正常启动,在出现输入用户名和密码提示框时,输入刚才在安装过程中设置的用户名和密码即可。这样就进入了我们刚安装好的ubuntu操作系统。

3.安装Vmware tools工具软件

Vmware tools工具软件用于在window系统和虚拟机的ubuntu系统之间进行数据传递,安装好Vmware tools之后,鼠标可以在window系统和虚拟机之间平滑切换,在window系统和虚拟机之间可以直接通过【复制】和【粘贴】的方式进行数据交换。Vmware tools的安装步骤如下: 1)设置Vmware tool软件的路径为 C:Program FilesVMwareVMware Workstationlinux.iso.点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:

点击【OK】确定,这时在ubuntu的桌面上出现一个光驱图标,如下图所示:

双击Vmware Tools图标,打开光盘文件夹,可以看到在该光盘目录下看到VmwareTools-6.0.2-59824.tar.gz文件,如下图所示:

返回系统桌面,在点击系统菜单【Places】->【Home Folder】,进入用户目录cao,在用户目录下建立Soft目录,把VmwareTools-6.0.2-59824.tar.gz复制到Soft目录下。

在安装VmwareTools-之前我们要先解锁root用户,点击桌面系统菜单 【System】->【Administration】->【Users and Groups】,弹出用户设置对话框如下:

选中root用户,然后点击下面的 【Unlock】,在点【Close】按钮关闭对话框。接着开始设置root用户密码,点击桌面系统菜单 【Applications】->【Accessories】->【Terminal】,进入用户字符终端操作界面如下图所示:

按照上图所示输入命令sudo passwd root设置root用户密码; 提示password for cao时,输入 cao 用户密码;

提示 Enter new UNIX password时,输入root用户密码;

提示 Retype new UNIX password时,再次输入root用户密码; 最后显示password更新成功。

最后输入命令 su切换到root用户,在提示Password时,输入我们刚才设置的root用户密码即可,然后我们可以看到我们成功切换到root用户了,命令提示符由以cao开头改为以root开头了,表示我们已经成功切换到了root用户。

安装Vmware Tools工具 打开ubuntu 字符操作终端,进入到Soft目录,解压VmwareTools-6.0.2-59824.tar.gz软件包,解压完成后,我们看到在Soft目录下生成了一个新的文件夹vmware-tools-distrib,如下图所示:

执行su命令切换到root用户,执行cd vmware-tools-distrib命令进入到vmware-tools-distrib目录,执行ls命令查看该文件夹下的文件,我们可以看到vmware-tools-distrib文件夹下有一个vmware-install.pl安装脚本文件,在操作终端下通过输入命令./ vmware-install.pl执行该脚本文件安装vmware-tools 即可。如下图所示:

然后开始安装vmware Tools工具,安装过程中出现一些选项全部采用默认值,一直按【回车】即可,最后操作终端输出如下提示安装成功信息,如下图所示:

Vmware Tools安装成功后,我们就可以在Windows和虚拟机的ubuntu之间直接通过【复制】和【粘贴】命令进行数据交换了。

网络配置

Ubuntu的虚拟机安装模式下的网络配置

虚拟机下安装好ubuntu之后,在【system】下点【Network Configuration】,弹出Network Connections对话框:

选取Wired选项卡,选中eth0, 点 Edit 按钮,弹出如下网络接口eth0编辑对话框:

注:如果此处没有显示eth0网络,则在windows 下手工配置网络接口的IP地址,然后再重新启动虚拟机,再进入上述网络配置对话框,一般都会出现eth0网络。

在网络接口eth0编辑对话框配置eth0的IP address 为 192.168.0.220 ,Netmask为255.255.255.0,Gateway 为 192.168.0.1, DNS为 218.2.135.1,配置完成后,点OK即可。IP地址,网络掩码,网关的具体配置值需要根据实际网络环境配置。

注:如果这样配置不能上网,可以尝试通过DHCP方式获取IP地址,DNS还是手动设置。

配置完成后,重新Enable Networking即可,如下图所示:

这样就完成了Ubuntu的网络配置,配置完成后,就可以在ubuntu里面打开浏览器上网了。

设置软件源服务器

在全球很多国家都设置有为ubuntu系统服务的服务器,上面有很多为ubuntu提供的应用软件,我们通过设置软件源服务器,来实现在线通过网络完成软件的安装,即通过一条命令实现软件的搜索,下载和安装,同时会安装该软件需要的依赖文件,同过在网络来安装ubuntu上的应用软件非常方便。Ubuntu软件源服务器的设置步骤如下:

1)在桌面系统菜单上点击【System】->【Administration】->【Software Source】,弹出软件源设置对话框如下:

在Download from 里选择软件源服务器,我们一般选择 Taiwan的倒数第1或第2个服务器,如上图所示,选择好软件源服务器后,点【Close】按钮,弹出如下对话框提示可获得的软件包信息已经过时,需要重新更新。

点击【Reload】按钮更新可获得的软件包信息。更新完成后,我们就完成了ubuntu软件源服务器的设置。

安装libncurses5-dev软件包 在ubuntu环境下,我们用命令make menuconfig来对内核进行裁剪和配置时,需要用终端模式下的字符菜单支持软件包libncurses5-dev,下面我们就通过网络的方式来安装libncurses5-dev软件包,安装的前提是已经设置了软件源和ubuntu系统的网络工作正常。安装libncurses5-dev非常简单,在终端模式下输入:apt-get install libncurses5-dev即可。如下图所示:

这样,libncurses5-dev就安装好了,我们可以在终端模式下通过make menuconfig命令来配置和裁剪linux内核了。

安装交叉编译器arm-linux-gcc 嵌入式开发的应用程序编译好后不是在PC机上运行,而是在我们的ARM开发板上运行,这时需要用arm-linux-gcc 交叉编译器编译。安装交叉编译器非常简单,步骤如下:

1)拷贝arm-linux-gcc交叉编译器软件包arm-linux-gcc-4.3.2.tgz到/home/cao/Soft目录。2)进入到Soft目录,在该目录下执行tar zxvf arm-linux-gcc-4.3.2.tgz –C / 命令 解压arm-linux-gcc-4.3.2.tgz。如下图所示:

注: C是大写,C后面有个空格

该命令执行后,将把arm-linux-gcc 安装到 /usr/local/arm/4.3.2 目录。arm-linux-gcc编译器安装好后,我们还要把交叉编译器arm-linux-gcc的路径加入到系统的PATH环境变量,这样在操作终端的其他任意目录下都可以使用arm-linux-gcc。设置环境变量的步骤如下: 1)在终端界面下输入 gedit /root/.bashrc ,编辑./bashrc 文件,如下图所示:

2)在.bashrc文件中增加如下命令把交叉编译器的路径增加到环境变量PATH中, export PATH=$PATH:/usr/local/arm/4.3.2/bin,然后保存推出,如下图所示:

重新打开终端,通过su命令切换到root用户,输入arm-linux-gcc –v就可以看到我们安装的交叉编译器arm-linux-gcc的版本信息了。如下图所示:

4.嵌入式系统实验报告 篇四

班 级:学 号:姓 名:成 绩:指导教师:

20110612 2011061208 李晓虹 武俊鹏、刘书勇

1.实验一

1.1 实验名称

博创UP-3000实验台基本结构使用方法

1.2 实验目的

1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。

1.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发

环境、仿真器驱动程序、超级终端通讯程序。

1.4 实验内容及要求

1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。

1.5 实验设计与实验步骤

1.新建超级终端

2.选择ARM 开发实验台串口。

完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置 3.保存为一个特定超级终端到桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。4.启动开发板,按住任意键,使开发板进入BIOS设置状态。

5.在超级终端的界面上,显示BIOS版本信息,以及相应的测试指令。操作时,要在PC机上输入小写的字母快捷键,进入到相应的功能中去。6.按照超级终端上的提示信息,进行功能的测试。

1.6 实验过程与分析

本次实验操作起来并不困难,因为此次实验属于验证型实验,按照实验资料所给的提示信息,以上面的步骤,即可得到实验的结果。进入到BIOS界面后,按照超级终端上的提示信息来进行功能

1.7 实验结果总结

在实验过程中,我们进行的很顺利,没有遇到什么问题,在超级终端界面,按提示的快

捷键来测试对应的功能。如

e:测试由ZLG7289 驱动的LED 显示,共分3 步,请看超级终端提示按任意键继续,同 时观察LED 的变化,最后返回主菜单。

b:引导FLASH 中的应用程序system.bin。执行该功能将退出BIOS 状态,把控制交给应 用程序,等。

1.8 心得体会

通过此次实验,我对于实验环境有了初步的了解与认识,对于嵌入式也有了更深一步的认识。同时实验过程中,我学会了第一次接触的超级终端的使用方法,并能够熟练掌握,知道其工作的原理。

2.实验二

2.1 实验名称

ADS1.2软件开发环境使用方法

2.2 实验目的

1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。

2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。

2.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发

环境、仿真器驱动程序、超级终端通讯程序。

2.4 实验内容及要求

掌握AXD Debugger的使用方法,学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机之间的串行通讯:ARM 监视串行口;将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的);即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

2.5 实验设计与实验步骤

(1)新建工程,选择菜单中的Project | Add Files 把和工程相关的所有文件包括init和startup 子目录加入到工程中。ADS1.2 不能自动按文件类别对这些文件进行分类,需要的话可以执行菜单Project | Create Group 创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。(另一种办法是,在新建工程时ADS 创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。选中所有目录拖动到任务栏上的ADS 任务条上,不要松

开鼠标当ADS 窗口恢复后再拖动到工程文件窗口,松开鼠标。这样ADS 将以子目录名建立同名文件组并以此对文件分类。)

(2)双击Main.c 打开该文件,可以看到Main()函数的内容如下所示。int main(void){ ARMTargetInit();//开发版初始化 LCD_Init();LCD_ChangeMode(DspTxtMode);//转换LCD 显示模式为文本显示模式 LCD_Cls();//文本模式下清屏命令

LCD_printf(“Hello world!n”);//向液晶屏输出 Uart_Printf(“nHello world!n”);//向串口输出 while(1);}(3)利用上个实验中的通讯软件超级终端来将生成的文件放到嵌入式开发平台中。(4)重启实验台即可看到LCD上显示的“Hello world!” 2.6 实验过程与分析

新建工程,然后将所需的工程文件加载打工程目录下,编译生成system.bin文件,将文件导入到实验台中,然后重启实验台,即可得到实验结果。

2.7 实验结果总结

超级终端输出一些相对应的代码的执行结果。熟悉了ADS1.2 开发环境以及学会了ARM 仿真器的基本使用。使用ADS 编译、下载、调试并跟踪一段已有的程序,并大致了解了嵌入式开发的基本思想和过程。

2.8 心得体会

通过此次实验,我对于嵌入式开发的基本思想有了一定的了解,嵌入式开发采用的是交叉编译环境,所以在一些方面会有所限制。对于初学者来说,通过一两次实验结果的演示就能够对实验台有深入的了解不可能的,所以在后续的实验中,我要好好努力,认真做好课程实验为后续的课程设计实验打下基础。

3.实验三

3.1 实验名称

键盘及LED实验

3.2 实验目的

1.学习键盘及LED 驱动原理。

2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。

3.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开

环境、仿真器驱动程序、超级终端通讯程序。

3.4 实验内容及要求

编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字。

3.5 实验设计与实验步骤

1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)。3.编写ZLG7289 驱动函数(ZLG7289.c)。4.定义键盘映射表:(Keyboard16.c)。5.定义键值读取函数。

6.编写主函数,将按键值在数码管上显示。

3.6 实验过程与分析

此次实验中,我们根据已有实验,进行调试,查看程序的运行效果。根据效果,我们又回到实验代码中,然后对代码进行深入的研究,查看每部分功能所对应的代码,通过不断的调试编译,我们最终对该实验用到的代码有了更深的认识。从而能够按照要求,完成我们自己实验。

3.7 实验结果总结

通过小键盘的按键,键值可以在LED上显示出来。并学习了键盘及LED 驱动原理以及掌握了ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。

3.8 心得体会

在这次实验中让我对嵌入式的实验箱有了进一步的认识,并且进一步了解的ARM实验的原理和实验情况,能够对源代码进行正确了理解。并且能修改这些源代码能够使其工作在自己的预期的工作状态和输出自己想要的结果

4.实验四

4.1 实验名称

电机转动控制及中断实验

4.2 实验目的

1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。

2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。

3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。

4.了解44B0处理器上中断的应用。

5.学习在44B0处理器上中断的应用。

6.进一步熟悉平台外围硬件及其驱动程序的编写。

4.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

4.4 实验内容及要求

1.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。

2.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。

3.通过键盘控制直流电机与步进电机的切换。4.设置并启动定时器。

5.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。

4.5 实验设计与实验步骤

1.添加并打开工程。

2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。

4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。

4.6 实验过程与分析

1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。

3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。

4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。

4.7 实验结果总结

实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。

在通过本次实验,我初步了解的实验的目的所在,并且利用所给的源代码能够,调试出所预期的结果,而且能够根据已给的源代码修改得到所需的结果。

4.8 心得体会

通过本次实验,掌握了电机工作原理,了解了中断的意义和实现方法,实现了简单了中

断处理程序,更加了解了中断的意义。

5.实验五

5.1 实验名称

LCD驱动控制实验及触摸屏驱动实验

5.2 实验目的

1.了解触摸屏的基本概念与原理。

2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。

5.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

5.4 实验内容及要求

1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。

5.5 实验设计与实验步骤

1.添加并打开工程。

2.在头文件中定义宏和常量及驱动函数。3.校准触摸屏坐标,进行坐标转换。4.实现触屏取点并显示功能。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。

5.6 实验过程与分析

1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。

2.获取第一个点坐标并储存,获取第二个点坐标并储存,编写划线函数,取得两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。

3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。

5.7 实验结果总结

了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。

5.8 心得体会

通过本次实验,使我了解了怎么在一块嵌入式实验箱 通过编程控制实验箱上得硬件,比如在本次实验中的控制LCD屏幕就是,在屏幕上点击,然后得到在LCD屏上点击的位置。本次实验初步完成了实验结果。

6.实验六

6.1 实验名称

UCOS-Ⅱ在ARM微处理器上的裁剪

6.2 实验目的

1.了解UCOS-Ⅱ内核的主要结构。

2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。

4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。

6.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

6.4 实验内容及要求

对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。

6.5 实验设计与实验步骤

编辑OS_CFG.H文件。OS_CFG.H文件中的内容可分为两大类:服务功能的配置和数据结构的配置。

一.服务功能的配置:

根据程序中的实际情况,保留自己要用的系统服务功能,删除自己不需要的服务功能。进行合理配置后,是我们自己系统的目标代码比较紧凑,从而降低了对程序代码存储空间的要求。如果代码存储空间足够大的话,那就将全部系统服务功能全部配置为1。不需要考虑功能裁剪。

二.数据结构功能的配置: 与任务有关的数据结构 1.OS_MAX_TASKS 作用:设置用户程序中可以使用的最多任务数。说明:该值不能超过62.举例: 若程序中用到了三个任务,则该值的最小值 2.OS_LOWEST_PRIO 作用:设置程序中最低任务的优先级。

说明: 设定该值可以节省操作系统使用RAM的空间。任务的最低优先级和最大任务数是没有直接关系的。

6.6 实验过程与分析

按照实验指导书上的步骤进行,得到了要求的系统。

6.7 实验结果总结

按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。

6.8 心得体会

了解了UCOS-Ⅱ内核的主要结构,掌握了UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪

7.实验七

7.1 实验名称

ucos-II移植实验

7.2 实验目的

1.了解UCOS-Ⅱ内核的主要结构。

2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。

7.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

7.4 实验内容及要求

1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。

2.编写两个简单任务,在超级终端上观察两个任务的切换。

7.5 实验设计与实验步骤

1.该实验的文件分为两类,其一是STARTUP 目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的。

2.设置os_cpu.h 中与处理器和编译器相关的代码

3.用C 语言编写6 个操作系统相关的函数(OS_CPU_C.C)4.用汇编语言编写4 个与处理器相关的函数(OS_CPU.ASM)5.编写一个简单的多任务程序来测试一下移植是否成功。

为了使 uCOS-II 可以正常运行,除了上述必须的移植工作外,硬件初始化和配置文件也是必须的。STARTUP 目录下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件 main.c 中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务

创建方法如下:

①在程序开头定义任务堆栈,任务函数声明和任务优先级 ②在main()函数中调用OSStart()函数之前用下列语句创建任务 ③编写任务函数内容

6.编译并下载移植后的uCOS-II 所有的源代码都准备好后就可以进行编译了。在ADS 环境下需要设置工程的访问路径。从菜单Edit | Debug Settings 进入设置对话框,在Target | Access Paths 中选择User Paths 并选上Always search user paths。然后点Add 按钮添加路径ucos-ii 和arch。这主要是设置编译器处理文件包含时的搜索范围。按照实验一的方法可以对编译后的代码进行调试或下载到平台的电子硬盘中。这个实验从结构上看和其他的实验没有多大区别,同样生成可执行文件system.bin。可以在平台BIOS中激活电子硬盘,然后把system.bin 拷贝进去,重启平台,然后在超级终端上观察结果。

7.6 实验过程与分析

操作系统相关的函数:(1)OSTaskStkInit OSTaskCreate()和OSTaskCreateExt()通过调用OSTaskStkInit()来初始化任务的堆栈结构。因此,堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。图12A-2 显示了OSTaskStkInt()放到正被建立的任务堆栈中的东西。这里我们定义了堆栈是从上往下 长的。在用户建立任务的时候,用户传递任务的地址,pdata 指针,任务的堆栈栈顶和任务的优先级给OSTaskCreate()和OSTaskCreateExt()。一旦用户初始化了堆栈,OSTaskStkInit()就需要返回堆栈指针所指的地址。OSTaskCreate()和OSTaskCreateExt()会获得该地址并将它保存到任务控制块(OS_TCB)中。

(2)OSTaskCreateHook 当用OSTaskCreate()和OSTaskCreateExt()建立任务的时候就会调用OSTaskCreateHook()。该函数允许用户或使用移植实例的用户扩展uCOS-II 功能。当uCOS-II 设置完了自己的内部结构后,会在调用任务调度程序之前调用OSTaskCreateHook()。该函数被调用的时候中断是禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。当 OSTaskCreateHook()被调用的时候,它会收到指向已建立任务的OS_TCB 的指针,这 样它就可以访问所有的结构成员了。函数原型:void OSTaskCreateHook(OS_TCB *ptcb)

(3)OSTaskDelHook 当任务被删除的时候就会调用OSTaskDelHook()。该函数在把任务从uCOS-II 的内部任 务链表中解开之前被调用。当OSTaskDelHook()被调用的时候,它会收到指向正被删除任务 的OS_TCB 的指针,这样它就可以访问所有的结构成员了。OSTaskDelHook()可以来检验TCB扩展是否被建立(一个非空指针)并进行一些清除操作。函数原型:void OSTaskDelHook(OS_TCB *ptcb)(4)OSTaskSwHook 当发生任务切换的时候就会调用OSTaskSwHook()。OSTaskSwHook()可以直接访问 OSTCBCur 和OSTCBHighRdy,因为它们是全局变量。OSTCBCur 指向被切换出去的任务 OS_TCB,而OSTCBHighRdy 指向新任务OS_TCB。注意在调用OSTaskSwHook()期间中断 一直是被禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。函数原型:void OSTaskSwHook(void)

(5)OSTaskStatHook OSTaskStatHook()每秒钟都会被OSTaskStat()调用一次。用户可以用OSTaskStatHook()

来扩展统计功能。例如,用户可以保持并显示每个任务的执行时间,每个任务所用的CPU 份额,以及每个任务执行的频率等。函数原型:void OSTaskStatHook(void)(6)OSTimeTickHook OSTimeTickHook()在每个时钟节拍都会被OSTaskTick()调用。实际上OSTimeTickHook()是在节拍被uCOS-II 真正处理,并通知用户的移植实例或应用程序之前被调用的。函数原型:void OSTimeTickHook(void)

7.7 实验结果总结

在超级终端上输出轮流交替run task1和run task2,表明系统正在不断交替运行2个任务。

7.8 心得体会

在这个实验中我们初步了解和测试了实验的内容和源代码实验结果基本上符合预期的要求。了解了µC/OS-II 内核的主要结构和ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。

8.实验八

8.1 实验名称

各接口模块相互衔接综合实验

8.2 实验目的

利用前7次实验所学的知识,综合设计一个至少含有5个模块的实验。

8.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

8.4 实验内容及要求

1.回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制接口模块驱动设计及开发方法。

2.综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少5个模块。

3.尽量使综合应用具有合理功能。

8.5 实验设计与实验步骤

1.新建工程,添加所需的文件。

2.编写计算器的计算程序caculator.c以及caculator.h文件。3.编写音乐播放文件play.c以及play.h文件。

4.修改键盘映射表让键盘上的数字与LCD与LED屏幕上显示的数字相对应。5.对输出在LCD屏幕上的显示结构进行设计

6.进行裁剪和移植功能设计和完成。编译生成system.bin文件,将文件拷贝至实验台内,重启实验台即可看到实验效果

8.6 实验过程与分析

1.完成10以内的加减乘除的计算功能,通过键盘输入,可在LCD屏幕上显示输入的表达式以及得到的输出结果。如“2+3=5”。

2.按任务切换键,实现任务的切换。3.任务被切换到播放音乐的任务中去。

4.任务切换过程将会在串口的超级终端界面有所显示,同时我们设置的将LCD上显示的结果同步到超级终端上。实现串口通信。

5.利用到了直流电机,如果运算范围超出我们规定的运算范围,则电机转动,来提示错误。

6.实现裁剪与移植功能。

8.7 实验结果总结

在这次实验中,我们利用前面所学习的知识,综合利用在此次实验中,我们利用了前面好所学知识中的6个模块,分别是串口通讯,键盘控制,LED与LCD的输出,电机控制,以及裁剪与移植的功能。通过这些功能的结合,我们实现自己所设计的实验的功能。

8.8 心得体会

在此次实验中,我们遇到了一些问题但是过程中遇到了不少问题,说明对实验原理和语句编写还不是很熟悉。总的来说,通过这段时间的训练,我也学会了不少东西,了解了ARM的基本结构,功能等。

9.实验总结与心得体会

通过这次为期一周的嵌入式课程实验,我对于嵌入式有了更加深刻的了解与认识。我是第一次接触嵌入式,以前对于嵌入式的知识了解甚少,但是通过此次实验,我不仅了解了嵌入式,也学会了许多关于嵌入式方面的知识。

通过前面的基础实验,我们对于ARM环境有了更深的了解,掌握了博创平台的使用方法,例如如何使用小键盘,如何使用LCD、LED屏幕,如何控制终端,如何进行多任务之间的切换等等。通过这几次的基础课程实验,我们最后出了计算器,能够实现10以内的加减乘除,在此基础上我们利用多任务,实现播放音乐与计算的切换,还利用点击的转动来提示运算过程中出现的问题。

5.嵌入式Linux系统开发教程实验报告 篇五

在进行嵌入式linux学习开发的过程中,将经常使用到Linux的操作命令。实际上,网上press 是一个相当古老的 unix 压缩指令,压缩后的文件是以.Z 作为后缀名。

解压:uncompress FileName.Z 压缩:compress DirName 7)

.tar.Z格式

解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName 8)

.zip格式

ZIP因为格式开放而且免费,越来越多的软件支持打开Zip文件。

解压:unzip FileName.zip 压缩:zip FileName.zip DirName 以上8种打包压缩算法都有所区别,最终导致的结果是压缩时间和压缩大小的不一样。每一种压缩格式都有其优势和不足,在何种场应该使用何种压缩格式就得视实际情况而定了。

上一篇:公司上半年基层党建工作述职报告下一篇:海边的事家长助教活动方案

相关推荐