嵌入式课程设计.docx
- 文档编号:15708930
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:38
- 大小:1.09MB
嵌入式课程设计.docx
《嵌入式课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计.docx(38页珍藏版)》请在冰点文库上搜索。
嵌入式课程设计
有操作系统的嵌入式系统软件开发
摘要:
随着科技的进步,嵌入式技术被广泛的应用在工业控制和电子信息领域。
而嵌入式操作系统的产生也极大的方便和简化了控制中的问题解决。
为了更好的掌握嵌入式系统软件的操作知识要点,本设计在Linux开发环境下完成LED显示和串口通信两个任务在内核裁剪的编译以及硬件电路的设计。
实现两个进程的调度,同时可以通过计算机的超级终端显示口通信,在硬件电路中实现LED的显示功能。
关键词:
嵌入式系统;Linux;uCLinux操作系统
第1章绪论
1.1背景和意义
进入90年代以来,以计算机技术、通信技术和软件技术为核心的信息技术取得了更加迅猛的发展,各种装备与设备上嵌入式计算与系统的广泛应用大大地推动了行业的渗透性应用在新需求的推动下,嵌入式操作系统内核不仅需要具有微型化、高实时性等基本特征,还将向高可信性、自适应性、构件组件化方向发展;支撑开发环境将更加集成化、自动化、人性化;系统软件对无线通信和能源管理的功能支持将日益重要。
嵌入式技术正飞速发展,并期待着在各种行业的深入渗透。
近十年来,嵌入式操作系统得到飞速的发展:
微处理器从8位到16位、32位甚至64位;从支持单一品种的CPU芯片到支持多品种的;从单一内核到除了内核外还提供其他功能模块,如文件系统,TCP/IP网络系统,窗口图形系统等;并形成包括嵌入式操作系统、中间平台软件在内的嵌入式软件体系。
硬件技术的进步,推动了嵌入式系统软件向运行速度更快、支持功能更强、应用开发更便捷的方向不断发展。
同时,基于嵌入式技术的应用和技术创新,将推动新产品、新产业的诞生。
在巨大的市场需求和新的产业契机的推动下,嵌入式软件成为中国软件业的一次难得的机遇,是10年一遇的机会。
智能手机、数字电视、以及汽车电子的嵌入式应用,是这次机遇中难遇的切入点;机遇与挑战并存。
1.2课程设计的目的
(1)了解有操作系统的嵌入式系统软件开发流程;
(2)了解Linux操作系统的基本知识;
(3)熟悉Linux操作系统的常用命令;
(4)掌握Linux操作系统的VI编辑器用法;
(5)掌握Linux操作系统的gcc编译器用法;
(6)了解uCLinux操作系统的基本知识;
(7)掌握uCLinux操作系统内核编译环境的建立;
(8)熟悉uCLinux内核编译步骤;
(9)掌握将编译好的内核下载到系统运行的步骤;
(10)掌握uClinux多任务编程与自启动。
1.3课程设计的要求
(1)掌握课程设计所涉及到的相关知识。
(2)拓宽和加深学生对已学过的理论知识的理解,从而掌握比较全面的专业知识。
(3)进一步熟悉嵌入式系统软件开发流程,更深刻地理解嵌入式系统原理和相关接口电路实现。
(4)按照要求撰写课程设计报告。
1.4有操作系统的软件开发流程及思想
由图1-1可知,在开发嵌入式操作系统及应用软件之前,应首先将操作系统引导程序烧写到Flash的起始地址0x0处,当系统初始化完成后,应当跳转到操作系统的起始地址0x10000处,而不是应用程序的入口处。
图1-1有操作系统的软件开发流程图
第2章有操作系统的嵌入式系统软件开发概述
2.1嵌入式系统简介
2.1.1什么嵌入式系统
目前存在多种嵌入式系统的定义,有的是从嵌入式系统的应用定义的,有的是从嵌入式系统的组成定义的,也有的是从其他方面进行定义的,下面给出两种比较常见的定义:
第一种定义:
根据IEEE(国际电气和电子工程师协会)的定义:
嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”可以看出此定义是从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置。
第二种定义:
嵌入式系统是以应用为中心,以计算机技术为基础,软/硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
总之,可以认为凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。
2.1.2嵌入式系统的发展
嵌入式系统从出现至今已历经30多年的时间,发展历史悠久。
但是直到20世纪60年代末(集成电路化的第三代计算机时期),随着微电子技术的发展,嵌入式计算机才逐步兴起。
近几年来,随着计算机、通信、消费电子的一体化趋势日益明显,嵌入式技术已成为一个研究热点。
纵观嵌入式技术的发展过程,大致经历4个阶段:
第一阶段:
以单芯片为核心的可编程控制器形式的系统。
第二阶段:
以嵌入式CPU为基础,以简单操作系统为核心的嵌入式系统。
第三阶段:
以嵌入式操作系统为标志的嵌入式系统。
第四阶段:
以Internet为标志的嵌入式系统。
综上所述,嵌入式系统技术日益完善,32位微处理器在该系统中占主导地位,嵌入式操作系统已经从简单走向成熟,它与网络,Internet结合日益密切,因而,嵌入式系统应用将日益广泛。
2.1.3嵌入式系统的特点
与通用型计算机系统相比,嵌入式计算机系统具有以下特点:
◆嵌入式系统专用于特定的应用,而PC是通用计算机。
◆使用多种类型的处理器和处理器体系结构。
◆关注成本。
◆大多有功耗约束。
◆经常在极端的环境下运行。
◆系统资源比PC少的多。
◆需要专用工具和方法进行开发设计。
◆嵌入式系统的数量远远超过PC。
2.2嵌入式系统的软硬件
2.2.1嵌入式系统的硬件
嵌入式系统的硬件主要包括以下几个模块,如图2-1所示:
图2-1嵌入式系统的硬件组成
◆嵌入式核心芯片,嵌入式微处理器、嵌入式微控制器、嵌入式数字信号处理器、嵌入式片上系统。
◆用以保存固件的ROM(非挥发性只读存储器)。
◆用以保存程序数据的RAM(挥发性的随机访问存储器)。
◆连接微控制器和开关、按钮、传感器、模/数转化器、控制器、LED(发光二极管)和显示器的I/O端口。
2.2.2嵌入式处理器
嵌入式处理器是嵌入式系统的核心。
嵌入式处理器可分为以下几类:
◆MCU嵌入式微控制器
◆MPU嵌入式微处理器
◆EDSP嵌入式DSP处理器
◆SOC嵌入式片上系统
目前,流行的嵌入式微处理器如下:
ARM,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
目前ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,ARM技术正在逐步渗入到我们生活的各个方面。
PowerPC处理器品种很多,应用范围非常广泛,从高端的工作站、服务器到桌面计算机系统,从消费类电子产品到大型通信设备,无所不包。
MIPS系列微处理器最初是在上世纪80年代由美国斯坦福大学Hennessy教授领导的研究小组研制出来的,目前其使用率仅次于ARM。
MIPS的系统结构及设计理念比较先进,在设计理念上MIPS强调软硬件协同提高性能,同时简化硬件设计。
2.2.3嵌入式操作系统
嵌入式操作系统(EmbeddedOperationSystem,EOS)是一种用途广泛的系统软件,过去它主要应用与工业控制和国防系统领域。
EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动,相对于一般操作系统而言的,它除具有了一般操作系统最基本的功能,还有以下功能:
如任务调度、同步机制、中断处理、文件处理等。
目前有多种嵌入式操作系统得到应用,台式机中常用的Windows和Linux操作系统都有各自的嵌入式版本,现介绍几种常见的嵌入式操作系统。
(1)uClinux
uclinux表示micro-controllinux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。
uCLinux主要是针对目标处理器没有存储管理单元MMU(MemoryManagementUnit)的嵌入式系统而设计的。
它已经被成功地移植到了很多平台上。
由于没有MMU,其多任务的实现需要一定技巧。
(2)RT-Linux
RTLinux(AReal-TimeLinux,亦称作实时Linux)是Linux中的一种实时操作系统。
它由新墨西哥矿业及科技学院的V.Yodaiken开发。
(3)WindowsCE
WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。
(4)μC/OS-II
μC/OS-II的前身是μC/OS,它是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。
它被广泛应用于微处理器、微控制器和数字信号处理器。
(5)VxWork
VxWorks操作系统是美国WindRiver公司设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
2.2.4有操作系统的软件运行模式
在运行有操作系统的嵌入式系统中,主要包含了Bootloader引导程序、操作系统和应用程序这三类的程序。
其中,引导程序是嵌入式软件系统中必不可少的部分,在引导程序运行完成后,嵌入式系统的硬件被设置到合适的状态,从而引导操作系统运行。
这三种程序的不同组成方式和运行方式就形成了不同的软件运行模式。
他们就可以分为如表2-1所示的4种模式。
表2-1有操作系统的嵌入式软件模式
编号
模式
A
BootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序不自启动
B
BootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序自启动
C
BootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序通过网口等下载到SDRAM中
D
BootLoader启动后显示菜单,手动引导操作系统
(1)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统启动后并不自动运行应用程序,而是根据需要手动运行或其他程序调用。
如图2-2所示。
图2-2有操作系统的运行模式A图2-3有操作系统的运行模式B
在该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。
而应用程序和操作系统是一起编译在image.rom里面,操作系统启动之后,应用程序存放在/BIN目录下,但是应用程序还需要手动运行。
(2)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统启动后自动运行应用程序,如图2-3所示。
该模式下,BootLoader完成系统初始化工作后修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。
操作系统启动完毕后,会自动运行应用程序。
(3)BootLoader启动之后直接引导操作系统运行,应用程序和操作系统单独编译,操作系统启动完毕后,通过网络等通信方式将应用程序下载到操作系统文件夹中,再手动运行应用程序,该方式常用于调试应用程序,如图2-4所示。
图2-4有操作系统的运行模式C图2-5有操作系统的运行模式D
在该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。
而image.rom映像文件里面并未包含应用程序,操作系统启动之后,通过网口、串口等方式将单独编译生成的应用程序下载至操作系统的可写目录中,再手动运行。
(4)BootLoader初始化完毕后,并不是直接就引导操作系统执行,而是进入到一个命令行界面中,可以输入相应命令对系统进行操作,也可以引导操作系统。
如U-Boot在初始化完毕之后,进入命令行界面,用户可通过相应命令,来控制系统通过串口或网口下载文件、烧写Flash存储器、测试存储器等操作,如图2-5所示。
在该模式下,BootLoader的功能已经不再限于系统的初始化程序。
目前常用的集中通用BooLoader均提供了复杂的命令接口,可在BootLoader中对硬件进行大量操作,已相当于一个微型操作系统。
第3章uClinux操作系统
3.1uClinux的目录结构
uClinux的源代码可从www.uClinux.org下载,其组织成以下列结构:
根目录是uClinux-xxx(如:
uClinux-Samsung)。
其中,内核放在linux-xxx下,(xxx是版本号,2.0.x或2.4.x)。
一些应用程序放在user目录下,根文件系统放在romfs下,预编译好的linux映像放在images下,包括在RAM和ROM中运行的映像.。
系统的启动代码放在boot目录下。
下面重点描述一下内核的组织结构:
/arch/armnommu:
与架构和平台相关的代码都放在arch目录下,针对ARM的uClinux,有一个子目录和它相对应—armnommu.如果你要把uClinux移植到另外一个ARM板子,大部分的工作就是修改这个目录下的一些文件,例如kernel/head-arm-atmel.S,kernel/setup.c
/drivers:
这个目录下包含了所有的设备驱动程序.。
驱动程序又被分成’block’,’char’,‘net’等几种类型。
/fs:
这里有支持多种文件系统的源代码,几乎一个目录就是一个文件系统,如MSDOS,VFAT,proc,ext2等。
虚拟文件系统(VFS)给所有各式各样的文件系统提供了一个统一的接口。
/include:
相关的头文件。
他们被分成通用和平台专用两部分。
目录‘asm-$(ARCH)’包含了平台相关的头文件,在它下面进一步分成‘arch-$(MACHINE)’,’arch-$(PROCESSOR)’等子目录。
与板子相关的头文件放在arch-$(MACHINE)’下,与CPU相关的头文件放在’arch-$(PROCESSOR)’下。
例如,对于ARM7TDMI,‘proc-armv’子目录就会被用到。
/init:
含一些启动kernel所需做的所有初始化动作,里面有一个main.c针对kernel作初始化动作,设置一些参数等,对外围设备初始化。
/ipc:
提供近程间通讯机制的源代码,如信号量,消息队列,管道等。
/kernel:
包含进程调度算法的源代码,以及与内和相关的处理程序,例如系统调用。
/mmnommu:
在标准linux中有一个mm目录,用来存放内存管理的源代码,包括MMU。
而这个目录是来替换mm的,仅仅包含简单的内存分页管理的源代码。
/net:
支持网络相关的协议源代码。
/lib:
包含内核要用到的一些常用函数。
例如,字符串操作,格式化输出等。
/script:
这个目录中包含了在配置和编译内核时要用到的脚本文件。
3.2linux的常用命令
在linux环境下开发嵌入式软件,只需掌握一些常用命令即可,下面列出了一些Linux开发中常用命令,也适合于嵌入式Linux系统:
(1)文件列表–ls
ls#以默认方式显示当前目录文件列表
ls-a#显示所有文件包括隐藏文件
ls-l#显示文件属性,包括大小,日期,符号连接,是否可读写是否可执行
(2)目录切换-cd
cddir#切换到当前目录下的dir目录
cd/#切换到根目录
cd..#切换到上一级目录
(3)复制–cp
cpsourcetarget#将文件source复制为target
cp/root/source#将/root下的文件source复制到当前目录
cp-frsource__dirtarget_dir#将整个目录复制,并且是以非链接方式复制。
(4)删除–rm
rmfile#删除某一个文件
rm-frdir#删除当前目录下叫dir的整个目录
(5)移动–mv
mvsourcetarget#将文件source更名为target
(6)压缩与解压–tar
tarxfzvfile.tgz#将文件file.tgz解压
tarcfzvfile.tgzsource_path#将文件source_path压缩为file.tgz
(7)挂接–mount
mount–tyaffs/dev/mtdblock/0/mnt#把/dev/mtdblcock/0装载到/mnt目录。
mount–tnfs192.168.0.1:
/root/mnt#将nfs服务的共享目录root挂接到/mnt目录。
(8)权限更改-chmod
chmoda+xfile#将file文件设置为可执行。
chmod666file#将文件file设置为可读写。
3.3makefile介绍
Linux程序员必须学会使用GNUmake来构建和管理自己的软件工程。
GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。
除此之外,他还具有如下功能:
◆make可被用来维护,更新和重新生成计算机程序组。
◆对于由大量程序模块所构成项目,其用途更为明显,它能够简化目标文件或可执行程序的生成过程,有助于用户模块化地、一致性地编译程序。
◆只有当一个目标有相关文件比目标更新的时候,它才被更新,所以能提高效率。
◆可方便地维护多个文件生成的文档。
(1)makefile的规则
make在执行时,需要一个命名为Makefile的文件。
Makefile文件描述了整个工程的编译,连接等规则。
其中包括:
工程中的哪些源文件需要编译以及如何编译;需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要得可执行文件。
具体规则如下:
target:
prerequisites
[TAB]command1
◆target也就是一个目标文件,可以是ObjectFile,也可以是执行文件。
还可以是一个标签。
◆prerequisites就是,要生成那个target所需要的文件或是目标。
◆command也就是make需要执行的命令(任意的Shell命令)。
(2)make命令
make命令的一般格式:
make【选项】【make描述文件】【宏定义】【目的文件】
make首先分析所有的宏定义参数(带嵌入等号的参数)并进行赋值,宏命令行覆盖在makefile中进行的定义,然后检验选项标志,最后递归的对每一个目的依赖文件进行检查。
(3)makefile中的变量
在Makefile中,变量就是一个名字(像是C语言中的宏),代表一个文本字符串(变量的值)。
在Makefile的目标、依赖、命令中引用一个变量的地方,变量会被它的值所取代(与C语言中宏引用的方式相同,因此其他版本的make也把变量称之为“宏”)。
Makefile有三个非常有用的变量。
分别是$^,$@,$<,代表的意义分别如下:
◆$^:
代表所有的依赖文件
◆$@:
代表目标
◆$<:
代表第一个依赖文件
3.4Vi的介绍与使用
Linux提供了一系列功能强大的编辑器,如vi和Emacs。
vi是linux系统的第一个全屏幕交互式编辑器,从诞生到现在一直得到广大用户青睐。
vi有3种工作模式,分别是命令行模式、插入模式、底行模式。
Vi编辑器没有菜单,所有的操作都是使用命令。
在命令行模式下,文件处于不可编辑状态,输入的任何字符都会当做命令,vi常用命令如下:
(1)命令行模式的命令:
•yy:
复制当前光标所在行
•[n]yy:
n为数字,复制当前光标开始的n行
•p:
粘贴复制的内容到光标所在行
•dd:
删除当前光标所在行
•[n]dd:
删除当前光标所在行开始的n行
•/name:
查找光标之后的名为“name”的字符串
•G:
光标移动到文件尾(注意是大写)
•u:
取消前一个动作(注意是小写)
(2)底行模式的命令:
•:
w保存
•:
q退出vi(系统会提示保存修改)
•:
q!
强行退出(对修改不做保存)
•:
wq保存后退出
•:
w[filename]另存为filename的文件
•:
setnu显示行号
•:
setnonu取消行号
第4章开发环境搭建
4.1实验所需工具清单
生产嵌入式处理器厂商众多,造成了嵌入式处理器种类繁多,因而嵌入式开发工具也是五花八门。
由于实验条件的限制,本次课程设计中选用的嵌入式开发工具及实验仪器如表4-1所示:
表4-1嵌入式开发工具及实验仪器
4.2ADS1.2集成开发环境的介绍与安装
ADS1.2ADS是ARM公司的集成开发环境软件,他的功能非常强大。
ADS包括了四个模块分别是:
SIMULATOR;C 编译器;实时调试器;应用函数库。
C编译器效率极高,支持c以及c++,使工程师可以很方便的使用C语言进行开发。
提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。
配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。
ADS1.2需要硬件支持才能发挥强大功能。
目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。
跟大多数软件一样,ADS1.2的安装只需按照安装向导的提示,并根据所需进行定制,ADS的定制安装如图4-1所示。
图4-1ADS定制安装
4.3JLINK介绍与驱动的安装
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。
配合IAREWARM,ADS,KEIL,WINARM,等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作、连接方便,是学习开发ARM最实用的开发工具。
JLINK驱动安装比较简单,只需根据提示安装即可,安装如图4-2所示,
图4-2JLINK驱动的安装
4.4LINUX开发环境的搭建
建立交叉开发环境的第一步,是建立一个-Linux平台来对应用程序和内核进行编译,这里使用虚拟机VMware和Fedora14来搭建一个在Windows环境下运行的Linux平台。
4.4.1VMwareworkstation的介绍
VMwareWorkstation是一款功能强大的桌面虚拟计算机软件,可在一部实体机器上模拟完整的网络环境以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。
对于企业的IT开发人员和系统管理员而言,VMware在虚拟网路,实时快照,拖曳共享文件夹,支持PXE等方面的特点使它成为必不可少的工具。
第5章操作系统下多任务应用程序开发
5.1操作系统下多任务应用程序的开发流程
操作系统下多任务应用程序的开发流程如图5-1所示,
图5-1开发流程图
5.2操作系统下多任务应用程序的开发环境
通过前面在window系统下安装虚拟机,在虚拟机中创建uClinux系统,在这个系统下进行多任务应用程序的开发。
虽然在无操作系统时,也可以通过中断、查询等手段实现多个任务同时运行,但在操作系统下能更容易的实现个管理多个任务。
具体流程图如图5-2所示。
图5-2流程图
5.3详细操作流程及步骤
首先,把Fedora镜像文件解压出来,解压步骤如图5-3所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计