基于linux的嵌入式软件开发课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《基于linux的嵌入式软件开发课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 linux 嵌入式 软件 开发 课件
- 资源描述:
-
1、1重点回顾重点回顾TCP通信过程通信过程2重点回顾重点回顾UDP通信过程8:253第三章第三章 基于基于Linux的嵌入式软件开发的嵌入式软件开发3.1 嵌入式软件结构嵌入式软件结构3.2 嵌入式软件开发流程嵌入式软件开发流程3.3 嵌入式嵌入式linux开发环境开发环境3.4 嵌入式系统引导代码嵌入式系统引导代码3.5 linux内核结构及移植内核结构及移植3.6 嵌入式文件系统及移植嵌入式文件系统及移植3.7 linux设备驱动概述设备驱动概述 3.8 设备驱动程序接口设备驱动程序接口3.9 linux设备驱动开发流程设备驱动开发流程8:2543.1 嵌入式软件结构嵌入式软件结构3.1.1
2、 嵌入式软件体系结构嵌入式软件体系结构3.1.2 基于基于Linux的嵌入式软件的嵌入式软件8:2553.1.1 嵌入式软件体系结构嵌入式软件体系结构8:2561.设备驱动层设备驱动层设备驱动层是嵌入式系统中必不可少的重设备驱动层是嵌入式系统中必不可少的重要部分,使用任何外部设备都需要有相应要部分,使用任何外部设备都需要有相应驱动程序的支持,它为上层软件提供了设驱动程序的支持,它为上层软件提供了设备的操作接口。备的操作接口。上层软件不用理会设备的具体内部操作,上层软件不用理会设备的具体内部操作,只需调用驱动层程序提供的接口即可。只需调用驱动层程序提供的接口即可。驱动层一般包括硬件抽象层驱动层一
3、般包括硬件抽象层HAL、板级支、板级支持包持包BSP和设备驱动程序。和设备驱动程序。8:2572.实时操作系统实时操作系统RTOS对于使用操作系统的嵌入式系统而言,操作系统一对于使用操作系统的嵌入式系统而言,操作系统一般以内核映像的形式下载到目标系统中。般以内核映像的形式下载到目标系统中。以以Linux为例,在系统开发完成之后,将整个操作为例,在系统开发完成之后,将整个操作系统部分做成内核映像文件,与文件系统一起传送系统部分做成内核映像文件,与文件系统一起传送到目标系统中;然后通过到目标系统中;然后通过BootLoader指定地址运指定地址运行行Linux内核,启动已经下载好的嵌入式内核,启动
4、已经下载好的嵌入式Linux系系统;再通过操作系统解开文件系统,运行应用程序。统;再通过操作系统解开文件系统,运行应用程序。整个嵌入式系统与通用操作系统类似,功能比不带整个嵌入式系统与通用操作系统类似,功能比不带有操作系统的嵌入式系统强大了很多。有操作系统的嵌入式系统强大了很多。8:2583.中间件层中间件层中间件(中间件(middleware)是基础软件的一大)是基础软件的一大类,属于可复用软件的范畴。类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用顾名思义,中间件处于操作系统软件与用户的应用软件的中间。户的应用软件的中间。中间件在操作系统、网络和数据库之上,中间件在操作系统、
5、网络和数据库之上,应用软件的下层,总的作用是为处于自己应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的帮助用户灵活、高效地开发和集成复杂的应用软件。应用软件。8:2594.应用程序应用程序实际的嵌入式系统应用软件建立在系统的实际的嵌入式系统应用软件建立在系统的主任务主任务(Main Task)基础之上。基础之上。用户应用程序主要通过调用系统的用户应用程序主要通过调用系统的API函数函数对系统进行操作,完成用户应用功能开发。对系统进行操作,完成用户应用功能开发。在用户的应用程序中,也可创建用户自己在用
6、户的应用程序中,也可创建用户自己的任务。任务之间的协调主要依赖于系统的任务。任务之间的协调主要依赖于系统的消息队。的消息队。8:25103.1.2 基于基于Linux的嵌入式软件的嵌入式软件基于嵌入式基于嵌入式Linux的软件结构如图所的软件结构如图所示,在硬件之上的示,在硬件之上的是引导程序是引导程序BootLoader,然后,然后是是Linux内核,最内核,最上层是应用程序。上层是应用程序。8:25111.BootLoader引导装载程序通常是在任何硬件上执行的第一段引导装载程序通常是在任何硬件上执行的第一段代码。代码。在象台式机这样的常规系统中,通常将引导装载在象台式机这样的常规系统中,
7、通常将引导装载程序装入主引导记录(程序装入主引导记录(Master Boot Record,(MBR))中,或者装入)中,或者装入 Linux 驻留的磁盘的第一驻留的磁盘的第一个扇区中。个扇区中。通常,在台式机或其它系统上,通常,在台式机或其它系统上,BIOS 将控制移将控制移交给引导装载程序。而在嵌入式系统中,通常并交给引导装载程序。而在嵌入式系统中,通常并没有像没有像BIOS那样的固件程序,因此整个系统的加那样的固件程序,因此整个系统的加载启动任务就完全由载启动任务就完全由BootLoader来完成。来完成。8:25121.BootLoader通过这段小程序,我们可以初始化硬件设通过这段小
8、程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环为最终调用操作系统内核准备好正确的环境。境。常见的常见的BootLoader有有uboot、vivi等。引等。引导程序的开发主要是做一些移植工作。导程序的开发主要是做一些移植工作。8:25132.内核内核Linux 内核的开发主要包括内核的开发主要包括Linux内核的定制、内核的定制、裁剪等工作。裁剪等工作。在嵌入式开发中经常要面对设备驱动程序的开在嵌入式开发中经常要面对设备驱动程序的开发,
9、嵌入式系统通常有许多设备用于与用户交发,嵌入式系统通常有许多设备用于与用户交互,象触摸屏、小键盘、滚动轮、传感器、互,象触摸屏、小键盘、滚动轮、传感器、RS232 接口、接口、LCD 等等。等等。除了这些设备外,还有许多其它专用设备,包除了这些设备外,还有许多其它专用设备,包括闪存、括闪存、USB、GSM 等。等。内核通过所有这些设备各自的设备驱动程序来内核通过所有这些设备各自的设备驱动程序来控制它们,包括控制它们,包括 GUI 用户应用程序也通过访问用户应用程序也通过访问这些驱动程序来访问设备。这些驱动程序来访问设备。8:25143.应用程序应用程序对于嵌入式对于嵌入式Linux的应用,大多
10、数的应用并不需的应用,大多数的应用并不需要图形界面,比如交换机、路由器、嵌入式网要图形界面,比如交换机、路由器、嵌入式网关以及服务器等等。关以及服务器等等。但是,随着消费类电子的普及,越来越多的嵌但是,随着消费类电子的普及,越来越多的嵌入式产品如多媒体播放、手机等手持设备需要入式产品如多媒体播放、手机等手持设备需要图形用户界面(或称图形用户界面(或称 GUI)的支持。)的支持。因此基于因此基于GUI的应用程序的开发越来越重要。的应用程序的开发越来越重要。目前比较流行的目前比较流行的GUI平台有平台有QtEmbedded、紧缩的紧缩的X Windows系统、系统、MicroWindows以及以及
11、MiniGUI系统。系统。8:25153.2 嵌入式软件开发流程嵌入式软件开发流程3.2.1 嵌入式嵌入式Linux设计概述设计概述3.2.2 基于开发板的二次开发基于开发板的二次开发 3.2.3 基于基于linux的嵌入式软件开发流程的嵌入式软件开发流程 8:25163.2.1 嵌入式嵌入式Linux设计概述设计概述8:25173.2.1 嵌入式嵌入式Linux设计概述设计概述嵌入式系统的软件开发采用一种交叉编译嵌入式系统的软件开发采用一种交叉编译调试的方式。调试的方式。交叉编译调试环境建立在宿主机(即一台交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发平台叫做目标板。机)上,对应
12、的开发平台叫做目标板。运行运行 Linux 的的 PC(宿主机宿主机)开发时使用宿开发时使用宿主机上的交叉编译、汇编及连接工具形成主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板并不能在宿主机上执行,而只能在目标板上执行。)然后把可执行文件下载到目标上执行。)然后把可执行文件下载到目标机上运行。机上运行。8:2518宿主机(宿主机(host)是编辑和编译程序的平台,)是编辑和编译程序的平台,一般是基于一般是基于 X86 的的 PC 机,通常也称为主机,通常也称为主机。而目标机(机。而目标机(targ
13、et)是用户开发的系统,)是用户开发的系统,通常都是非通常都是非 X86 平台。平台。Host 编译得到的可执行代码在目标机编译得到的可执行代码在目标机target 上运行。上运行。3.2.1 嵌入式嵌入式Linux设计概述设计概述8:25193.2.2 基于开发板的二次开发基于开发板的二次开发 所谓二次开发是利用现成的开发板进行开发,不同于通用所谓二次开发是利用现成的开发板进行开发,不同于通用计算机和工作站上的软件开发工程,一个嵌入式软件的开计算机和工作站上的软件开发工程,一个嵌入式软件的开发过程具有很多特点和不确定性。其中最重要的一点是软发过程具有很多特点和不确定性。其中最重要的一点是软件
14、跟硬件的紧密耦合特性。件跟硬件的紧密耦合特性。由于嵌入式系统的灵活性和多样性,这样就给软件设计人由于嵌入式系统的灵活性和多样性,这样就给软件设计人员带来了极大地困难。第一,在软件设计过程中过多地考员带来了极大地困难。第一,在软件设计过程中过多地考虑硬件,给开发和调试都带来了很多不便;第二,如果所虑硬件,给开发和调试都带来了很多不便;第二,如果所有的软件工作都需要在硬件平台就绪之后进行,自然就延有的软件工作都需要在硬件平台就绪之后进行,自然就延长了整个的系统开发周期。这些都是应该从方法上加以改长了整个的系统开发周期。这些都是应该从方法上加以改进和避免的问题。进和避免的问题。为了解决这个问题,通常
15、的做法是基于某种开发板做二次为了解决这个问题,通常的做法是基于某种开发板做二次开发,从这个角度看,硬件开发所占的比重不到开发,从这个角度看,硬件开发所占的比重不到20%,而,而软件开发的比重占到了软件开发的比重占到了80%。8:25203.2.3 基于基于linux的嵌入式软件开发流程的嵌入式软件开发流程1.建立开发环境建立开发环境 2.配置开发主机配置开发主机3.建立引导装载程序建立引导装载程序BOOTLOADER 4.移植移植Linux 操作系统操作系统 5.建立根文件系统建立根文件系统 6.建立应用程序的文件系统建立应用程序的文件系统 7.开发应用程序开发应用程序 8.烧写内核、根文件系
16、统、应用程序烧写内核、根文件系统、应用程序9.发布产品发布产品8:25213.4 嵌入式系统引导代码嵌入式系统引导代码3.4.1 Bootloader简介简介3.4.2 常用的常用的Bootloader3.4.3 Bootloader基本原理基本原理3.4.4 Bootloader移植实例一:移植实例一:U_Boot3.4.5 Bootloader移植实例二:移植实例二:vivi8:25223.4.1 Bootloader简介简介1.Bootloader的作用的作用2.Bootloader操作模式操作模式8:25231.Bootloader的作用的作用Boot Loader 就是在操就是在操作
17、系统内核运行之前运作系统内核运行之前运行的一段小程序。行的一段小程序。通过这段小程序,我们通过这段小程序,我们可以初始化硬件设备、可以初始化硬件设备、建立内存空间的映射图,建立内存空间的映射图,从而将系统的软硬件环从而将系统的软硬件环境带到一个合适的状态,境带到一个合适的状态,以便为最终调用操作系以便为最终调用操作系统内核准备好正确的环统内核准备好正确的环境。境。8:25242.Bootloader操作模式操作模式大多数大多数 Boot Loader 都包含两种不同的操都包含两种不同的操作模式:作模式:“启动加载启动加载”模式和模式和“下载下载”模模式,这种区别仅对于开发人员才有意义。式,这种
18、区别仅对于开发人员才有意义。但从最终用户的角度看,但从最终用户的角度看,Boot Loader 的的作用就是用来加载操作系统,而并不存在作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区所谓的启动加载模式与下载工作模式的区别。别。8:25252.Bootloader操作模式操作模式启动加载(启动加载(Boot loading)模式:这种模)模式:这种模式也称为式也称为“自主自主”(Autonomous)模式。)模式。也即也即 Boot Loader 从目标机上的某个固态从目标机上的某个固态存储设备上将操作系统加载到存储设备上将操作系统加载到 RAM 中运中运行,整个过程并
19、没有用户的介入。行,整个过程并没有用户的介入。这种模式是这种模式是 Boot Loader 的正常工作模式,的正常工作模式,因此在嵌入式产品发布的时侯,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。显然必须工作在这种模式下。8:25262.Bootloader操作模式操作模式u下载(下载(Downloading)模式:在这种模式)模式:在这种模式下,目标机上的下,目标机上的 Boot Loader 将通过串口将通过串口连接或网络连接等通信手段从主机(连接或网络连接等通信手段从主机(Host)下载文件到目标机的下载文件到目标机的 RAM 中,然后再被中,然后再被
20、Boot Loader 写到目标机上的写到目标机上的FLASH 类类固态存储设备中。固态存储设备中。u工作于这种模式下的工作于这种模式下的 Boot Loader 通常都通常都会向它的终端用户提供一个简单的命令行会向它的终端用户提供一个简单的命令行接口。因此产品开发时通常使用这种模式。接口。因此产品开发时通常使用这种模式。8:25273.4.2 常用的常用的Bootloader1.ARMBootARMBoot是一个是一个bootloader,是为基于是为基于ARM或者或者StrongARM CPU的嵌入式系统所设计的。它支的嵌入式系统所设计的。它支持多种类型的持多种类型的Flash;允许映像文
21、件经由;允许映像文件经由bootp、tftp从网络传输;支持从串口线下载从网络传输;支持从串口线下载S-record或者或者binary文件;允许内存的显示及修文件;允许内存的显示及修改;支持改;支持jffs2文件系统等。文件系统等。ARMBoot源码公开,可以在源码公开,可以在http:/ 常用的常用的Bootloader2.PPCBootPPCBoot是德国是德国DENX小组开发的用于多种嵌入小组开发的用于多种嵌入式式CPU的的Bootloader引导程序,主要由德国的工引导程序,主要由德国的工程师程师Wolfgang Denk和和Intemet上的一群自由开发上的一群自由开发人员对其进行
22、维护和开发。人员对其进行维护和开发。支持支持PowerPC、ARM、MIPS、m68K等多种处理等多种处理器平台,易于裁剪和调试。器平台,易于裁剪和调试。PPCBoot遵循遵循GPL(通通用公共许可用公共许可)公约,完全开放源代码。公约,完全开放源代码。PPCBoot源代码可以在源代码可以在sourceforge网站的社区服网站的社区服务器中获得,它的项目主页是务器中获得,它的项目主页是http:/ 常用的常用的Bootloader3.U-Boot U-Boot是是sourceforge网站上的一个开放源代码的项目。网站上的一个开放源代码的项目。它可对它可对powerpc、MPC5xx、MPC
23、8xx、MPC82xx、MPC7xx、MPC74xx、ARM(ARM7、ARM9、StrongARM、Xscale)、)、MIPS、X86等处理器提供支等处理器提供支持,支持的嵌入式操作系统有持,支持的嵌入式操作系统有linux、Vx-work、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,主要等,主要用来开发嵌入式系统初始化代码用来开发嵌入式系统初始化代码bootloader。软件的主。软件的主站点是站点是http:/ 常用的常用的Bootloader4.RedBootRedBoot是一个专门为嵌入式系统定制的开发是一个专门为嵌入式系统定制的开发工具,最初由工具,最初由Red
24、hat开发,是嵌入式操作系统开发,是嵌入式操作系统eCos的一个最小版本,现在交由自由软件组织的一个最小版本,现在交由自由软件组织FSF管理,遵循管理,遵循GPL的发布协议。的发布协议。集集Bootloader、调试、调试、Flash烧写于一体。支持烧写于一体。支持串口、网络下载,执行嵌入式应用程序。串口、网络下载,执行嵌入式应用程序。既可以用在产品的开发阶段(调试功能),也既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(可以用在最终的产品上(Flash更新、网络启更新、网络启动)。动)。8:25313.4.2 常用的常用的Bootloader5.BlobBlob是是Boot L
25、oader Object的缩写,是一款功能的缩写,是一款功能强大的强大的Bootloader。它遵循。它遵循GPL,源泉代码完,源泉代码完全开放。全开放。Blob既可以用来简单的调试,也可以既可以用来简单的调试,也可以启动启动Linux kernel。Blob最初是最初是Jan-Derk Bakker和和Erik Mouw为一为一块名为块名为LART(Linux Advanced Radio Terminal)的板子写的,该板使用的处理器是的板子写的,该板使用的处理器是StrongARM SA-1100。现在。现在Blob已经被移植到已经被移植到了很多了很多CPU上,包括上,包括S3C44B0
展开阅读全文