已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux操作系统移植,组长:冯启阳组员:李宽唐杏殷贝马鼎马妍璐,项目内容,1、嵌入式linux概述2、bootloader概述3、linux开发环境建立4、uboot移植5、linux内核移植6、linux文件系统移植7、项目任务,嵌入式linux概述,嵌入式linux-是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式Linux的特点-是版权免费、性能优异、软件移植容易、代码开放、有许多应用软件支持、产品开发周期短、新产品上市迅速、实时稳定安全等。,嵌入式linux特性,精简的内核,性能高、稳定,多任务。适用于不同的CPU,支持多种体系结构,如X86、ARM、MPIS、SPARC等。能够提供完善的嵌人式GUI以。提供嵌人式测览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。提供完整的开发工具和SDK,同时提供PC上的开发版本。用户可定制,可提供图形化的定制和配置工具。常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。针对嵌人式的存储方案,提供实时版本和完善的嵌入式解决方案。完善的中文支持,强大的技术支持,完整的文档。开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。,嵌入式Linux版本,RT-Linux这是由美国墨西哥理工学院开发的嵌入式Linux操作系。成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域。uCLinuxuCLinux主要是针对目标处理器没有存储管理单元MMU(MemoryManagementUnit)的嵌入式系统而设计的。特点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。,红旗嵌入式Linux由北京中科院红旗软件公司推出的嵌入式Linux是国内做得较好的一款嵌入式操作系统。中科院计算所自行开发的开放源码的嵌入式操作系统:EasyEmbeddedOS(EEOS)也已经开始进入实用阶段了。该款嵌入式操作系统重点支持p-Java。系统目标一方面是小型化,另一方面能重用Linux的驱动和其它模块。,bootloader概述,引导加载程序是计算机系统加电后运行的第一段软件代码对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程,一个嵌入式Linux系统从软件的角度来看,通常可以分为四个层次:,1.引导加载程序包括固化在固件(firmware)中的引导代码(可选)和BootLoader两大部分。2Linux内核特定于嵌入式板子的定制内核以及内核的启动参数。3文件系统包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。4用户应用程序特定于用户的应用程序。有时在用户应用程序和内核之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。,BootLoader的操作模式(OperationMode),两种不同的操作模式:启动加载模式(Bootloading)远程下载模式(Downloading)。仅对于开发人员才有意义。1)启动加载模式这种模式也称为自主(Autonomous)模式,BootLoader从目标机上的某个固态存储设备上,将KernelImage加载到RAM中运行,整个过程并没有用户的介入。这种模式是嵌入式产品发布时的通用模式,也是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式,远程下载模式在这种模式下,目标机上的BootLoader通过串口连接或网络连接等通信方式,从宿主机下载文件,比如:下载KernelImage和RootFilesystemImage等。从宿主机下载的文件,通常先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机中的FLASH类固态存储设备中。BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用。,像Blob或U-Boot等这些功能强大的BootLoader,通常都支持这两种工作模式,并且允许用户在这两种工作模式之间进行切换。比如,U-Boot在启动时处于正常的启动加载模式,但是它会延时5秒,等待终端用户按任意键将U-Boot切换到下载模式。如果在5秒内没有按键,则U-Boot继续启动Linux内核。,BootLoader的工作流程,1.启动操作系统的方式BootLoader的主要功能是引导操作系统(1)磁盘启动方式(2)网络启动方式需要把BootLoader安装到开发板上的EPROM或Flash中。BootLoader通过以太网接口远程下载KernelImage和RootFilesystemImage等,Flash启动方式大多数嵌入式系统都使用Flash存储介质。Flash有很多类型,包括NORFlash、NANDFlash和其它半导体盘。其中,NORFlash和NANDFlash使用最为普遍。NORFlash,也就是线性Flash,支持随机访问,即代码可以直接在NORFlash上执行。除了NORFlash,还有NANDFlash、CompactFlash、DiskOnChip等,这些Flash具有价格低、存储容量大的特点。但是,这些芯片一般是通过专用控制器的I/O方式来访问,不能随机访问,因此引导方式跟NORFlash也不同。在这些芯片上,需要配置专用的引导程序。通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而实现自举启动,这跟从磁盘上启动有些相似。,BootLoader一般存储在Flash芯片上。另外,KernelImage和RootFilesystemImage等也可以存储在Flash(通常是NANDFlash)上。通常把Flash分区使用,每个区的大小应该是Flash擦除块大小的整数倍。BootLoader区:BootLoader一般放在Flash的底端或者顶端,这要根据处理器的复位向量设置情况而定。不过,BootLoader的入口地址一定是CPU上电后执行的第一条指令的地址。参数区:是BootLoader向操作系统内核传递的参数所在的区域。内核映像区:BootLoader引导操作系统内核,就是从该区将KernelImage解压到RAM中,然后跳转到KernelImage的入口地址去执行。文件系统区:如果使用Ramdisk文件系统,BootLoader需要把它解压到RAM中。如果使用JFFS2文件系统,将直接挂接为根文件系统。其它区:还可以分出其它一些数据区,这要根据实际需要和Flash大小而定。这些分区由开发者定义,BootLoader直接读写对应的偏移地址。在Linux内核空间,可以配置成MTD设备来访问Flash分区。另外,有的BootLoader支持分区的功能,如Redboot等,可以创建Flash分区表,并且内核的MTD驱动可以解析出Redboot的分区表。,2.BootLoader启动流程,大多数BootLoader分为stage1和stage2两部分。Stage1-包含了依赖于CPU体系结构的代码,比如设备初始化代码等,并且,通常是用汇编语言来实现,以达到短小精悍的目的。Stage2-通常是用C语言来实现,这样可以实现更复杂的功能,而且代码具有更好的可读性和可移植性,stage1BootLoader在stage1中主要完成以下工作:(1)基本硬件设备初始化目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。通常包括以下步骤(以执行的先后顺序):屏蔽所有中断:为中断提供服务通常是OS设备驱动程序的责任,因此在BootLoader的执行过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器(比如ARM的CPSR寄存器)来完成。设置CPU的速度和时钟频率。RAM初始化:包括正确设置系统内存控制器的功能寄存器以及内存控制寄存器等。初始化LED:一般是通过GPIO来驱动LED,用来表明系统的当前状态(OK或Error)。如果开发板上没有LED,也可以通过初始化UART向串口打印提示信息。关闭CPU内部指令/数据cache。,2)为stage2准备RAM空间为了获得更快的执行速度,通常把stage2加载到RAM空间中执行,因此必须为加载stage2准备好一段可用的RAM空间范围。由于stage2通常是用C语言实现,因此在考虑空间大小的时候,除了stage2可执行映象的大小外,还要将堆栈空间也考虑进来。另外空间大小最好是memorypage大小(通常是4KB)的整数倍。(3)拷贝stage2到RAM中stage2的可执行映像在固态存储设备的存放起始地址和终止地址;RAM空间的起始地址。(4)设置堆栈指针sp:堆栈指针的设置是为执行stage2的C语言代码做好准备。(5)跳转到stage2的入口地址,在上述一切都就绪后,就可以跳转到stage2去执行了。比如,在ARM系统中,这可以通过修改PC寄存器的值来实现。2)stage2(1)用汇编语言跳转到main函数虽然stage2的代码通常是用C语言实现的,但是与普通C语言应用程序不同的是,在编译和链接BootLoader这样的程序时,不能使用glibc库中的任何库函数,这样就带来一个问题:从哪里跳转到main()函数呢?直接把main()函数的起始地址作为整个stage2执行映像的入口地址或许是最直接的想法,但是,这样做有两个缺点:无法通过main()函数传递函数参数。无法处理main()函数的返回情况。一种巧妙的方法是利用trampoline(弹簧床)的概念。即用汇编语言编写一段trampoline小程序,并将这段小程序的起始地址作为stage2可执行映象的入口地址。然后在trampoline小程序中用CPU跳转指令跳入main()函数中去执行;当main()函数返回时,PC的值再次指向trampoline小程序的起始地址。简而言之,这种方法的思想就是用这段trampoline小程序作为main()函数的外部包裹(externalwrapper)。,(2)初始化本阶段要使用到的硬件设备(3)检测系统的内存映射(4)加载KernelImage和RootFilesystemImage(5)设置内核的启动参数。(6)调用内核stage2调用Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转MEM_START0 x8000地址处。在跳转时,下列条件要满足:CPU寄存器的设置:R00;R1机器类型ID;关于MachineTypeNumber,可以参见linux/arch/arm/tools/mach-types。R2启动参数标记列表在RAM中起始基地址;CPU模式:必须禁止中断(IRQs和FIQs);CPU必须SVC模式;Cache和MMU的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭;,linux开发环境建立,虚拟机和linux安装配置虚拟机安装VMware-workstation-6.5.1-126130”目录下包含了虚拟机的安装软件的压缩包,安装了之后,就可以在PC上不用改动分区的情况安装Linux操作系统了。Linux安装Ubutufederal10,交叉编译环境的建立,交叉编译-在一个平台上生成可以在另一个平台上执行的代码1)工具EABI_4.3.3_EmbedSky_200
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Photoshop初级考试题库(含答案及详细解析)
- 2025-2026学年江苏省江都市初中生物七年级期末下册深度自测黑金考题详细参考解析
- 钢丝绳捻股工安全操作规程
- 皮带巡检工安全操作规程
- 内异症术后复发预警症状清单标准共识
- 辊道窑安全操作规程
- PAHS多环芳烃基础知识考试试题及详细答案(实操版)
- 脱轻塔安全操作规程
- 中轴型脊柱关节炎早期识别指南(2026版)
- 医院洁净吊顶安装施工方案
- 八师兵团职工考试题库及答案
- 外来施工人员入场安全教育培训考试试卷及答案
- 《陶瓷釉下彩绘技艺》课件
- 《宝马汽车营销策略》课件
- 血液透析前中后的护理要点
- 祛斑图文知识培训课件
- 农村承包土地合同范本
- 房颤中心建设各项管理制度
- 【MOOC】研究生英语科技论文写作-北京科技大学 中国大学慕课MOOC答案
- 弯弯的月亮 混声四部合唱谱
- 2024年全国职业院校技能大赛中职组(美术造型赛项)考试题库(含答案)
评论
0/150
提交评论