收藏 分享(赏)

嵌入式系统8-嵌入式Linux.ppt

上传人:精品资料 文档编号:10266904 上传时间:2019-10-26 格式:PPT 页数:62 大小:172.50KB
下载 相关 举报
嵌入式系统8-嵌入式Linux.ppt_第1页
第1页 / 共62页
嵌入式系统8-嵌入式Linux.ppt_第2页
第2页 / 共62页
嵌入式系统8-嵌入式Linux.ppt_第3页
第3页 / 共62页
嵌入式系统8-嵌入式Linux.ppt_第4页
第4页 / 共62页
嵌入式系统8-嵌入式Linux.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、嵌入式Linux,一、嵌入式Linux的定义,嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几K字节或几M字节的存储器芯片或单片系统中,应用于特定嵌入式场合的专用Linux操作系统,嵌入式Linux的优势,Linux系统是层次结构且内核完全开放 强大的网络支持功能 Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中仿真工具的障碍 Linux具有广泛的硬件支持特性,嵌入式Linux面临的挑战,1、扩充Linux的实时系统 2、改变Linux内核的体系结构 3、完善Linux的集成开发环境,

2、1、扩充Linux的实时系统,内核不支持事件优先级和抢占实时特性 对Linux实时性的扩展可以从两方面进行: 向外扩展(让实时系统支持的范围更广,支持的设备更多) 向上扩展(扩充Linux内核,从功能上扩充Linux的实时处理和控制系统),RT-Linux的做法 Linux本身的任务以及Linux内核本身作为一个优先级最低的任务 实时任务作为优先级最高的任务 实时任务以Linux的内核模块(Loadable Kernel Module,LKM)的形式存在,2、改变Linux内核的体系结构,Monolithic内核体系 MicroKernel体系执行效率 内核的体积 升级、维护和移植,微内核技术

3、,缺点:操作系统的服务模块在独立的地址空间运行,使得进程间通信和上下文切换的系统开销大大增加,降低了系统效率。,3、完善Linux的集成开发环境,Linux在基于图形界面的特定系统定制平台的研究上,与Windows操作系统相比还存在差距,POSIX实时扩展,POSIX(Portable Operating System Interface)是为标准化类UNIX操作系统所必须具有的特征和接口而制定,其思想就是为了增强为类UNIX操作系统编写的软件的可移植性,二、嵌入式linux开发,最小的嵌入式 Linux 系统仅需要三个基本元素: 引导实用程序 Linux 微内核,由内存管理、进程管理和定时服

4、务构成 初始化过程 硬件驱动程序 一个或多个应用进程,以提供所需功能,面向嵌入式Linux 系统的图形用户界面,MicroWindows/NanoX 开放源码 无任何硬件加速能力 图形引擎中存在许多低效算法 代码质量较差 OpenGUI 可移植性稍差 Qt/Embedded 低的程序效率、大的资源消耗 MiniGUI,嵌入式Linux开发,了解硬件 针对所用CPU的编译器/汇编器/连接器,相应的库工具,目标文件分析/管理工具,符号查看器 编程器,下载工具和查错器 安排内存地址 编写启动代码和机器相关代码:硬件初始化,装载内核及安装根文件系统以及开始内核执行 驱动程序,嵌入式Linux的一般开发

5、步骤:,精简内核 系统启动 驱动程序开发 界面开发:将X-Window换成MicroWindows,精简内核,构造内核的常用命令包括:make config、dep、clean、mrproper、zImage、bzImage、modules、modules_install。 使用 make config 去掉多余功能。 ./Makefile ./arch/i386/kernel/ Makefile,系统启动,系统启动的相关文件如下: ./arch/$ARCH/boot/ bootsect.s ./arch/$ARCH/boot/setup.s ./init/main.c bootsect.S

6、及 setup.S,驱动程序,在Linux系统里,设备驱动程序提供一组入口点,它们由一个结构在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。Linux系统里,通过调用register_chrdev 向系统注册字符型设备驱动程序。,添加驱动程序,1.直接修改系统核心的源代码,把设备驱动程序加进核心里 2.把设备驱动程序作为可加载的模块,由系统管理员动态地加载它,使之成为核心的一部分。,驱动程序模块,Linux中,模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在)。为此需要在gcc命令行里加上-c的参数。在成功地向系统注册了设备驱动程序后(调用reg

7、ister_chrdev),就可以用mknod命令来把设备映射为一个特别文件。其它程序需要使用这个设备的时候,对此特别文件进行操作。,三、linux启动流程,1 加电或复位 2 BIOS的启动 3 Boot Loader 4 操作系统初始化,1 加电或复位,冷启动过程开始,中央处理器进入复位状态,将内存中的所有数据清零,对内存进行校验,如果没错,CS寄存器将置入FFFF,IP寄存器置入0000,这个CS:IP组合指向的是BIOS的入口。系统就是这样进入BIOS启动过程的。,2 BIOS启动,上电自检POST(Power On Self Test) 对系统内的硬件设备进行监测和连接 最后,BIO

8、S将从软盘或硬盘上读入Boot Loader.如果从硬盘启动,BIOS将读入该盘的零柱面零磁道1扇区(MBR),这个扇区上就放着Boot Loader.,2 BIOS启动,除了启动程序,BIOS还提供了一组中断以便于对硬件设备的访问。我们知道,当键盘上的某一键被按下,CPU就会产生一个中断并把这个键的信息读入。 在操作系统没有被装入以前(Bootsect.S还没有被读入),中断的响应程序由BIOS提供。,3 Boot Loader,Boot Loader是一段汇编代码,存放在MBR中,它的主要作用就是将系统启动代码读入内存。,3 Boot Loader,因为在启动过程中,BIOS会把Boot

9、Loader读入内存,并把控制权交给它。MBR(硬盘启动)内的代码就是Boot Loader或者它的一部分,为了说明Boot loader的实现,先解释磁盘结构。,3 Boot Loader,一个硬盘在DOS文件系统下可被分为四个基本分区,可以把一个基本分区定义为一个扩展分区,然后再把这个基本分区分为一个或多个逻辑分区。 整个硬盘的分区表存放在硬盘的第一个扇区(MBR),每个扩展分区也对应一个分区表,它存放在该扩展分区对应的第一个扇区里。 除主引导扇区外,每个基本分区和扩展分区也有自己的引导扇区,结构与MBR相同,但逻辑分区的引导扇区不能用于启动。,3 Boot Loader,如果是硬盘启动,

10、Boot Loader将查找主分区表中标记为活动分区的表项,把该表项对应的分区的引导扇区读入,然后将控制权交给该扇区内的引导程序。,3 Boot Loader,如果计算机上装有不只一个操作系统,仅仅MS-DOS的Boot Loader无法完成这种工作,需要一个可以多重起动的工具,下面介绍Linux下最常用的LILO.,3 Boot Loader,LILO实际上是一个在Linux环境下编写的Boot Loader程序,主要功能是引导Linux操作系统的启动。 LILO的功能实际上是有几个程序共同实现的,它们是:(1)Map Installer 这是LILO用于管理启动文件的程序。它将boot l

11、oader写入引导分区,创建纪录文件以映射内核的启动。(2)The boot loader 它负责把Linux内核或其他操作系统 的引导分区读入内存。还提供命令行接口,让用户选择从哪个操作系统启动和加入启动参数。(3)其他文件:主要包括用于存放Map Installer记录的map文件和存放LILO配置信息的配置文件。,4 进入操作系统,Boot Loader 做了这么多工作,一言以蔽之,只是把操作系统的代码调入内存,所以当它执行完后,自然该把控制权交给操作系统,由操作系统的启动程序来完成剩下的工作。,4 进入操作系统,把控制权交给Setup.S这段程序 进入保护模式,同时把控制权交给Head

12、.S Head.S调用/init/main.C中的start_kernel函数,启动程序从start_kernel()函数继续执行,4 进入操作系统 (1)Setup.S,首先,Setup.S对已经调入内存的操作系统代码进行检查,如果没错,它会通过BIOS中断获取内存容量,硬盘等信息(实模式) 准备让CPU进入保护模式a.先屏蔽中断信号b.调用指令lidt和lgdtc.对8259中断控制器进行编程d.协处理器重新定位完成这几件事后,Setup.S设置保护模式的标志,重取指令,再用一条跳转指令jmpi 0x100000,KERNEL_CS。进入保护模式下的启动阶段,控制权交给Head.S.,4

13、进入操作系统 (2)Head.S,也要先做屏蔽中断一类的工作 然后对中断向量表做一定的处理 Boot Loader读入内存的启动参数和命令行参数,Head.S把它们保存在empty_zero_page页中 检查CPU类型 对协处理器进行检查 页初始化,调用setup_paging这个子函数 因为已进入保护模式,段机制的多任务属性体现,4 进入操作系统 (3)main.c中的初始化,Head.S调用/init/main.c中的start_kernel函数,把控制权交给它,这个函数是整个操作系统初始化的最重要的函数,一旦它执行完,整个操作系统的初始化也就完成了。,4 进入操作系统 (3)main.

14、c中的初始化,计算机在执行start_kernel前以进入了保护模式,使处理器完全进入了全面执行操作系统代码的状态。 但直到目前为止,这都是针对处理器的。而一旦start_kernel开始执行,Linux内核就一步步展现。 Start_kernel执行后,就可以以一个用户的身份登陆和使用Linux了,4 进入操作系统 (3)main.c中的初始化,较为重要的函数如下 Setup_arch() 最基本硬件的初始化 Paging_init() 线性地址空间映射 Trap_init()中断向量表初始化 Int_IRQ与中断有关的初始化 Sched_init()进程调度初始化 Console_init

15、()对中断的初始化,4 进入操作系统 (3)main.c中的初始化,对文件系统的初始化 Inode_init() i节点管理机制初始化 Name_cache_init() 目录缓存机制初始化 Buffer_init() 块缓存机制初始化,4 进入操作系统 (3)main.c中的初始化,启动到了目前这种状态,只剩下运行/etc下的启动配置文件。 这时初始化程序并没有完成操作系统各个部分的初始化,更关键的文件系统的安装还没有涉及,这是在init进程建立后完成的。就是start_kernel()最后部分内容。,4 进入操作系统 (4)建立init进程,Linux要建立的第一个进程是init进程 启动

16、所需的Shell脚本文件a.Linux系统启动所必须的b.用户登陆后自己设定的 系统启动所必须的脚本存放在系统默认的配置文件目录/etc下。首先调用的是/etc/inittab.,四、Linux系统移植的两大部分,内核部分和系统部分 (1)内核部分初始化和控制所有硬件设备(严格说不是所有,而是绝大部分),为内存管理、进程管理、设备读写等工作做好一切准备。 (2)系统部分加载必需的设备,配置各种环境以便用户可以使用整个系统。,(1)内核移植,Linux内核可以视为由五个功能部分组成:进程管理(包括调度和通信)、内存管理、设备管理、虚拟文件系统、网络 需要改动的就是进程管理、内存管理和设备管理中被

17、独立出来的那部分即硬件相关部分的代码,修改的代码,进程管理底层代码 BIOS接口代码 时钟、中断等板上设备支持代码 特殊结构代码:SMP 内存管理,(2)系统移植,一个最小系统的重建过程 类似Linux系统应急盘DiskOnChip 包括:init、libc库、驱动模块、必需的应用程序和系统配置脚本。,五、一些Real-Time Linux 简介,NMT RT-Linux MontaVista Linux ucLinux BlueCat Linux OpenWRT,DD-WRT Google Android,1、NMT RT-Linux,NMT 是新墨西哥科技大学(New Mexico Tec

18、hnology) 的缩写 Real-time Linux 的鼻祖 硬实时 一个实时内核负责处理硬件消息,接管中断,实时任务可在该内核上直接运行,可载入式核心模组( loadable kernel module)。,RTAI,Real-Time Application Interface LKM 在 Linux 上定义了 一组 RTHAL (Real-Time Hardware Abstraction Layer) RTAI 只使用RTHAL和 Linux 沟通,LXRT,RTAI 无法直接使用 Linux 的系统调用 解决的方法: 使用 RT-FIFO 将一个 RTAI real-time k

19、ernel module 和真正的 Linux 进程连接在一起代理:LXRT proxy,2、MontaVista Linux,MontaVista软件公司 全球三大嵌入式Linux操作系统及解决方案供应商之一 MontaVista Linux支持6种体系结构的20款处理器,x86/IA-32、PowerPC、StrongARM、XScale、ARM、MIPS MontaVista Linux包括KDevelop IDE、目标配置工具(Target Configuration Tool)、库优化工具(Library Optimizer tool)。另外,它还提供超过215个应用软件包。,基于L

20、inux 2.4.X稳定内核,提供支持x86、MIPS、SH以及PowerPC体系结构的实时抢占式内核。 跨平台开发,支持14个主机开发环境,包括Red Hat、Yellow Dog Linux、SuSE、Mandrake、Solaris以及VMWare on Windows NT/2000 该版本提供了215多个主机配套工具和嵌入式目标平台开发组件软件包,包括thttpd嵌入式服务器和802.11b无线通信标准附加包。,扩展了针对嵌入式跨平台开发的各类开放源代码工具的支持,提供了首个基于KDevelop的MontaVista开发环境; 支持x86和PowerPC平台的Linux跟踪工具(包括

21、内核性能和执行分析器); ext3日志文件系统。,3、uClinux,专为无(MMU)的微控制器打造的嵌入式Linux操作系统。 uClinux已移植支持的微控制器和微处理器 摩托罗拉DragonBall (M68EZ328), M68328, M68EN322, ColdFire, QUICC (Quad Integrated Communications Controller) Motorola MC68328: DragonBall集成微处理器 ARM7TDMI MC68EN302 Axis ETRAX Intel i960 PRISMA Atari 68k ETRAX,特点,UClin

22、ux的内核要比原Linux内核小的多 1. 内存管理 不能使用处理器的虚拟内存管理技术 分页管理 对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。 对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。,2.uCLinux两种可选的的内核加载方式 Flash运行方式:把内核的可执行映像文件烧到flash上,系统启动时从flash的某个地址开始逐句执行。 内核加载方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,运行速度更快,3.uCLinux的rom

23、fs文件文件系统 内核支持romfs文件系统比支持ext2文件系统需要更少的代码 超级块(superblock)需要更少的存储空间。 4.uCLinux的应用程序库 uClibc对libc做了精简 静态链接,uClinux的主要特色,通用的Linux API uCkernel 512 KB uCkernel + 工具 900 KB 完整的TCP/IP 协议堆栈 支持大量其它的网络协议 支持各种文件系统,包括 NFS、ext2、ROMfs、JFFS、MS-DOS以及FAT16/32,4、 BlueCat Linux,LynuxWorks公司 2.4 Linux 内核 多种处理器,LynuxWor

24、ks BlueCat 4.0的特性,为内核调试提供的独特的gdb扩展功能 广受欢迎的开发环境和用户界面 在追踪、调试内核以及应用程序函数的时候,可以使用简单明了的图形化界面 能够快速对内核的功能,大小等进行配置 使用开放构架的电源管理和优化方案 加载和使用已经经过测试的应用组件更加方便 BlueCat Linux 4.0 Developers Bundle 商业许可证 SpyKer系统跟踪工具 VisualLynux IDE或者CodeWarrior IDE Edition,具有硬实时特性的Linux 产品BlueCat RT(Real Time) LynuxWorks公司是目前唯一一个能够提供同时满足开放标准嵌入式和实时需求的嵌入式操作系统解决方案的企业。 LynuxWorks提供的开发工具包括:编译器,调试器,内核跟踪工具以及分析器和集成开发环境等等。,5、 OpenWRT,DD-WRT,第三方路由器操作系统LinkSYS 路由器操作系统采用了嵌入式Linux,不得不公开源码 出现了各种各样的第三方嵌入式Linux,包括OpenWRT,DD-WRT,6、 Google Android,开放源码的手机操作系统 支持多种处理器 Htc sense GUI,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报