版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成都學院(成都大學)CHENGDU UNIVERSITY嵌入式系统课程设计报告题 目 有操作系统的嵌入式系统软件开发学院电子信息工程学院专业电子信息工程(本)学生姓名周超学 号_年级2011级指导教师徐 职称 副教授二一四年六月有操作系统的嵌入式系统软件开发摘要:嵌入式系统大规模的应用于通信、测试、工控等多个领域,进入千家万户。本文基于嵌入 式硬件平台,完成了有操作系统的嵌入式系统软件开发。文章从设计目的、设计要求、嵌入式系 统介绍、Linux操作系统介绍、uCIinux操作系统介绍、系统剪裁与编译等多个方面介绍本系统。实现了在该操作系统下多任务程序开发应用,并且进行编译,能够在超级终端显示信
2、息,从而达 到课程设计要求。关键词:嵌入式;操作系统;Linux ; uCLinux ;目录第1章绪论 01.1研究背景 01.2研究内容 0第2章有操作系统的嵌入式系统软件开发概述 12.1有操作系统的软件开发流程 12.2有操作系统的软件运行模式 1第3章LINUX操作系统简介 53.1 LINUX 操作系统介绍 53.2 LINUX 操作系统的 GCC编译器 5第4章UCLINUX操作系统简介 7第5章开发环境的建立 85.1 建立主机 LINUX平台 85.2安装交叉编译工具 11第6章UCLINUX裁剪与编译 12第7章操作系统下多任务应用程序开发 157.1操作系统下多任务应用程序
3、的开发流程 157.2操作系统下多任务应用程序的开发环境 157.3操作系统下多任务应用程序的开发 15编写串口、 LED应用程序 15添加应用程序至内核,使其随内核编译 20结论 22参考文献 24第1章绪论1.1研究背景随着信息技术的迅猛发展,21世纪以来,人类已进入后PC时代。32位嵌入式系统作为以应用为核心、软硬件可裁剪,并能满足实际系统对功能、可靠性、成本、体积和功耗有特殊要求的 专用计算机系统,已被广泛应用于通信、雷达、测试、工业控制、消费电子等众多领域,正进入 千家万户,成为后 PC时代的主力军。最开始出现的嵌入式系统很多都不采用操作系统,它们只是为了实现某个控制功能,使用一个简
4、单的循环控制对外界的控制请求进行处理。当应用系统越来越复杂、利用的范围越来越广泛 的时候,每添加一项新的功能,都可能需要从头开始设计。没有操作系统已经成为了一个最大的 缺点。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应 有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。从软件方面讲,也有相 当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft 、QNX和 Nuclear等产品。如今,嵌入式系统的应用前景非常广泛,人们会无时无处不 接触到嵌入式产品,从家里洗衣机、电冰箱,到作为交通工具的自行
5、车、小汽车,到办公室里的 远程会议系统等,特别是以蓝牙为代表的小范围无线接入协议的出现,使嵌入式广泛被接收。本文主要研究有操作系统的嵌入式软件开发,达到多功能应用要求,拓宽和加深我们对已学过的理论知识的理解,从而掌握比较全面的专业知识,进一步熟悉嵌入式系统软件开发流程,更 深刻地理解嵌入式系统原理和相关接口电路的实现等。1.2研究内容(1)了解有操作系统的嵌入式系统软件开发流程;(2)了解Linux操作系统的基本知识;(3)熟悉Linux操作系统的常用命令;(4)掌握Linux操作系统的VI编辑器用法;(5)掌握Linux操作系统的gcc编译器用法;(6)了解uCLinux操作系统的基本知识;
6、(7)掌握uCLinux操作系统内核编译环境的建立;(8)熟悉uCLinux内核编译步骤;(9)掌握将编译好的内核下载到系统运行的步骤;(10)掌握uCIinux多任务编程与自启动第2章 有操作系统的嵌入式系统软件开发概述2.1有操作系统的软件开发流程在使用嵌入式操作系统能够应对更复杂的任务,软件也具有更好的可移植性和可重用性。在软 件开发之前,应首先建立交叉开发环境,主要需要如表2-1所示1。表2-1 建立uClinux交叉开发环境软件功能VMware5.5虚拟机平台Red Hat9Linux操作系统ADS 1.2用于通过JTAG接口烧写映像文件至 FlashARM-elf-tools交叉编
7、译工具链各个软件之间的构成关系如图2-1所示。(1) 在PC上的Windows操作系统之上,使用 VMware5.5虚拟机软件来建立虚拟硬件平台;(2) 将虚拟机器操作系统Red Hat Linux安装在此虚拟平台上;(3) 用ADS软件通过JTAG接口下载操作系统映像文件至实验板的Flash存储器;(4) 在虚拟机操作系统上安装交叉编译工具链ARM-elf-tools-20030314.sh。虚拟机操作系统Red Hat Linux图2-1开发环境软件构成1软件的开发流程如图 2-2所示。由图可见,在开发嵌入式操作系统及应用软件之前,应首先将操作系统引导程序烧写到Flash的起始地址0x0处
8、,此处的引导程序与无操作系统的引导程序唯一不同的是:系统初始化完毕之后应当跳转到操作系统的起始地址0x1 0000处,而不是应用程序的入口。2.2有操作系统的软件运行模式在运行操作系统的嵌入式系统中,主要包含了 BootLoader引导程序、操作系统和应用程序这三种类型的程序。其中引导程序是嵌入式软件系统中必不可少的部分,在引导程序运行完成之后,嵌入式系统的硬件被设置的到合适的状态,从而引导操作系统的系统运行。操作系统启动后,才能进步运行应用程序2图2-2有操作系统的软件开发流程这三种程序的不能组成方式和运行方式就形成了不同的软件运行模式,有操作系统的嵌入式软件运行模式如表2-2所示。表2-2
9、有操作系统的嵌入式运行模式编号模式ABootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序不自启动BBootLoader直接引导操作系统,操作系统与应用程序一起编译,应用程序自启动CBootLoader直接引导操作系统,操作系统与应用程序分开编译,应用程序通过网口等下载至 SDRAM中DBootLoader启动后显示菜单,手动引导操作系统(1)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统启动后并不自动运行应用程序,而是根据需要手动运行或由其他程序调用。在该模式下,BootLoader在完成系统初始化工作后, 修改P
10、C指针,直接跳到操作系统image.rom 开始的地址处,引导操作系统运行。而应用程序和操作系统是一起编译在image.rom里面,操作系统启动之后,应用程序存放在 /BEN目录下,但是应用程序还是需要手动运行 3。(2)BootLoader启动之后直接引导操作系统运行,应用程序编译在操作系统的romfs文件系统中,操作系统后自动运行应用程序,如图2-4所示。在该模式下,BootLoader在完成系统初始化工作后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。操作系统启动完毕之后,会自动执行应用程序,主要通过uCli nu x-dist/Ve ndors/Sa
11、ms un g/4510B/rc文件中添加系统启动后自动执行应用程序的命令来实现:./bin/led&./bin/uart &命令后面的&符号表示在后台执行程序。图2-3有操作系统的运行模式A0x3FF FFFFBootLoader启动后的编址空间0x3FF 00000x120 00000x100 00000x000 0000图2-4有操作系统的运行模式B0x001 0000(3) BootLoader启动之后直接引导操作系统运行,应用程序和操作系统单独编译,操作系统启动完毕之后,通过网络等通信方式将应用程序下载到操作系统文件夹中,如/var/tap ,在手动运行应用程
12、序。该方式常用于调试应用程序,如图2-5所示。在该模式下,BootLoader在完成系统初始化工作之后,修改PC指针,直接跳到操作系统image.rom开始的地址处,引导操作系统运行。而image.rom映像文件里面并未包含应用程序,操作系统启动之后,通过网口、串口等方式单独编译生成的应用程序下载至操作系统的可写目录(如/Var/tmp )中,在手动运行。这种方式适合应用程序调试,不需要每次修改应用程序都重新编译和烧写操作系统。BootLoader启动后的编址空间BootLoader启动后的编址空间图2-5有操作系统的运行模式C图2-6有操作系统的运行模式D(4)BootLoader初始化完毕
13、之后,并不是直接就引导操作系统执行,而是进入到一个命令行U-Boot在初始化完毕之后,界面中,可以输入相应命令对系统进行操作,也可以引导操作系统。如进入命令行界面,用户可通过相应命令,来控制系统通过串口或网口下载文件、烧写Flash存储器、测试存储器等操作,如图 2-6所示。在该模式下,BootLoader的功能已经不再限于系统的初始化程序。目前常用的几种通用BootLoader均提供了复杂的命令接口,可在 BootLoader中对硬件进行大量操作,已经相当于一个 微型操作系统4。第3章Linux操作系统简介3.1 Linux操作系统介绍Linux是由芬兰赫尔辛基大学的一名学生Lin us B
14、.Torvolds 在1991年首次编写的。Linux是一个免费的操作系统,用户可以免费获得其源代码,并能够随意修改。它是在共用许可证GPL(Ge neralPublic License)保护下的自由软件,也是好几种版本,女口 Red Hat Linux、Slackware,以及XteamLinux等。Linux具有多任务支持、多用户支持、多处理器支持、跨平台支持、按需调入执行、开放性、设备独立性以及可靠安全性等特点5。Linux的内核精简而高效,其内核的核心部分小到一张软盘就可以装下,通过对不需要功能的裁剪,Linux内核完全可以小到 100KB以下。在嵌入式环境下的资源是非常有限的,所以操
15、作系统的目录树中的所有文件都应该是系统所必须的文件,避免浪费存储空间。Linux的romfs文件系统的根目录结构如图3-1所示。图3-1 romfs 文件结构3.2 Linux操作系统的gcc编译器gcc是GNUfi织免费C编译器,Linux的很多发布默认安装的就是这种。很多流行的自由软件源代码基本都能在 gcc编译器下编译运行。例如,对于一个非常简单的 hello.c 程序,只要在Linux的 bash提示符下输入命令即可编译它:$ gcc -o hello hello.cgcc编译器就会生成一个 hello的可执行文件。在hello.c 的当前目录下执行./hello.c 就可以 看到程序
16、的输出结果。Gcc编译器有许多选项,但对于普通用户来说只要知道其中常用的几个就够了。以下列出几个常用的选项:-o选项表示要求编译器生成的指定文件名的可执行文件;-c选项表示只要求编译器进行编译,而不要进行衔接,生成源文件的文件名命名但把其后缀有.c或.cc变成.o的目标文件;-g选项要求编译器在编译的时候提供以后对程序进行调试的信息;-E选项表示编译器对源文件只进行预处理就停止,而不做编译、汇编和衔接;-S选项表示编译器只进行编译,而不做汇编和衔接;可以使生成的可执行-O选项是编译器对程序提供的编译优化选项,在编译的时候使用该选项,文件的执行效率提高;-Wall选项制定产生全部的警告信息。第4
17、章uCIinux操作系统简介uCIinux是一个完全符合 GNU/GPL公约的操作系统,开放源代码。是Lineo公司的主打产品。在uCIinux这个英文单词中 u表示Micro,小的意思,C表示Control,控制的意思,所以uCIinux就是Micro-Control-Linux,字面上的理解就是”针对微控制领域而设计的Linux系统”。uCIinux从Linux 2.0/2.4内核派生而来,沿袭了 Linux的绝大部分特性。它是专门针对没有MM啲CPU并且为嵌入式系统做了许多小型化的工作。它通常用于具有很少内存或Flash的嵌入式操作系统。它保留了操作系统的所有特性,为硬件平台更好地运行各
18、种程序提供了保证。在GNU通用公共许可证(GNU3PL)的保证下,运行 uCIinux操作系统的用户可以使用几乎所有的Linux API函数,不会因为没有MMI而受到影响。uCIi nux的基本架构如图4-1所示。系统调用处理函数内 核 初 始 化1!虚拟文件系统管理模块1iSocket 驱动1:文件系统模块1i网络模块1 - - - - 调 度 器网络设备驱动字符块设备驱动设备驱动Mass存储设备驱动驱动进内程存管管理理模模块块C库 函 数BootLoader捕获 Handler图4-1 uCIinux的基本构架uCIinux的架构与标准Linux基本相同,只是对内存管理和进程管理进行了改写
19、,以满足无MMI处理器的要求。uCIinux针对没有MMU勺处理器进行设计,不能使用处理器的虚拟内存管理技 术,直接通过物理地址访问存储器,系统进程和用户进程也是运行在同一存储器空间。第5章开发环境的建立5.1建立主机Linux平台建立交叉开发环境的第一步,是建立一个Linux平台来对应用程序和内核进行编译,这里使用虚拟机软件 VMware和Red Hat Linux 来搭建一个在 Windows环境中运行的 Linux平台。(1)在PC上安装并运行 VMware选择NEW Virtual Machine 命令新建虚拟机,选择Custom自定义选项,如图 5-1所示;(2)单击"下一
20、步”按钮,选择 Linux版本为Red Hat Linux ,为操作系统选择名字和安装路径,如图5-2所示;(3)为系统选择内存,一般为 256MB网络连接类型选择第一种,如图5-3所示;Man wa rtfcr ataiAJHM mill耳 力.naalri一匚taf-Ivy V-l£ lilMl lacfilM Viscid=耳rX|La C*.tiuilKpV vd*jl1 d. jmaLn 匕 口 kJ. l -it jf chj n«H ti t Muu.f9 cb i:Mrm itHS niM:BEpFwr -J如j uj-m怙EM'twIuty * r
21、wwff vf hr3a rdLkb*d *UJb UPb “百hl >wf 1'itarlnvtVrii'ii rri-iha wfi cm 曲:川:二:庁斤寸CrratT a i-ievm ihjalmacH上匾Thz ofTiaiDn devcea nrd :ct*igLialianae Ha附Thi Miiua m出治e ixil not b£ t疔口刖|卜世w忡冷恢沁住味皿2 K 丘石H g rrm 31 K £IE l K E Wnrkr niiDn d.jfC« EiudlonnChQi»etlMi mWocilydi
22、 n$d 修耳询lual rnecHne W addiicnsl dt>irc5 dr sprolir cng-rafc*! orlinrr. m #R.hed scciMit i 匕二心 w厂“d E"hjg图5-1虚拟机安装过程(1)图5-2虚拟机安装过程(2)(4) 选择SCSI,从硬盘分出4GB的容量给Linux使用,如图5-4所示。图5-3虚拟机安装过程(3)图5-4虚拟机安装过程(4)(5)定义虚拟机文件名,此时一个新的 Virtual Machine就设定完成了,如图5-5所示。Hn I |Pi.ir|B! - M u Vprb'irl i<vi匚-
23、衍'图5-5虚拟机安装过程(5)接下来开始安装 Red Hat Linux,在虚拟机软件中执行 Start virtualmachine,系统启动Linux安装程序,如图 5-6所示,按照提示安装Linux,采用默认选项即可。由于Linux与Windows采用不同的文件系统,一般在 Linux下无法直接访问 Windows的硬盘区分,而以后的实验需要在 Linux 和Windows之间进行文件交换,因此有必要在Linux虚拟机和 Windows主机之间建立一个共享文件夹。首先启动虚拟机,进入系统后选择菜单VMh in stall VMware tools,之后再Linux的桌面会出现一
24、个名为Vmware-Tools的文件夹,如图5-7所示。如果没有自动出现这样的文件夹,可以采用U盘等途径将 VMware安装目录里面的linux.iso文件复制到Linux系统下,挂载此文件即可。图5-6 开始安装 Red Hat Linux图 5-7 安装 VMware Tools这个文件夹中含有两种格式的安装文件:rpm和tar.gz,前者可以直接运行安装,后者需要解压缩后才能进行安装。由于光驱文件夹是不可写的,因此需将复制到可写目录里(如用户主目录),再输入命令解压到当前目录下的VMware-tool-distrib文件夹中,运行其中的VMware-insll.pl文件开始安装。安装完毕
25、后,在mnt目录下会自动建立一个名为hgfs的文件夹,通过这个目录,就可以在Linux下访问对应的 Windows文件夹。进入菜单 V setting ,在 Options选项卡下选择 Share Folders ,单击 Add指定一个Windows下的文件夹作为与Linux的共享文件,如图5-8所示。这样在 Linux下的mnthgfs 目录中,就可以访问到这里指定的Windows目录,并可以进行读写操作。图5-8设定共享目录VMwareTool安装之后,VMware能够自动地判断鼠标位置是否超出虚拟机Linux的桌面范围,如果超出了,就自动将鼠标切换至Windows桌面。在安装之前,按下C
26、trl加Alt键才能将鼠标从虚拟机Linux中切换出来。如图 5-9所示。5.2安装交叉编译工具交叉编译是一个在平台上生成另一个平台上的可执行代码。使用交叉编译编译工具有多种原因,有时是因为目标平台上不允许或不能够安装所需要的编译器;有时是因为目标平台资源贫乏,无法 运行所需要编译器;有时是因为目的平台还没有建立,连操作系统都没有,根本无法运行编译器。要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链,然后用这个交叉编译工具链 编译原代码。在Linux PC上,利用ARM-elf-tools 编译器,可编译出针对uCIinux平台的可执行代码。从网上下载交叉编译工具ARM-elf-too
27、ls-20030314.sh,并将其复制到 Linux文件夹中,使用root用户登陆,在命令窗口中输入#sh ARM-elf-tools-20030314.sh命令,程序会自动完成安装过程。第6章uCIinux裁剪与编译实验板所用的内核源代码已经针对硬件配置进行了相应的修改,使用前需要执行相应的编译命令,才能生成可执行的内核映像文件。uCI inux 是一个功能完善且高度可定制的嵌入操作系统,并且具有图形化的裁剪工具,使得裁 剪过程就像Windows下的软件定制安装一样的简单。如果只保留必需的模块,编译生成的压缩内核 image.rom只有240KB左右,不压缩内核image.rom也只有49
28、0KB左右,可以运行于只有512KBRAM的系统。uCl inux 的裁剪包括厂商产品选择,内核版本选择,运行库选择,内核配置和厂商用户配置5步。配置的本质是通过 make工具来设置源代码包中各级目录下的配置文件和make文件中的宏定义,为下一步的编译提供前提。在Linux虚拟机下新建命令终端,进入uClinux内核目录/uCIinux-dist,在编译之前首先检查内核的配置:输入命令 #make menuconfig,输入命令后会弹出界面如图6-1所示。(1)uClinux提供了图形界面下的操作剪裁定制选项,他们表示为:(2)Vendor/Product,选择硬件系统的处理器型号,以适应特定
29、硬件平台的要求。这里选中Samsu ng/4510B。(3) Kernel Version ,这表明知道制定的核心来源于Linux核心的2.4版本。(4) Libc Version ,选择特定的库,这里选中uC-lib,该库目前支持 ARM构架的处理器,在它所支持的平台上非常稳定,体积更小。另一个选项是uClibc ,它提供更多的应用程序接口( API),以及一些不常见的、不标准的库程序。因此,如果有一些程序预期要用到一些少见的库,那么需要选择 uClibc 。(5) Default all Settings,所有选项采用默认设置。(6) Customize Kernel Settings,进
30、行内核制定的选项。(7) Customize Ven dorseme nt/User Sett in gs,进行用户程序的制定。(8) Update Default Ven dors Sett in gs,更新默认选项。以上选项中芯片配置、Linux内核和库函数选项与硬件平台相关,不需要进行修改,内核设置 与用户程序设置是可以进行裁剪的。对内核进行剪裁,选中Customize Kernel Setti ngs选择,保存并退出,内核保存一些配置以后会进入到内核定制菜单,如图6-2所示。r in图6-1内核配置菜单BfFD-TuiirizBt rriiur<rid n| liiJilPia
31、( en kidH Writll ¥lI 4 UM lriifUd ill kmrge iion图6-2定制用户程序F面对一些主要的选项进行介绍,如表6-1所示。表6-1内核定制选项选择选项选择内容Loadale module support不选,调动驱动程序则需选中System TypeKernel executes from 选中 ROM; board Implementation选中S3C4510-SNDS100General setup选中Network Option,选中之后才会出现一下两项,才能支持网络;Kernelcore format 选中 ELFNetworking
32、 options选择 Packet socket、TCP/IP networkingNetworking device support选中 Ethernet ( 10 或 100Mb/s),并选择子菜单内的 Samsung4510B ethernet supportBlock devices选中 RAM disk support 、Rom disk memory block device(blkmem)File system选取 Rom file systerm suuportl;/proc file system supportCharacter devices选中 Samsung seri
33、al port support、Support for console onSamsung serial port 、 Non-standard serial port support对用户程序进行剪裁,在界面中选中Customize Ven dors/User Sett ings选项,保存并退出,进入用户程序定制菜单。这里一共有11个选项,每一个选项又有很多子选项。每个子选项都是个应用程序,用户可以根据系统的作用选择相应的应用程序,如图表6-2所示。表6-2用户程序定制选项选项选择情况Core Applications选择 init 、enable console shell、expand
34、及子菜单的 expand should not write zerosFilesystem Applications不选Network Applications选择 arp、boa、ifconfig 、inetd 、ping、ftpMiscellaneous Applications不选BusyBox选择 basename insmod、hostname、post2.1Kerne modules完成内核配置后,一次输入下列所示命令,开始对内核进行编译,如表如表6-3所示表6-3内核编译命令步骤编号命令作用1make dep读取配置过程生成的配置文件,创建对应用配置的依赖关系时树,从而决定哪些需
35、要编译,哪些不需要编译,并正确设置所需要的头文件2make clean删除以前内核时留下的各种文件,以避免岀现一些错误3make lib-only编译库文件4make user-only编译用户应用程序文件5make romfs建立romfs文件系统下的文件目录6make image生成可以烧写到 Flash并运行的image.rom内核映像文件7make编译完成后,在 uCIinux-dist/images下会生成三个文件,如表6-4所示。表6-4编译生成的映像文件文件作用image.rom压缩内核映像文件,用于烧写到Flash存储器image.ram未压缩内核映像,可以加载到SDRAM存储
36、器内运行,体积较image.rom大Romfs,imgRom文件系统,已经包含至少两个内核映像中在uCIinux-dist中有一个批处理文件csc.sh,里面包含了以上内核编译的所有命令,用户也可以直接执行这个脚本文件,实现相同的编译过程。#./csc.sh第7章操作系统下多任务应用程序开发虽然在无操作系统时,也可以通过中断、查询等手段实现多个任务同时运行,但在操作系统下能更容易地实现和管理多个任务,事实上,操作系统下的单任务和多任务程序的开发流程是相同的,而且有丰富的库函数支持,开发难度更低,程序也具有更强的可移植性和可重用性。本课题的任务主要是实现闪灯程序和串口打印程序的开发,以此掌握操作
37、系统下多任务软件开 发的方法。7.1操作系统下多任务应用程序的开发流程开发流程如表7-1所示。表7-1操作系统下应用程序的开发步骤步骤1编写程序源代码步骤2添加应用程序至内核添加程序文件至内核源代码目录中 为程序文件建立akefile 文件修改内核Makefile文件 修改内核配置文件 config.in修改内核rc文件设置程序为自启动步骤3编译内核步骤4下载内核至Flash存储器7.2操作系统下多任务应用程序的开发环境(1) PC一台(W indows XP/2000/98, 虚拟机L inux 系统);(2) 实验板一个;(3) 网线一根;(4) 串口线一根;(5) 超级终端程序;(6)
38、虚拟机运行 Linux操作系统(Red Hat Linux 8.0 以上);(7) 软件资源为PCLinux操作系统,uCIinux 内核编译工具 ARM-elf-tools-20030314.shuClinux 内核源代码 、ADS集成开发环境。7.3操作系统下多任务应用程序的开发编写串口、 LED应用程序首先在Linux下编写应用程序源代码led.c、uart.c,分别实现闪灯和向超级终端发送字符的功能。led.c源代码如下:(*(volatile un sig ned *)0x03FF5008)#defi ne IOPMOD (*(volatile un sig ned *)0x03FF
39、5000)#defi ne IOPDATA void Delay(i nt i);int main( void)IOPMOD=OxOf;while(1)IOPDATA=OxOF;Delay(100000);IOPDATA=OxOO;Delay(500000);return 0;void Delay(i nt i) int j,k;for(j=0;j<i;j+) k=0;uart.c 的源代码如下:#defi ne IOPMOD(*(volatile un sig ned *)0x03FF5000)#defi ne IOPCON(*(volatile un sig ned *)0x03FF
40、5004)#defi ne IOPDATA(*(volatile un sig ned *)0x03FF5008)#defi ne ULCON0(*(volatile un sig ned *)0x03FFD000)#defi ne UCONO(*(volatile un sig ned *)0x03FFD004)#defi ne USTAT0(*(volatile un sig ned *)0x03FFD008)#defi ne UTXBUF0(*(volatile un sig ned *)0x03FFD00c)#defi ne URXBUFO(*(volatile un sig ned
41、*)0x03FFD010)#defi ne UBRDIVO(*(volatile unsigned *)0x03FFD014)#defi ne ULCON1(*(volatile un sig ned *)0x03FFE000)#defi ne UCON1(*(volatile un sig ned *)0x03FFE004)#defi ne USTAT1(*(volatile un sig ned *)0x03FFE008)#defi ne UTXBUF1(*(volatile un sig ned *)0x03FFE00c)#defi ne URXBUF1(*(volatile un si
42、g ned *)0x03FFE010)#defi ne UBRDIV1(*(volatile unsigned *)0x03FFE014)void Delay (un sig ned in t);void InitUART(int Port,int Baudrate);void Prin tUART(i nt Port,char *s);int mai n()In itUART(0,0x500);Delay(10);for(;)Delay(10);PrintUART(0,"*威武吕蛟队 *");Prin tUART(0, "*");Prin tUART(
43、0, "*");Prin tUART(0, "*");Prin tUART(0, "*");Prin tUART(0, "*");Prin tUART(0, "*、rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0,“*“电子信息工程");Prin tUART(O," 吕蛟 201110312308Prin tUART(0, "*");Prin
44、tUART(0,"”);Prin tUART(0,"rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0, "*");电子信息工程");Prin tUART(0," 何文艺 20111032317Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0,&quo
45、t;");Prin tUART(0,"");Prin tUART(0, "*");电子信息工程");Prin tUART(0," 邓容 201110312316Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0, "*");PrintUA
46、RT(0," 刘俊彬 201110312313 电子信息工程");Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0, "*");Prin tUART(O,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,H*rn");return 0;void Prin
47、 tUART(i nt Port,char *s)if(Port=0)for(;*s!='0's+)for(;(!(USTAT 0&0 x40););UTXBUF0=*s;if(Port=1)for(;*s!='0's+)for(;(!(USTAT1 &0xx40););UTXBUF1=*s;void InitUART(int Port,int Baudrate) if(Port=0)ULCON0=0x03;UCON0=0x09; UBRDIVO=Baudrate;if(Port=1)ULCON 仁0x03;UBRDIV仁Baudrate;voi
48、d Delay (un sig ned int x)un sig ned int i,j,k;for(i=0;i<=x;i+)for(j=0;j<0xff;j+)for(k=0;k<0xff;k+);732添加应用程序至内核,使其随内核编译在内核源代码目录/uCIinux-dist/uesr下新建目录new_ap。并将led.c、uart.c 文件复制到该目录下。(1) 在new_ap目录下新建 Makefile文件,添加如下代码。EXEC = led uartOBJS = led.o uart.oall : $( EXEC$( EXEC : $( OBJS$( CC $ (
49、 LDFLAGS -o $.o $(LDLIBS)romfs:$(ROMFSINST) -e CONFIG_USER_NEW_AP_LED /b in/led$(ROMFSINST) -e CONFIG_USER_NEW_AP_UART/bi n/uartclea n:rm -f $(EXEC) *.gdb *.elf *.o为new_ap文件夹创建 Makefile文件,即为led.c和uart.c 的编译提供了规则,在整个uClinux 内核文件中,文件之间的组织是靠各个文件夹中的Makefile文件组织起来的,所以接下来还需把应用程序的编译规则进一步添加到上级目录的 Makefile和系
50、统配置文件中去,如图 7-1。单工煙byf曲” flif jl马j/pjgMjjc普 主具也乳lh< 上1;厶读 Jiru s dt -l/u .1? # 1 il魯 二让*炖匕 输阴出卜 fr(V 终希丄)啊御3帑脚出EJCTC - led0RJS - lad.oall;釈 KW|< DKG' j $ (KI 摯S<CC) $ LFFLUS) -O$ LRJronfs;穽 EKMZT /bin/S' FXEOc loani eJrm -f V 卜呂 *.f 11 * fdh * .n5tfKF) 綁© aCVJ 弊端转虫K©帝助01EXE
51、1. , = Uij r t(KJS = U4.rt .o I I; $f E:<HS' h-XfcCJ : $(<KIS>$(GC) $: LDFLCS) -o 5; -$ IMBSrurif 生;$ RCfSl>K: /hmZ$ FXE< -C IC4T13TTTl-r S 卜吓、+.f If *.p<lb *.n|图7-1添加应用程序到uClinux(2) 编辑user目录下的Makefile 文件,添加如下代码。dir_$ (CONFIG_USER_NEW_AP_LED)+=n ew_apdir_$ (CONFIG_USER_NEW_AP_U
52、ART) +=n ew_ap(3) 编辑config目录下的con fig. in 文件,添加如下代码。mainmenu _opti on n ext_comme ntcomme nt ' Test Program 'bool ' Test led' CONFIG_USER_NEW_AP_LEDbool ' Test uart' CONFIG_USER_NEW_AP_UARTen dme nuConfig.in文件是整个系统内核的配置文件,当输入 make menuconfig时,也是从这个文件读取相关的配置信息,这一步向系统的配置菜单中添加了一项新的内容Test program,而其子目录中分别包含了 Test led 和Test uart 这两个子选项。(4) 修改rc文件,设置程序为自启动。修改/uCIinux-dist/Vendors/Samsung/4510B/rc文件,用vi编辑器打开该文件,在最后一行添加:./b in/led &./b in/uart &其中,./是运行命令,“ &”符号设置程序为后台运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论