嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc

上传人:yyf 文档编号:5021894 上传时间:2020-01-29 格式:DOC 页数:24 大小:822.50KB
返回 下载 相关 举报
嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc_第1页
第1页 / 共24页
嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc_第2页
第2页 / 共24页
嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc_第3页
第3页 / 共24页
嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc_第4页
第4页 / 共24页
嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc》由会员分享,可在线阅读,更多相关《嵌入式课程设计-有操作系统的嵌入式系统软件开发.doc(24页珍藏版)》请在三一文库上搜索。

1、成都大学嵌入式系统课程设计目 录第一章课程设计的任务说明11.1课程设计的目的11.2课程设计的要求1第二章有操作系统的嵌入式系统软件开发概述22.1有操作系统的软件开发流程22.2有操作系统的软件运行模式2第三章Linux操作系统简介6第四章uClinux操作系统简介7第五章开发环境的建立85.1建立主机Linux平台85.2安装交叉编译工具12第六章uClinux裁剪与编译136.1uClinux裁剪136.2uClinux编译15第七章操作系统下多任务应用程序开发167.1操作系统下多任务应用程序的开发流程167.2操作系统下多任务应用程序的开发环境167.3操作系统下多任务应用程序的开

2、发177.3.1编写串口、LED应用程序177.3.2添加应用程序至内核并随内核编译18总 结23参考文献2423第一章课程设计的任务说明1.1课程设计的目的(1) 了解有操作系统的嵌入式系统软件开发流程;(2) 了解Linux操作系统的基本知识;(3) 熟悉Linux操作系统的常用命令;(4) 掌握Linux操作系统的vi编辑器用法;(5) 掌握Linux操作系统的gcc编译器用法;(6) 了解uCLinux操作系统的基本知识;(7) 掌握uCLinux操作系统内核编译环境的建立;(8) 熟悉uCLinux内核编译步骤;(9) 掌握将编译好的内核下载到系统运行的步骤;(10)掌握uClinu

3、x多任务编程与自启动。1.2课程设计的要求(1)掌握课程设计所涉及到的相关知识。(2)拓宽和加深学生对已学过的理论知识的理解,从而掌握比较全面的专业知识。(3)进一步熟悉嵌入式系统软件开发流程,深刻地理解嵌入式系统原理和相关接口电路的实现。(4)按照要求撰写课程设计报告。第二章有操作系统的嵌入式系统软件开发概述2.1有操作系统的软件开发流程嵌入式操作系统及应用软件的开发流程如图2-1所示。.rom从Linux转出从windows转入共享文件夹BootLoaderARM-elf-tools交叉编译工具uClinux源代码ADS应用程序2.bin特殊功能寄存器SDRAMFlashRed Hat L

4、inuxVMware共享文件夹ADS0x00x1 0000应用程序1图2-1有操作系统的软件开发流程由图可知,在开发嵌入式操作系统及应用软件之前,应首先将操作系统引导程序烧写到Flash的起始地址0x0处,当系统初始化完了之后,应当跳转到操作系统的起始地址0x1 0000处,而不是应用程序的入口处。2.2有操作系统的软件运行模式在运行有操作系统的嵌入式系统中,主要包含了BootLoader引导程序、操作系统和应用程序这三类的程序。其中,引导程序是嵌入式软件系统中必不可少的部分,在引导程序运行完成后,嵌入式系统的硬件被设置到合适的状态,从而引导操作系统运行。操作系统启动后,才能进一步运行应用程序

5、。这三种程序的不同组成方式和运行方式就形成了不同的软件运行模式。他们就可以分为如表2-1所示的4种模式。表2-1有操作系统的嵌入式软件模式编 号模式ABootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序不自启动。BBootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序自启动。CBootLoader直接引导操作系统,操作系统与应用程序分开编译,应用程序通过网口等下载至SDRAM中。DBootLoader启动后显示菜单,手动引导操作系统。(1)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统启动后并不

6、能自动运行应用程序,而是根据需要手动运行或者由其他程序调用。0x000 00000x001 00000x100 00000x120 00000x3FF 00000x3FF FFFF64 MB16 MB2 MB64 KBBootLoader启动后的编址空间特殊功能寄存器组还没有和物理设备建立映射的区域FlashSDRAM操作系统引导程序应用程序图2-2有操作系统的运行模式A在该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。而应用程序和操作系统是一起编译在image.rom里面,操作系统启动之后,应用程序放在/B

7、IN目录下,后是应用程序还需要手动运行,如图2-2所示。(2)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统启动之后自动运行应用程序,如图2-3所示。16 MB0x000 00000x001 00000x100 00000x120 00000x3FF 00000x3FF FFFF64 MB2 MB64 KBBootLoader启动后的编址空间特殊功能寄存器组还没有和物理设备建立映射的区域FlashSDRAM操作系统引导程序应用程序图2-3有操作系统的运行模式B在该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到

8、操作系统image.rom开始的地址处,引导操作系统运行。操作系统启动完毕之后,会自动执行应用程序,主要是通过uLinux-dist/Vendors/Samsung/4510B/rc文件中添加系统启动后自动执行应用程序的的命令来实现:./bin/led&./bin/uart&命令后面的&符号表示在后台执行程序。(3)BootLoader启动之后直接引导操作系统运行,应用程序和操作系统单独编译。操作系统启动完毕之后,通过网络等通信方式将应用程序下载到操作系统文件夹中,如/var/tmp,再手动运行应用程序。该方式常用于调试应用程序,如图2-4所示0x000 00000x001 00000x100

9、 00000x120 00000x3FF 00000x3FF FFFF64 MB16 MB2 MB64 KBBootLoader启动后的编址空间特殊功能寄存器组还没有和物理设备建立映射的区域FlashSDRAM操作系统引导程序应用程序图2-4有操作系统的运行模式C该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。而image.rom映射文件里面并未包含应用程序,操作系统启动之后,通过网口、串口等方式将单独编译生成的应用程序下载至操作系统的可写入目录(如/var/tmp)中,再手动运行。这种方式适合应用程序调试,

10、不需要每次修改应用程序都重新编译和烧写操作系统。(4)BootLoader初始化完毕之后,并不是直接引导操作系统执行,而是进入到一个命令行界面中,可以输入相应命令进行操作,也可以引导操作系统。如U-Boot在初始化完毕之后,进入命令界面,用户可通过相应命令,来控制系统通过串口或网口下载文件、烧写Flash存储器、测试存储器等操作,如图2-5所示。0x000 00000x001 00000x100 00000x120 00000x3FF 00000x3FF FFFF64 MB16 MB2 MB64 KBBootLoader启动后的编址空间特殊功能寄存器组还没有和物理设备建立映射的区域FlashS

11、DRAM应用程序操作系统引导程序图2-5有操作系统的运行模式D在该模式下,BootLoader的功能已经不再限于系统的初始化程序。目前常用的几种通用BootLoader均提供了复杂的命令接口,可在BootLoader中对硬件进行大量操作,已经相当于一个微型操作系统。第三章Linux操作系统简介Linux是一种计算机操作系统和它的内核的名字。它也是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统(也被称为GNU/Linux)。基于这些组件的L

12、inux软件被称为Linux发行版。一般来讲,一个Linux发行套件包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),X Window,桌面环境(比如GNOME和KDE),办公套件(比如OpenOffice.org),等等。 Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。Linux内核最初是为英特尔386微处理

13、器设计的。现在Linux内核支持从个人电脑到大型主机甚至包括嵌入式系统在内的各种硬件设备。Linux的内核精简而高效,其内核的核心部分小到一张软盘就可以装下,通过对不需要功能的裁剪,Linux内核完全可以小到100KB以下。在嵌入式环境下的资源是非常有限的,所以操作系统的目录树中的所有文件都应该是系统需所必须的的文件,避免浪费的储存空间。Linux的romfs文件新添的根目录结构如图3-1所示。/bin/dev/etc/lib/pro/sbin/tmp/usr/var图3-1romfs文件结构第四章uClinux操作系统简介uClinux是一个完全符合GUN/GPL公约的操作系统,开放源代码。

14、它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是针对微控制领域而设计的Linux系统。 uCLinux是一种优秀的嵌入式Linux版本,是micro-Conrol-Linux的缩写。它秉承了标准Linux的优良特性。他的专门针对没有MMU的CPU,并且经过各方面的小型化改造,为嵌入式系统做了许多小型化的工作,形成了一个高度优化的、代码紧凑的嵌入

15、式Linux。虽然它的体积很小,却仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。uClinux的架构与标准Linux基本相同,只是对内存管理和进程管理进行了改写,以满足无MMU处理器的要求。uClinux针对没有MMU的处理器进行设计,不能使用处理器的虚拟内存管理技术,直接通过物理地址访问存储器,系统进程和用户也是运行在同一个存储空间。uClinux的基本构架如图4-1所示。文件系统内核初始化BootLoader系统调用处理函数C库函数捕获Handler

16、调度器虚拟文件系统管理模块socket驱动网络模块文件系统模块字符设备驱动块设备驱动Mass存储设备驱动网络设备驱动驱动进程管理模块内存管理模块图4-1uClinux的基本构架uClinux的架构与标准Linux基本相同,只是对内存管理和进程管理进行了改写,以满足无MMU处理器的要求。uClinux针对没有MMU的处理器进行设计,不能使用处理器的虚拟内存管理技术,直接通过物理地址访问存储器,系统进程和用户进程也是运行在同一个存储器空间。第五章开发环境的建立5.1建立主机Linux平台建立交叉开发环境的第一步,是建立一个Linux平台来对应用程序和内核进行编译,这里使用虚拟机软件VMware和R

17、ed Hat Linux来搭建一个在Windows环境下运行的Linux平台。具体步骤如下:(1) 在PC上安装并运行VMware,选择New Virtual Machine命令新建虚拟机,选择Custom自定义选项,如图5-1所示。 图5-1虚拟机的安装过程(1)(2) 单击“下一步”按钮,选择Linux版本为Red Hat Linux,为操作系统选择名字和安装路径,如图5-2所示。 图5-2虚拟机安装过程(2)(3) 为系统选择内存,一般为256MB,在此我们采用的512MB,网络连接类型选择第一种,如图5-3所示 图5-3虚拟机安装过程(3)(4) IO adpator类型选择Buslo

18、gic,选择Create a new virtual disk,如图5-4所示。 图5-4虚拟机安装过程(4)(5) 选择SCSI,从硬盘分出4GB的容量,给Linux使用,如图5-5所示。 图 5-5虚拟机的安装过程(5)(6) 定义虚拟机文件名,此时一个新的Virtual Machine就这顶完成了。接下来开始安装Red Hat Linux,这里介绍利用iso文件安装的方式,先将iso文件装在进Linux的光驱,在图5-6所示的CDROM选项上双击后,选择硬盘的iso安装文件。 图5-6虚拟机的安装过程(6)在虚拟机软件执行Start this virtual machine,系统启动Li

19、nux安程序,如图5-7所示。按照提示安装Linux,采用默认选项即可。图 5-7开始安装Red Hat Linux由于Linux与Windows采用不同的文件系统,一般在Linux下无法直接访问Windows的硬盘分区,而以后的实验需要在Linux和Windows之间进行文件交换,因此有必要在Linux虚拟机和Windows主机之间建立一个共享文件夹。首先启动虚拟机,进入系统后选中菜单VMinstall VMware tools,之后在Linux的桌面会出现一个名为VMware-tools的文件夹,如图5-8所示。如果没有自动出现这样的文件夹,可以采用U盘等途径将VMware安装目录里面的l

20、inux.iso文件复制到Linux系统下,挂载此文件即可。图5-8安装VMware Tools由于光驱文件夹是不可写的,因此需将VMware Tools-5.5.1-19175.tar.gz复制到可写目录里,在输入命令#tar xzvf VMware tools-5.5.1-19175.tar.gz解压到当前目录的VMware-tools distrib文件中,运行其中的VMware install.pl文件开始安装。安装完毕后,在/mnt目录下会自动建立一个名为hgfs的文件夹,通过这个目录,就可以在Linux下访问对应的Windows文件夹。进入VMsetting,在Options选项卡

21、下选择Share Folders,单击Add指定一个Windows下文件夹作为与Linux的共享文件夹,如图5-9所示。这样在Linux下的/mnt/hgfs目录中,就可以访问到这里指定的Windows目录,并可以进行读/写操作。图5-9设定共享目录5.2安装交叉编译工具交叉编译是在一个平台上生成另一个平台上的可执行代码。使用交叉编译工具有很多种原因,有时是因为目标平台上不允许或者不能安装所需的编译器;有时是因为目标平台资源贫乏,无法运行所需要编译器;有时是因为目的平台还没有建立,连操作系统都没有,根本无法运行编译器。交叉编译概念的出现和流行是和嵌入式系统的广泛发展同步的。目前常用的计算机软件

22、,都是需要通过编译的方式,把实验高级计算机语言编写的代码(如C代码)编译成计算机可以识别和执行的二进制代码。例如在Windows平台上,可以使用Visual C+开发环境,编写程序并编译成可执行程序。然而嵌入式系统开发中,运行程序的目标平台通常具有有限的存储空间和运算能力,如ARM平台,其一般的静态存储器大概是1632MB,而CPU的主频大概在50500MHz之间。这种情况下,在ARM平台上很难进行本机编译。要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链(Cross Compilation Tool Chain),然后用这个交叉编译工具链编译源代码,再生成可在目标平台上运行的代码。常

23、见交叉编译例子如下:(1)在Windows PC上,利用ADS(ARM开发环境),使用armcc编译器,可编译出针对ARM CPU的可执行代码。(2)在Linux PC上,利用ARM-elf-tools编译器,可编译出针对uClinux平台的可执行代码uClinux的开发环境采用了GNU开发套件,早期的开发工具需要分别从GNU网络下载并安装,如ARM-elf-binutils-2.11-S.i386.rpm、ARM-elf-gcc-2.95.3-2.i386.rpm、ARM-elf-gbd-5.0-1.i386.rpm等软件,现在,通过安装一个集成工具包,就可以完成软件开发环境的配置。第六章u

24、Clinux裁剪与编译实验板所用的uClinux-wsdist.tar.gz内核源代码已经针对硬件配置进行了相应的修改,使用前需要执行相应的编译命令,才能生成可执行的内核映像文件。uClinux是一个功能完善且高度可定制的嵌入式操作系统,并且有图形化的裁剪工具,使得裁剪工程就像Windows下的软件定制安装一样简单。如果只保留必要的模块,编译生成的压缩内核image.rom只有240KB左右,不压缩内核image.rom也只有490KB左右,可以运行只有512KB RAM的系统。uClinux的裁剪包括厂商产品选择,内核版本选择,运行库选择,内核配置和厂商用户程序配置5步。配置的本质是通过ma

25、ke工具来设置源代码中各级目录下配置文件和make文件的宏定义,为下一步的编译提供前提。流程如图6-1所示。编译uClinux包括7个命令,每一步的编译时间都比较长,为了节约等待时间可以将这几个命令放在一个Shell文件里面,批处理完成编译过程。输入make menuconfig配置命令厂商产品选择Linux内核选择库函数选择uC-libc内核选择厂商/用户选择编译uClinux保存配置退出图6-1uClinux裁剪编译流程图6.1uClinux裁剪在Linux虚拟机下新建命令终端,进入uClinux内核目录/ uClinux-dist,在编译之前首先查内核的配置:输入命令#make menu

26、config会出现如图6-2所示的界面。图6-2内核配置菜单对内核进行裁剪,选中Customize Kernel Settings选项,保存并退出,内核保存一些配置以后会进入到内核定制菜单,如图6-3所示图6-3定制用户程序对用户程序进行裁剪,在界面中选中Customize Vendors/User Settings选项,保存并退出,进入用户程序定制裁剪,如图6-3所示。这里一共有11个选项,每一个选项又有很多子程序。每一个子程序都是一个应用程序,用户可以根据系统的作用选择相应程序,表6-1列出了用到的选项,其他的选项均不选。表6-1用户程序定制选项序号选项选择情况( 1 )Core Appl

27、ication选择init、enable consoles hell、expand及子菜单的expand should not write zeros( 2 )Filessystem Application不选( 3 )Network Application选择arp、boa、ifconfig、inetd、ping、ftp( 4 )Miscellaneous Application不选( 5 )BusyBox选择basename、insmod、hostname、Pset 2.1 Kenerel modules6.2uClinux编译完成内核的配置后,依次输入表6-2所示命令,开始对内核进行编译

28、.表6-2内核编辑命令步骤编号命令作用1make dep读取配置过程生成配置文件,创建对应于配置的依赖关系树,从而决定哪些需要编译,哪些不需要编译,并正确设置需要的头文件2make clean删除以前编译内核时留下的各种文件,以避免出现一些错误3make lib-only编译库文件4make user-only编译用户应用程序文件5make romfs建立romfs文件系统下文件目录6make image生成可以烧写到Flash并运行image.rom内核映像文件7make编译完成后,在uClinux-dist/images下会生成图6-4所示的三个文件。图6-4编译生成的映像文件第七章操作系

29、统下多任务应用程序开发虽然在无操作系统时,也可以通过中断、查询等手段实现多个任务同时运行,但在有操作系统下更容易地实现和管理多个任务,事实上,操作系统下的单任务和多任务的开发流程是相同的,而且有丰富的库函数支持,开发难度更低,程序也具有更强的可移植性和可重用性。本课题的任务主要是实现闪灯程序和串口打印程序的开发,以此掌握操作系统下多任务软件开发的方法。7.1操作系统下多任务应用程序的开发流程开发流程如表7-1所示。表7-1 操作系统下应用程序开发步骤步骤1编写程序源代码步骤2添加应用程序至内核添加程序文件至内核源代码目录中为程序文件建立Makefile文件修改内核Makefile文件修改内核配

30、置文件config.in修改内核rc文件设置程序为自启动步骤3编译内核步骤4下载至内核至Flsh存储器操作系统下多任务软件开发流程如图7-1所示。编写源程序使用CodeWarrior编译程序硬件调试将源文件添加到内核将.bin、.rom文件加载到flash将Bootloader编译成.bin文件固化成功,实现自启动剪裁后编译生成.rom文件图7-1多任务软件开发流程7.2操作系统下多任务应用程序的开发环境(1)PC一台(indows XP/2000/98,虚拟机inux系统);(2)实验板一个(附电源线一根);(3)网线一根;(4)串口线一根;(5)超级终端程序;(6)虚拟机运行Linux操作

31、系统(Red Hat Linux 8.0以上);(7)软件资源为PC Linux操作系统,uClinux内核编译工具ARM-elf-tools-20030314.sh,uClinux内核源代码uClinux-wsdist.tar.gz、ADS集成开发环境。7.3操作系统下多任务应用程序的开发7.3.1编写串口、LED应用程序首先在Linux下编写应用程序源代码led.c、uart.c,分别实现闪灯和向超级终端发送字符的功能。led.c源代码如下:#define IOPMOD (*(volatile unsigned *)0x03FF5000) #define IOPDATA(*(volatil

32、e unsigned *)0x03FF5008) void Delay(int i);int main(void)IOPMOD=0x0ffffffff; /设置GPIO口为输出while(1)IOPDATA=0x0F; /点亮2个LEDDelay(100000);/延时IOPDATA=0x00;/熄灭LEDDelay(500000);/延时return 0;void Delay(int i)int j,k;for(j=0;ji;j+)k=0;uart.c的源代码如下:#define IOPMOD (*(volatile unsigned *)0x03FF5000) /定义寄存器地址#defin

33、e IOPCON(*(volatile unsigned *)0x03FF5004)#define IOPDATA(*(volatile unsigned *)0x03FF5008) #define ULCON0(*(volatile unsigned *)0x03FFD000)#define UCON0(*(volatile unsigned *)0x03FFD004) #define USTAT0(*(volatile unsigned *)0x03FFD008) #define UTXBUF0(*(volatile unsigned *)0x03FFD00c) #define URXBU

34、F0(*(volatile unsigned *)0x03FFD010) #define UBRDIV0(*(volatile unsigned *)0x03FFD014) #define ULCON1(*(volatile unsigned *)0x03FFE000) #define UCON1(*(volatile unsigned *)0x03FFE004) #define USTAT1(*(volatile unsigned *)0x03FFE008) #define UTXBUF1(*(volatile unsigned *)0x03FFE00c) #define URXBUF1(*

35、(volatile unsigned *)0x03FFE010) #define UBRDIV1(*(volatile unsigned *)0x03FFE014)void Delay(unsigned int);/声明延时函数void InitUART(int Port,int Baudrate);/声明初始化串口函数void PrintUART(int Port,char *s);/声明串口输出字符函数int Main()InitUART(0,0x500);/19200bps 50MHz 0=COM1;1=COM2for(;)Delay(10);PrintUART(0,罗亮组 通信工程 2

36、00810315136nr );/串口1输出字符return(0);void PrintUART(int Port,char *s)/s是指向字符串的首地址,即T的地址if(Port=0)/如果使用串口0for(;*s!=0;s+)/在C中,0表示一个字符串结束for(;(!(USTAT0&0x40););/判断发送缓冲区是否为空UTXBUF0=*s;/如果为空,把字符写入缓冲区if(Port=1)for(;*s!=0;s+)for(;(!(USTAT1&0x40););UTXBUF1=*s;void InitUART(int Port,int Baudrate) /串口初始化程序if(Por

37、t=0) ULCON0=0x03; UCON0=0x09; UBRDIV0=Baudrate; if(Port=1) ULCON1=0x03; UCON1=0x09; UBRDIV1=Baudrate; void Delay(unsigned int x) /延时函数unsigned int i,j,k;for(i=0;i=x;i+)for(j=0;j0xff;j+)/J执行255次,X加1for(k=0;k0xff;k+);/K执行255次,J加17.3.2添加应用程序至内核并随内核编译编写完应用程序代码后,还须将程序文件添加到操作系统内核源代码目录中,主要步骤如下。(1) 在内核源代码目录

38、/ucLinux-dist/user下新建目录new_one,new_two。并将led.c、uart.c文件复制到该目录下。(2) 在new_one,new_two下新建Makefile文件,添加如下代码:EXEC = led uartOBJS = led.o uart.o all : $ (EXEC) $ (EXEC):$(OBJS) $(CC) $(LDFLAGS)-o $.o $(LDLIBS) romfs: $(ROMFSINST) -e CONFIG_USER_NEW_AP_LED /bin/led $(ROMFSINST) -e CONFIG_USER_NEW_AP_UART/b

39、in/uart clean: rm -f $(EXEC) *.gdb *.elf *.o使用vi编辑器完成代码修改后如图7-2所示图7-2修改Makefile为new_one,new_two文件夹创建Makefile文件,即为led.c和uart.c的编译提供了规则,在整个uClinux内核文件中,文件之间的组织是靠各个文件夹中Makefile文件组织起来的,所以接下来还需把应用程序的编译规则进一步添加到其上级目录的Makefile和系统配置文件中去。(3)编辑user目录下的Makefile文件,添加如下代码。dir_$ (CONFIG_USER_NEW_ONE_LED) += new_on

40、edir_$ (CONFIG_USER_NEW_TWO_UART) += new_two(4)编辑config目录下的config.in文件,添加如下代码。mainmenu_option next_commentcomment Test Programbool Test led CONFIG_USER_NEW_ONE_LEDbool Test uart CONFIG_USER_NEW_TWO_UARTendmenuConfig.in文件是整个系统内核的配置文件,当输入make menuconfig时,也是从这个文件读取相关的配置信息,这一步向系统的配置菜单中添加了一项新的内容 Test Pro

41、gram,而其子目录中分别包含了Test led和Test uart这两个子选项。(5)修改rc文件,设置程序为自启动。修改/uClinux-dist/Vendors/Samsung/4510B/rc文件,用vi编辑器打开该文件,在最后一行添加:./bin/led&./bin/uart&其中,./是运行命令,”&”符号设置程序为后台运行.完成以上设置后,输入make menouconfig,进入Customize Vendors/User Settings,就会看到在上面添加的“Test Program”选项,如图7-3所示。进入该选项,选中Test led 和Test uart,就可以在内核

42、编译过程中把这两个程序编译进去。如图7-4所示图7-3配置用户程序图7-4配置用户程序编译内核完成后将新生成image.rom文件烧写到Flash中,系统上电之后可以看到led和uart两个程序在系统启动后自动运行,进程号分别为17、18,如图7-5所示:图7-5系统启动界面通过编译内核烧写到Flash得到的实验结果,如图7-6所示。图7-6编译内核得到实验结果总 结通过此次课程设计,我对有操作系统的嵌入式系统软件开发的流程有了一个基本的了解,对于Linux系统有了一个大致的认识。为以后从事这方面的工作打下了一个良好的基础,对有操作系统的嵌入式系统软件开发的研究,了解了Linux系统的基本知识

43、,它是是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。熟悉了Linux操作系统的常用命令,掌握了vi编译器、gcc编译器的用法,掌握了uClinux操作系统的基本知识和uClinux操作系统内核编译环境的建立方法及编译步骤。回顾起此次课程设计,真是受益匪浅,从理论到实践,在大约一个星期的时间里,我学到了许多东西。不仅巩固了以前所学的理论知识,而且学到了许多实际操作知识,并且提高分析问题,解决问题的能力和对困难的耐挫力得到了很大的提升。经过实验,逐步了解和掌握了嵌入式有操作系统开发软件的基本步骤,能够解决在开发环境中,软件开发中的基本问题,能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1