1嵌入式Linux系统原理与应用2主要内容嵌入式Linux系统基本概念嵌入式Linux系统裁减与移植嵌入式LINUX软件开发3主要内容嵌入式Linux系统基本概念Linux嵌入式Linux系统裁减与移植嵌入式Linux应用415.1.1嵌入式系统的定义MPU微处理器电源模块时钟复位FlashRAMROMUSBLCDKeyboard外围电路Other外设嵌入式系统硬件组成5嵌入式系统设备常见接口I/OA/D、D/A键盘LCD存储器接口网络设备接口6CISC和RISC指令集CISC:复杂指令集(ComplexInstructionSetComputer)z具有大量的指令和寻址方式z8/2原则:80%的程序只使用20%的指令z大多数程序只使用少量的指令就能够运行。z如IntelX86系列或者兼容的低功耗芯片RISC:精简指令集(ReducedInstructionSetComputer)z在通道中只包含最有用的指令z确保数据通道快速执行每一条指令z使CPU硬件结构设计变得更为简单z如PowerPC,MIPS,ARM/XScale7冯·诺依曼体系结构模型指令寄存器控制器数据通道输入输出中央处理器存储器程序指令0指令1指令2指令3指令4数据数据0数据1数据28哈佛体系结构指令寄存器控制器数据通道输入输出中央处理器程序存储器指令0指令1指令2数据存储器数据0数据1数据2地址指令地址数据915.1.2嵌入式操作系统的特点“嵌入计算机系统的专用操作系统”。嵌入性:物理环境(小型)、电气环境(可靠)、成本(价廉)等要求。专用性:满足对象要求的昀小软、硬件配置等。性能要求:多任务调度、实时性能功能要求:接口与通信能力10常见嵌入式操作系统VxWorks市场占有率昀高的系统。它支持多种处理器,高性能。PSOSystem模块化好,在中低端系统中应用广。pSOS已属于WindRiver。QNX小巧灵活,在航空航天和工业控制中广泛应用WindowsCE多线程、完整优先权、多任务的操作系统。图形界面好,开发工具友好Linux-derivedRTOSMontavistLinx,RTlinux;OtherOSVTRX,PalmOS,ucosetc1115.1.3嵌入式Linux发展与应用专用嵌入式实时操作系统vs嵌入式Linux操作系统专用嵌入式实时操作系统嵌入式Linux操作系统系统购买费非常昂贵商业版本需要一定服务费使用费每件产品需都需缴纳免费技术支持开发商一家支持商业版厂商和Linux社团网络协议栈需要额外购买免费且性能优异软件移植难,因为系统封闭易,因为代码开放产品开发周期长,因为参考代码有限短,应用和参考丰富实时性能好可用RTLinux等模块弥补稳定性好较好,高性能系统待验证12如何选择合适的linux版本标准的Linux版本。小型化的嵌入式版本。具有实时扩展功能的Linux版本。Linux特殊应用版本。例如有许多针对不同的如“瘦服务器”或“防火墙”应用的小型化、实时特性增强的版本。13网络可选择资源-标准版本Debian:RedHat:Slackware:TurboLinux:网络可选择资源-小型化版本ETLinux:LinuxRouterProject:LOAF:ucLinux:网络可选择资源-实时扩展版RTLinux:RTAI:EL/IX:SRT-Linux:~dmi1000/linux-srt/index.html16嵌入式linux构建与应用的关键技术对linux的裁减达到小型化的目的;对不同嵌入式微处理器的linux内核代码移植,驱动程序的研究;专业应用开发:移植应用程序,开发面向特定应用的控制软件。17嵌入式Linux操作系统实时性常用衡量实时性标准确定性(Determinism):系统的行为表现应该是确定的,每个系统调用执行的时间是可预测的。中断延迟时间(InterruptLatencyTime):从接收到中断信号到操作系统作出响应,并进入中断服务程序的时间;上下文切换时间(Context-SwitchingTime),就是操作系统将控制权从执行中取回,然后交给另一个任务所需的时间。18嵌入式Linux操作系统实时性影响中断处理时间的因素处理器硬件电路的延迟时间,通常这个时间可以忽略。操作系统处理中断并将控制权转移给中断处理程序所需要的时间。操作系统的中断禁止时间,这是操作系统为了保护重要的系统程序代码暂停接受中断需要的时间。19嵌入式Linux操作系统实时性某任务中断1的服务程序中断2的服务程序中断禁止区中断2的中断延时中断1产生中断2产生中断1的中断延时t1t2t320Linux内核与实时性对比项目Linux2.4(μs)Linux2.6(μs)内核在无负载时中断延时昀大值8.531.0内核在重负载时中断延时昀大值113.549.5内核在无负载时中断任务响应延时昀大值104412内核在强负载时中断任务响应延时昀大值444657821嵌入式Linux实时化技术非实时化通用内核实时化内核硬件平台非实时任务实时任务RTlinux双内核实时化结构22嵌入式Linux实时化技术非实时进程1非实时进程2原Linux内核实时任务实时内核硬件中断RTLinux任务处理流程23主要内容嵌入式Linux系统基本概念Linux嵌入式Linux系统裁减与移植嵌入式Linux软件开发24从何处开始?需要考虑的问题是否支持自己的硬件平台有多少可选软件、文件定制能力如何是否有完整文档、新版本升级是否方便等等一系列问题。可以选择的方法基于面向特定应用的嵌入式Linux版本基于通用嵌入式Linux版本基于某通用Linux系统和Linux源代码库25Linux系统的软件分层使用C库的应用程序C库直接访问内核的应用程序内核内核硬件26内核,C库,Shell和实用程序典型的Linux系统包括3个主要的软件层:Linux内核、C库和应用程序;内核主要的功能包括内存管理、进程调度、设备驱动、文件系统、网络协议栈和模块管理等;内核之上是C库,这一层负责把符合POSIX标准的API转换成内核可以识别的形式;离硬件昀远的是应用程序层,细分包含两部分:系统程序,一般指运行系统所不可缺少的程序;用户程序,给用户提供各种功能;27嵌入式Linux系统构建流程1.裁减编译内核2.建立root文件系统3.制作系统映像4.安装引导28第1步:裁减和编译内核获得内核源代码根据硬件平台获得对应的Linux系统源代码从一个通用系统,如redhat系统获得源代码裁减编译内核的步骤1.配置内核2.更新编译文件3.编译内核29编译内核原则Linux内核拥有灵活方便的配置功能,菜单分为,芯片组支持,外设支持,文件支持,网络等,每类只将需要的内容编译进内核。根据目标系统的硬件配置选择模块根据应用目标选择其他功能模块应当保证内核只支持一种或是两种必要的文件系统,如ext2和minix;为支持内存虚拟磁盘启动,需要编译内核支持ramdisk和initrd30第1步:裁减编译内核1.以root超级用户登录,进入目录/usr/src/linux。如果目标系统和主机系统不是同一硬件平台需要先建立交叉编译环境并获得目标系统的内核源代码2.#makemenuconfig对内核模块进行配置(也可以在XWindow中运行makexconfig)。3.#makedep更新配置文件4.#makebzImage(如果内核不大则执行#makezImage),执行该命令后,将在/usr/src/linux/arch/i386/boot目录下生成内核文件bzImage(或zImage)。若配置中加入了模块的支持(选项为M),还需要执行#makemodules和#makemodules_install。5.生成内核/usr/src/linux/arch/i386/boot/bzImage文件为内核文件改名为MiniKernel备用31第2步:建立root文件系统什么是root文件系统?一个完整的Linux系统除了内核外,还必须有一个由C库和系统应用程序构成的root文件系统。一个root文件系统包括支持完整Linux系统运行的全部东西。建立root文件系统的步骤1.在主机中建立目标系统的root文件系统目录结构2.从代码库中挑选并裁减出适用的各种文件3.将root文件系统目录中的所有内容打包制作成映像32第2步:建立root文件系统root文件系统的内容基本文件系统结构,至少含有目录/dev、/proc、/bin、/etc、/lib、/usr、/tmp;昀基本的系统应用程序,如sh、ls、cp、mv等;昀低限度的配置文件,如rc、inittab、fstab等;基本设备,如/dev/mem、/dev/tty*、/dev/console;基本程序运行所需的C函数库。33第2步:建立root文件系统1.建立目录系统以root用户登录开发主机,在合适的目录下(如根目录下),用mkdirrootfs命令建立一个工作目录rootfs。在rootfs/目录下的内容就是今后目标系统根目录(/)下的内容。在当前目录下执行cdrootfs进入到rootfs目录中,然后用mkdir命令分别在rootfs目录下建立以下目录:/etc放置系统配置文件;/sbin放置重要的系统程序;/bin放置系统基本应用程序;/dev设备文件的目录;/procproc文件系统所需目录;/lib准备存放共享函数库;/mnt准备挂载其他设备的目录节点/usr准备放置用户应用程序。34第2步:建立root文件系统1.建立目录系统/proc、/mnt和/usr在此情况下都是空的,只需要用mkdir创建它们即可。/dev:设备文件需要用mknod产生。如果简单起见用cp-dpR参数开关来复制原系统的设备文件节点也可以,例如cp-dpR/dev/mem/mnt/dev。至少需要console、kmem、mem、null、ram、tty*等文件。/etc:一般可以包含rc.d/*(系统启动脚本)、fstab(列出要登录的文件系统)、inittab(包含启动过程参数)。35第2步:建立root文件系统1.建立目录系统/bin和/sbin:这两个目录中包含有一些系统运行不可缺少的程序和大量实用程序,如ls、mv、cat、cp等。系统实用程序可以根据需要选择拷贝,而系统运行不可缺少的一些程序必须拷贝过来,如init、getty、login、mount、bash等。。/lib:必须有函数库装载器,这个装载器或是ld.so(对a.out库)或是ld-linux.so(对ELF库)。如果有一个模块化的内核,你还得必须考虑需要加载的模块。它们都位于/lib/modules。36第2步:建立root文件系统2.裁减root文件系统动态库的裁减精简系统应用程序精简嵌入式系统专用程序37第2步:建立root文件系统2.裁减root文件系统动态库的裁减Linux的C库glibc就是系统的动态连接库,相当于Windows系统的系统dll动态连接库。用软件工具扫描