版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 嵌入式系统课程设计报告题题 目目 有操作系统的嵌入式系统软件开发有操作系统的嵌入式系统软件开发学学 院院 电子信息工程学院电子信息工程学院 专专 业业 电子信息工程(本)电子信息工程(本) 学生姓名学生姓名 周周 超超 学学 号号 年级年级 20112011 级级 指导教师指导教师 徐徐 职称职称 副教授副教授 二二一四年六月一四年六月成都学院(成都大学)课程设计报告有操作系统的嵌入式系统软件开发摘要:嵌入式系统大规模的应用于通信、测试、工控等多个领域,进入千家万户。本文基于嵌入式硬件平台,完成了有操作系统的嵌入式系统软件开发。文章从设计目的、设计要求、嵌入式系统介绍、Linux 操作系统介
2、绍、uClinux 操作系统介绍、系统剪裁与编译等多个方面介绍本系统。实现了在该操作系统下多任务程序开发应用,并且进行编译,能够在超级终端显示信息,从而达到课程设计要求。关键词:嵌入式;操作系统;Linux;uCLinux;成都学院(成都大学)课程设计报告I目 录第 1 章 绪论.11.1 研究背景.11.2 研究内容.1第 2 章 有操作系统的嵌入式系统软件开发概述.22.1 有操作系统的软件开发流程.22.2 有操作系统的软件运行模式.2第 3 章 LINUX 操作系统简介 .63.1 LINUX 操作系统介绍 .63.2 LINUX 操作系统的 GCC 编译器 .6第 4 章 UCLIN
3、UX 操作系统简介 .8第 5 章 开发环境的建立.95.1 建立主机 LINUX 平台.95.2 安装交叉编译工具.12第 6 章 UCLINUX 裁剪与编译 .13第 7 章 操作系统下多任务应用程序开发.167.1 操作系统下多任务应用程序的开发流程.167.2 操作系统下多任务应用程序的开发环境.167.3 操作系统下多任务应用程序的开发.167.3.1 编写串口、LED 应用程序.167.3.2 添加应用程序至内核,使其随内核编译.21结论.24参考文献.25成都学院(成都大学)课程设计报告0第 1 章 绪论1.1 研究背景随着信息技术的迅猛发展,21 世纪以来,人类已进入后 PC
4、时代。32 位嵌入式系统作为以应用为核心、软硬件可裁剪,并能满足实际系统对功能、可靠性、成本、体积和功耗有特殊要求的专用计算机系统,已被广泛应用于通信、雷达、测试、工业控制、消费电子等众多领域,正进入千家万户,成为后 PC 时代的主力军。最开始出现的嵌入式系统很多都不采用操作系统,它们只是为了实现某个控制功能,使用一个简单的循环控制对外界的控制请求进行处理。当应用系统越来越复杂、利用的范围越来越广泛的时候,每添加一项新的功能,都可能需要从头开始设计。没有操作系统已经成为了一个最大的缺点。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我
5、们提供了学习研发的资金和技术力量。从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX 和 Nuclear 等产品。如今,嵌入式系统的应用前景非常广泛,人们会无时无处不接触到嵌入式产品,从家里洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等,特别是以蓝牙为代表的小范围无线接入协议的出现,使嵌入式广泛被接收。本文主要研究有操作系统的嵌入式软件开发,达到多功能应用要求,拓宽和加深我们对已学过的理论知识的理解,从而掌握比较全面的专业知识,进一步熟悉嵌入式系统软件开发流程,更深刻地理解嵌入式
6、系统原理和相关接口电路的实现等。1.2 研究内容(1)了解有操作系统的嵌入式系统软件开发流程;(2)了解 Linux 操作系统的基本知识;(3)熟悉 Linux 操作系统的常用命令;(4)掌握 Linux 操作系统的 VI 编辑器用法;(5)掌握 Linux 操作系统的 gcc 编译器用法;(6)了解 uCLinux 操作系统的基本知识;(7)掌握 uCLinux 操作系统内核编译环境的建立;(8)熟悉 uCLinux 内核编译步骤;(9)掌握将编译好的内核下载到系统运行的步骤;成都学院(成都大学)课程设计报告1 (10)掌握 uClinux 多任务编程与自启动成都学院(成都大学)课程设计报告
7、2第 2 章 有操作系统的嵌入式系统软件开发概述2.1 有操作系统的软件开发流程在使用嵌入式操作系统能够应对更复杂的任务,软件也具有更好的可移植性和可重用性。在软件开发之前,应首先建立交叉开发环境,主要需要如表 2-1 所示1。表 2-1 建立 uClinux 交叉开发环境软件功能VMware5.5虚拟机平台Red Hat9Linux 操作系统ADS 1.2用于通过 JTAG 接口烧写映像文件至 FlashARM-elf-tools交叉编译工具链各个软件之间的构成关系如图 2-1 所示。(1)在 PC 上的 Windows 操作系统之上,使用 VMware5.5 虚拟机软件来建立虚拟硬件平台;
8、 (2)将虚拟机器操作系统 Red Hat Linux 安装在此虚拟平台上;(3)用 ADS 软件通过 JTAG 接口下载操作系统映像文件至实验板的 Flash 存储器;(4)在虚拟机操作系统上安装交叉编译工具链 ARM-elf-tools-20030314.sh。 图 2-1 开发环境软件构成1软件的开发流程如图 2-2 所示。由图可见,在开发嵌入式操作系统及应用软件之前,应首先将操作系统引导程序烧写到lash 的起始地址 0 x0 处,此处的引导程序与无操作系统的引导程序唯一不同的是:系统初始化完毕之后应当跳转到操作系统的起始地址 0 x1 0000 处,而不是应用程序的入口。2.2 有操
9、作系统的软件运行模式在运行操作系统的嵌入式系统中,主要包含了 BootLoader 引导程序、操作系统和应用程序这三种类型的程序。其中引导程序是嵌入式软件系统中必不可少的部分,在引导程序运行完成之后,虚拟机操作系统Red Hat LinuxVMwareADSPCWindows成都学院(成都大学)课程设计报告3嵌入式系统的硬件被设置的到合适的状态,从而引导操作系统的系统运行。操作系统启动后,才能进一步运行应用程序2。图 2-2 有操作系统的软件开发流程这三种程序的不能组成方式和运行方式就形成了不同的软件运行模式,有操作系统的嵌入式软件运行模式如表 2-2 所示。表 2-2 有操作系统的嵌入式运行
10、模式编号模式ABootLoader 直接引导操作系统,操作系统与应用程序一起编译,应用程序不自启动BBootLoader 直接引导操作系统,操作系统与应用程序一起编译,应用程序自启动CBootLoader 直接引导操作系统,操作系统与应用程序分开编译,应用程序通过网口等下载至 SDRAM 中DBootLoader 启动后显示菜单,手动引导操作系统(1)BootLoader 启动之后直接引导操作系统运行,应用程序编译在操作系统的 romfs 文件系统中,操作系统启动后并不自动运行应用程序,而是根据需要手动运行或由其他程序调用。在该模式下,BootLoader 在完成系统初始化工作后,修改 PC
11、指针,直接跳到操作系统image.rom 开始的地址处,引导操作系统运行。而应用程序和操作系统是一起编译在 image.rom 里面,操作系统启动之后,应用程序存放在/BEN 目录下,但是应用程序还是需要手动运行3。(2)BootLoader 启动之后直接引导操作系统运行,应用程序编译在操作系统的 romfs 文件系统中,操作系统后自动运行应用程序,如图 2-4 所示。在该模式下,BootLoader 在完成系统初始化工作后,修改 PC 指针,直接跳到操作系统image.rom 开始的地址处,引导操作系统运行。操作系统启动完毕之后,会自动执行应用程序,主要通过 uClinux-dist/Ven
12、dors/Samsung/4510B/rc 文件中添加系统启动后自动执行应用程序的命令来实现:rom 从 Linux转出应用程序 1ADS共享文件夹ADSBootLoaderVMwareRed Hat LinuxARM-elf-tools交叉编译工具uClinux源代码共享文件夹0 x1 0000 Flash0 x0SDRAM特殊功能寄存器应用程序 2成都学院(成都大学)课程设计报告4./bin/led&./bin/uart&命令后面的&符号表示在后台执行程序。图 2-3 有操作系统的运行模式 A 图 2-4 有操作系统的运行模式 B (3)BootLoader 启动之
13、后直接引导操作系统运行,应用程序和操作系统单独编译,操作系统BootLoader 启动后的编址空间64MB16MB2MB64KB0 x3FF FFFF0 x3FF 00000 x120 00000 x100 00000 x001 00000 x000 0000操作系统特殊功能寄存器组应用程序SDRAM还没有和物理设备建立映射的区域Flash引导程序BootLoader 启动后的编址空间64MB16MB2MB64KB0 x3FF FFFF0 x3FF 00000 x120 00000 x100 00000 x001 00000 x000 0000操作系统特殊功能寄存器组应用程序SDRAM还没有和
14、物理设备建立映射的区域Flash引导程序成都学院(成都大学)课程设计报告5启动完毕之后,通过网络等通信方式将应用程序下载到操作系统文件夹中,如/var/tap,在手动运行应用程序。该方式常用于调试应用程序,如图 2-5 所示。在该模式下,BootLoader 在完成系统初始化工作之后,修改 PC 指针,直接跳到操作系统image.rom 开始的地址处,引导操作系统运行。而 image.rom 映像文件里面并未包含应用程序,操作系统启动之后,通过网口、串口等方式单独编译生成的应用程序下载至操作系统的可写目录(如/Var/tmp)中,在手动运行。这种方式适合应用程序调试,不需要每次修改应用程序都重
15、新编译和烧写操作系统4。图 2-5 有操作系统的运行模式 C 图 2-6 有操作系统的运行模式 D(4)BootLoader 初始化完毕之后,并不是直接就引导操作系统执行,而是进入到一个命令行界面中,可以输入相应命令对系统进行操作,也可以引导操作系统。如 U-Boot 在初始化完毕之后,进入命令行界面,用户可通过相应命令,来控制系统通过串口或网口下载文件、烧写 Flash 存储器、测试存储器等操作,如图 2-6 所示。在该模式下,BootLoader 的功能已经不再限于系统的初始化程序。目前常用的几种通用BootLoader 均提供了复杂的命令接口,可在 BootLoader 中对硬件进行大量
16、操作,已经相当于一个微型操作系统4。0 x3FF FFFF0 x3FF 00000 x120 00000 x100 00000 x001 00000 x000 0000BootLoader 启动后的编址空间64MB16MB2MB64KBSDRAM操作系统特殊功能寄存器组应用程序还没有和物理设备建立映射的区域Flash引导程序BootLoader 启动后的编址空间64MB16MB2MB64KB0 x3FF FFFF0 x3FF 00000 x120 00000 x100 00000 x001 00000 x000 0000SDRAM操作系统特殊功能寄存器组应用程序还没有和物理设备建立映射的区域F
17、lash引导程序成都学院(成都大学)课程设计报告6第 3 章 Linux 操作系统简介3.1 Linux 操作系统介绍 Linux 是由芬兰赫尔辛基大学的一名学生 Linus B.Torvolds 在 1991 年首次编写的。Linux 是一个免费的操作系统,用户可以免费获得其源代码,并能够随意修改。它是在共用许可证GPL(General Public License)保护下的自由软件,也是好几种版本,如 Red Hat Linux、Slackware,以及 Xteam Linux 等。Linux 具有多任务支持、多用户支持、多处理器支持、跨平台支持、按需调入执行、开放性、设备独立性以及可靠安
18、全性等特点5。 Linux 的内核精简而高效,其内核的核心部分小到一张软盘就可以装下,通过对不需要功能的裁剪,Linux 内核完全可以小到 100KB 以下。 在嵌入式环境下的资源是非常有限的,所以操作系统的目录树中的所有文件都应该是系统所必须的文件,避免浪费存储空间。Linux 的 romfs 文件系统的根目录结构如图 3-1 所示。图 3-1 romfs 文件结构3.2 Linux 操作系统的 gcc 编译器 gcc 是 GNU 组织免费 C 编译器,Linux 的很多发布默认安装的就是这种。很多流行的自由软件源代码基本都能在 gcc 编译器下编译运行。例如,对于一个非常简单的 hello
19、.c 程序,只要在Linux 的 bash 提示符下输入命令即可编译它: $ gcc -o hello hello.cgcc 编译器就会生成一个 hello 的可执行文件。在 hello.c 的当前目录下执行./hello.c 就可以看到程序的输出结果。 Gcc 编译器有许多选项,但对于普通用户来说只要知道其中常用的几个就够了。以下列出几个常用的选项:-o 选项表示要求编译器生成的指定文件名的可执行文件;-c 选项表示只要求编译器进行编译,而不要进行衔接,生成源文件的文件名命名但把其后缀有.c 或.cc 变成.o 的目标文件;/bin/dev/tmp/sbin/pro/lib/etc/usr/
20、var成都学院(成都大学)课程设计报告7-g 选项要求编译器在编译的时候提供以后对程序进行调试的信息;-E 选项表示编译器对源文件只进行预处理就停止,而不做编译、汇编和衔接;-S 选项表示编译器只进行编译,而不做汇编和衔接;-O 选项是编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的可执行文件的执行效率提高;-Wall 选项制定产生全部的警告信息。成都学院(成都大学)课程设计报告8第 4 章 uClinux 操作系统简介uClinux 是一个完全符合 GNU/GPL 公约的操作系统,开放源代码。是 Lineo 公司的主打产品。在 uClinux 这个英文单词中 u 表示 M
21、icro,小的意思,C 表示 Control,控制的意思,所以 uClinux就是 Micro-Control-Linux,字面上的理解就是针对微控制领域而设计的 Linux 系统。uClinux从 Linux 2.0/2.4 内核派生而来,沿袭了 Linux 的绝大部分特性。它是专门针对没有 MMU 的 CPU,并且为嵌入式系统做了许多小型化的工作。它通常用于具有很少内存或 Flash 的嵌入式操作系统。它保留了操作系统的所有特性,为硬件平台更好地运行各种程序提供了保证。在 GNU 通用公共许可证(GNU GPL)的保证下,运行 uClinux 操作系统的用户可以使用几乎所有的 Linux
22、API 函数,不会因为没有 MMU 而受到影响。uClinux 的基本架构如图 4-1 所示。图 4-1 uClinux 的基本构架uClinux 的架构与标准 Linux 基本相同,只是对内存管理和进程管理进行了改写,以满足无MMU 处理器的要求。uClinux 针对没有 MMU 的处理器进行设计,不能使用处理器的虚拟内存管理技术,直接通过物理地址访问存储器,系统进程和用户进程也是运行在同一存储器空间。虚拟文件系统管理模块文件系统模块网络模块Socket 驱动驱动Mass 存储设备驱动网络设备驱动块设备驱动进程管理模块系统调用处理函数调度器字符设备驱动内存管理模块内核初始化C库函数捕获 Ha
23、ndlerBootLoader成都学院(成都大学)课程设计报告9第 5 章 开发环境的建立5.1 建立主机 Linux 平台 建立交叉开发环境的第一步,是建立一个 LInux 平台来对应用程序和内核进行编译,这里使用虚拟机软件 VMware 和 Red Hat Linux 来搭建一个在 Windows 环境中运行的 Linux 平台。 (1)在 PC 上安装并运行 VMware,选择 NEW Virtual Machine 命令新建虚拟机,选择 Custom自定义选项,如图 5-1 所示; (2)单击“下一步”按钮,选择 Linux 版本为 Red Hat Linux,为操作系统选择名字和安装
24、路径,如图 5-2 所示; (3)为系统选择内存,一般为 256MB,网络连接类型选择第一种,如图 5-3 所示; 图 5-1 虚拟机安装过程(1) 图 5-2 虚拟机安装过程(2) (4)选择 SCSI,从硬盘分出 4GB 的容量给 Linux 使用,如图 5-4 所示。成都学院(成都大学)课程设计报告10 图 5-3 虚拟机安装过程(3) 图 5-4 虚拟机安装过程(4) (5)定义虚拟机文件名,此时一个新的 Virtual Machine 就设定完成了,如图 5-5 所示。图 5-5 虚拟机安装过程(5)接下来开始安装 Red Hat Linux,在虚拟机软件中执行 Start virt
25、ual machine,系统启动Linux 安装程序,如图 5-6 所示,按照提示安装 Linux,采用默认选项即可。由于 Linux 与Windows 采用不同的文件系统,一般在 Linux 下无法直接访问 Windows 的硬盘区分,而以后的实验需要在 Linux 和 Windows 之间进行文件交换,因此有必要在 Linux 虚拟机和 Windows 主机之间建立一个共享文件夹。 首先启动虚拟机,进入系统后选择菜单 VMinstall VMware tools,之后再 Linux 的桌面会出现一个名为 Vmware-Tools 的文件夹,如图 5-7 所示。如果没有自动出现这样的文件夹,
26、可以采用 U 盘等途径将 VMware 安装目录里面的 linux.iso 文件复制到 Linux 系统下,挂载此文件即可。成都学院(成都大学)课程设计报告11 图 5-6 开始安装 Red Hat Linux 图 5-7 安装 VMware Tools 这个文件夹中含有两种格式的安装文件:rpm 和 tar.gz,前者可以直接运行安装,后者需要解压缩后才能进行安装。由于光驱文件夹是不可写的,因此需将 VMwareTools-5.5.1-19175.tar.gz 复制到可写目录里(如用户主目录) ,再输入命令#tar xzvf VMwareTools-5.5.1-19175.tar.gz 解压
27、到当前目录下的VMware-tool-distrib 文件夹中,运行其中的 VMware-insll.pl 文件开始安装。安装完毕后,在mnt 目录下会自动建立一个名为 hgfs 的文件夹,通过这个目录,就可以在 Linux 下访问对应的Windows 文件夹。进入菜单 VMsetting,在 Options 选项卡下选择 Share Folders,单击 Add指定一个 Windows 下的文件夹作为与 Linux 的共享文件,如图 5-8 所示。这样在 Linux 下的mnthgfs 目录中,就可以访问到这里指定的 Windows 目录,并可以进行读写操作。图 5-8 设定共享目录 VMw
28、areTool 安装之后,VMware 能够自动地判断鼠标位置是否超出虚拟机 Linux 的桌面范围,如果超出了,就自动将鼠标切换至 Windows 桌面。在安装之前,按下 Ctrl 加 Alt 键才能将鼠标从成都学院(成都大学)课程设计报告12虚拟机 Linux 中切换出来。如图 5-9 所示。图 5-9 常用 Linux 目录5.2 安装交叉编译工具交叉编译是一个在平台上生成另一个平台上的可执行代码。使用交叉编译编译工具有多种原因,有时是因为目标平台上不允许或不能够安装所需要的编译器;有时是因为目标平台资源贫乏,无法运行所需要编译器;有时是因为目的平台还没有建立,连操作系统都没有,根本无法
29、运行编译器。要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链,然后用这个交叉编译工具链编译原代码。在 Linux PC 上,利用 ARM-elf-tools 编译器,可编译出针对 uClinux 平台的可执行代码。从网上下载交叉编译工具 ARM-elf-tools-20030314.sh,并将其复制到 Linux 文件夹中,使用root 用户登陆,在命令窗口中输入#sh ARM-elf-tools-20030314.sh 命令,程序会自动完成安装过程。编译工具与uClinux 代码虚拟机 Linux 根目录hgfs用户目录共享文件夹homemnt成都学院(成都大学)课程设计报告13第
30、6 章 uClinux 裁剪与编译实验板所用的 uClinux-wsdist.tar.gz 内核源代码已经针对硬件配置进行了相应的修改,使用前需要执行相应的编译命令,才能生成可执行的内核映像文件。uClinux 是一个功能完善且高度可定制的嵌入操作系统,并且具有图形化的裁剪工具,使得裁剪过程就像 Windows 下的软件定制安装一样的简单。如果只保留必需的模块,编译生成的压缩内核image.rom 只有 240KB 左右,不压缩内核 image.rom 也只有 490KB 左右,可以运行于只有 512KBRAM的系统。uClinux 的裁剪包括厂商产品选择,内核版本选择,运行库选择,内核配置和
31、厂商用户配置 5步。配置的本质是通过 make 工具来设置源代码包中各级目录下的配置文件和 make 文件中的宏定义,为下一步的编译提供前提。 在 Linux 虚拟机下新建命令终端,进入 uClinux 内核目录/uClinux-dist,在编译之前首先检查内核的配置:输入命令#make menuconfig,输入命令后会弹出界面如图 6-1 所示。(1)uClinux 提供了图形界面下的操作剪裁定制选项,他们表示为:(2)Vendor/Product,选择硬件系统的处理器型号,以适应特定硬件平台的要求。这里选中Samsung/4510B。(3)Kernel Version,这表明知道制定的核
32、心来源于 Linux 核心的 2.4 版本。(4)Libc Version,选择特定的库,这里选中 uC-lib,该库目前支持 ARM 构架的处理器,在它所支持的平台上非常稳定,体积更小。另一个选项是 uClibc,它提供更多的应用程序接口(API) ,以及一些不常见的、不标准的库程序。因此,如果有一些程序预期要用到一些少见的库,那么需要选择 uClibc。(5)Default all Settings,所有选项采用默认设置。(6)Customize Kernel Settings,进行内核制定的选项。(7)Customize Vendorsement/User Settings,进行用户程序
33、的制定。(8)Update Default Vendors Settings,更新默认选项。以上选项中芯片配置、Linux 内核和库函数选项与硬件平台相关,不需要进行修改,内核设置与用户程序设置是可以进行裁剪的。对内核进行剪裁,选中 Customize Kernel Settings 选择,保存并退出,内核保存一些配置以后会进入到内核定制菜单,如图 6-2 所示。成都学院(成都大学)课程设计报告14 图 6-1 内核配置菜单 图 6-2 定制用户程序 下面对一些主要的选项进行介绍,如表 6-1 所示。表 6-1 内核定制选项选择选项选择内容Loadale module support不选,调动
34、驱动程序则需选中System TypeKernel executes from 选中 ROM;board Implementation 选中 S3C4510-SNDS100General setup选中 Network Option,选中之后才会出现一下两项,才能支持网络;Kernel core format 选中 ELFNetworking options选择 Packet socket、TCP/IP networkingNetworking device support选中 Ethernet(10 或 100Mb/s) ,并选择子菜单内的 Samsung 4510B ethernet su
35、pportBlock devices选中 RAM disk support、Rom disk memory block device(blkmem)File system选取 Rom file systerm suuportl;/proc file system supportCharacter devices选中 Samsung serial port support、Support for console onSamsung serial port、Non-standard serial port support对用户程序进行剪裁,在界面中选中 Customize Vendors/User
36、 Settings 选项,保存并退出,进入用户程序定制菜单。这里一共有 11 个选项,每一个选项又有很多子选项。每个子选项都是一个应用程序,用户可以根据系统的作用选择相应的应用程序,如图表 6-2 所示。表 6-2 用户程序定制选项选项选择情况Core Applications选择 init、enable console shell、expand 及子菜单的 expand should not write zerosFilesystem Applications不选Network Applications选择 arp、boa、ifconfig、inetd、ping、ftpMiscellaneo
37、us Applications不选BusyBox选择 basename、insmod、hostname、post2.1Kerne modules完成内核配置后,一次输入下列所示命令,开始对内核进行编译,如表如表 6-3 所示成都学院(成都大学)课程设计报告15表 6-3 内核编译命令步骤编号命令作用1make dep读取配置过程生成的配置文件,创建对应用配置的依赖关系时树,从而决定哪些需要编译,哪些不需要编译,并正确设置所需要的头文件2make clean删除以前内核时留下的各种文件,以避免出现一些错误3make lib-only编译库文件4make user-only编译用户应用程序文件5m
38、ake romfs建立 romfs 文件系统下的文件目录6make image生成可以烧写到 Flash 并运行的 image.rom 内核映像文件7make 编译完成后,在 uClinux-dist/images 下会生成三个文件,如表 6-4 所示。表 6-4 编译生成的映像文件文件作用image.rom压缩内核映像文件,用于烧写到 Flash 存储器image.ram未压缩内核映像,可以加载到 SDRAM 存储器内运行,体积较 image.rom 大Romfs,imgRom 文件系统,已经包含至少两个内核映像中在 uClinux-dist 中有一个批处理文件 csc.sh,里面包含了以上
39、内核编译的所有命令,用户也可以直接执行这个脚本文件,实现相同的编译过程。#./csc.sh成都学院(成都大学)课程设计报告16第 7 章 操作系统下多任务应用程序开发 虽然在无操作系统时,也可以通过中断、查询等手段实现多个任务同时运行,但在操作系统下能更容易地实现和管理多个任务,事实上,操作系统下的单任务和多任务程序的开发流程是相同的,而且有丰富的库函数支持,开发难度更低,程序也具有更强的可移植性和可重用性。 本课题的任务主要是实现闪灯程序和串口打印程序的开发,以此掌握操作系统下多任务软件开发的方法。7.1 操作系统下多任务应用程序的开发流程开发流程如表 7-1 所示。表 7-1 操作系统下应
40、用程序的开发步骤7.2 操作系统下多任务应用程序的开发环境 (1)PC 一台(indows XP/2000/98,虚拟机inux 系统) ; (2)实验板一个; (3)网线一根; (4)串口线一根; (5)超级终端程序; (6)虚拟机运行 Linux 操作系统(Red Hat Linux 8.0 以上); (7)软件资源为 PCLinux 操作系统,uClinux 内核编译工具 ARM-elf-tools-20030314.sh,uClinux 内核源代码 uClinux-wsdist.tar.gz、ADS 集成开发环境。7.3 操作系统下多任务应用程序的开发 7.3.1 编写串口、LED 应
41、用程序 首先在 Linux 下编写应用程序源代码 led.c、uart.c,分别实现闪灯和向超级终端发送字符的功能。步骤 1 编写程序源代码步骤 2 添加应用程序至内核添加程序文件至内核源代码目录中为程序文件建立 akefile 文件修改内核 Makefile 文件修改内核配置文件 config.in修改内核 rc 文件设置程序为自启动步骤 3编译内核步骤 4下载内核至 Flash 存储器成都学院(成都大学)课程设计报告17led.c 源代码如下:#define IOPMOD (*(volatile unsigned *)0 x03FF5000) #define IOPDATA(*(volat
42、ile unsigned *)0 x03FF5008) void Delay(int i);int main(void)IOPMOD=0 x0f;while(1)IOPDATA=0 x0F;Delay(100000);IOPDATA=0 x00;Delay(500000);return 0;void Delay(int i) int j,k;for(j=0;ji;j+)k=0;uart.c 的源代码如下:#define IOPMOD (*(volatile unsigned *)0 x03FF5000) #define IOPCON(*(volatile unsigned *)0 x03FF5
43、004)#define IOPDATA(*(volatile unsigned *)0 x03FF5008) #define ULCON0(*(volatile unsigned *)0 x03FFD000)#define UCON0(*(volatile unsigned *)0 x03FFD004) #define USTAT0(*(volatile unsigned *)0 x03FFD008) 成都学院(成都大学)课程设计报告18#define UTXBUF0(*(volatile unsigned *)0 x03FFD00c) #define URXBUF0(*(volatile u
44、nsigned *)0 x03FFD010) #define UBRDIV0(*(volatile unsigned *)0 x03FFD014) #define ULCON1(*(volatile unsigned *)0 x03FFE000) #define UCON1(*(volatile unsigned *)0 x03FFE004) #define USTAT1(*(volatile unsigned *)0 x03FFE008) #define UTXBUF1(*(volatile unsigned *)0 x03FFE00c) #define URXBUF1(*(volatile
45、 unsigned *)0 x03FFE010) #define UBRDIV1(*(volatile unsigned *)0 x03FFE014) void Delay(unsigned int);void InitUART(int Port,int Baudrate);void PrintUART(int Port,char *s);int main()InitUART(0,0 x500);Delay(10);for(;)Delay(10);PrintUART(0,*威武吕蛟队*);PrintUART(0,*);PrintUART(0,*);PrintUART(0,*);PrintUAR
46、T(0,*);PrintUART(0,*);PrintUART(0,*rn);Delay(10);PrintUART(0, );PrintUART(0, );PrintUART(0,*);成都学院(成都大学)课程设计报告19PrintUART(0,吕蛟 201110312308 电子信息工程);PrintUART(0,*);PrintUART(0, );PrintUART(0, rn);Delay(10);PrintUART(0, );PrintUART(0, );PrintUART(0,*);PrintUART(0,何文艺 20111032317 电子信息工程);PrintUART(0,*)
47、;PrintUART(0, );PrintUART(0, rn);Delay(10);PrintUART(0, );PrintUART(0, );PrintUART(0,*);PrintUART(0,邓容 201110312316 电子信息工程);PrintUART(0,*);PrintUART(0, );PrintUART(0, rn);Delay(10);PrintUART(0, );PrintUART(0, );PrintUART(0,*);PrintUART(0,刘俊彬 201110312313 电子信息工程);PrintUART(0,*);PrintUART(0, );PrintUA
48、RT(0, rn);Delay(10);PrintUART(0,*);成都学院(成都大学)课程设计报告20PrintUART(0,*);PrintUART(0,*);PrintUART(0,*);PrintUART(0,*);PrintUART(0,*);PrintUART(0,*rn);return 0;void PrintUART(int Port,char *s)if(Port=0)for(;*s!=0;s+)for(;(!(USTAT0&0 x40););UTXBUF0=*s;if(Port=1)for(;*s!=0;s+)for(;(!(USTAT1&0 x40);)
49、;UTXBUF1=*s;void InitUART(int Port,int Baudrate)if(Port=0)ULCON0=0 x03;UCON0=0 x09;UBRDIV0=Baudrate; if(Port=1)ULCON1=0 x03;UCON1=0 x09;成都学院(成都大学)课程设计报告21UBRDIV1=Baudrate; void Delay(unsigned int x)unsigned int i,j,k;for(i=0;i=x;i+)for(j=0;j0 xff;j+)for(k=0;k0 xff;k+);7.3.2 添加应用程序至内核,使其随内核编译 在内核源代码目
50、录/uClinux-dist/uesr 下新建目录 new_ap。并将 led.c、uart.c 文件复制到该目录下。 (1)在 new_ap 目录下新建 Makefile 文件,添加如下代码。 EXEC = led uart OBJS = 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/bin/ua
51、rt clean: rm -f $(EXEC) *.gdb *.elf *.o 为 new_ap 文件夹创建 Makefile 文件,即为 led.c 和 uart.c 的编译提供了规则,在整个uClinux 内核文件中,文件之间的组织是靠各个文件夹中的 Makefile 文件组织起来的,所以接下来还需把应用程序的编译规则进一步添加到上级目录的 Makefile 和系统配置文件中去,如图 7-1。成都学院(成都大学)课程设计报告22 图 7-1 添加应用程序到 uClinux (2)编辑 user 目录下的 Makefile 文件,添加如下代码。dir_$ (CONFIG_USER_NEW_A
52、P_LED) +=new_apdir_$ (CONFIG_USER_NEW_AP_UART) +=new_ap(3)编辑 config 目录下的 config.in 文件,添加如下代码。mainmenu_option next_commentcomment Test Program bool Test led CONFIG_USER_NEW_AP_LEDbool Test uart CONFIG_USER_NEW_AP_UARTendmenu Config.in 文件是整个系统内核的配置文件,当输入 make menuconfig 时,也是从这个文件读取相关的配置信息,这一步向系统的配置菜单中添加了一项新的内容 Test program,而其子目录中分别包含了 Test led 和 Test uart 这两个子选项。 (4)修改 rc 文件,设置程序为自启动。 修改/uClinux-di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 测绘企业环境管理方案
- 2026年临床执业医师资格考试笔试重点串讲
- 2026年化学检验工职业技能竞赛实操
- 2026年新能源汽车空调系统检测与维修测试题
- 2026年电力电缆安装运维工高级笔试模拟题
- 2026年军队文职面试测控技术预测题
- 2026年人力资源规划师笔试题
- 2026年人才测评量化分析报告
- 2026年安全生产技能竞赛活动
- 2026年知识与技能教学目标设计
- 小儿柴胡退热颗粒课件
- 年产5万吨丙酸工艺设计
- 2025年picc置管与维护临床护理实践指南
- 文化赛事管理办法
- 2025年浙江省中考科学试题卷(含答案解析)
- 2025届广东省广州市荔湾区真光中学高一物理第二学期期末学业质量监测试题含解析
- 2025年高考真题-生物(四川卷) 含答案
- 检验表4.43 浆砌石、灌砌石挡墙浆砌体单元工程施工质量检验表
- 施工防洪防汛管理制度
- 白细胞瘀滞症诊疗研究进展
- 运动处方考试题库及答案
评论
0/150
提交评论