Linux操作系统移植

上传人:豆浆 文档编号:26064086 上传时间:2017-12-22 格式:PPT 页数:24 大小:104KB
返回 下载 相关 举报
Linux操作系统移植_第1页
第1页 / 共24页
Linux操作系统移植_第2页
第2页 / 共24页
Linux操作系统移植_第3页
第3页 / 共24页
Linux操作系统移植_第4页
第4页 / 共24页
Linux操作系统移植_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Linux操作系统移植》由会员分享,可在线阅读,更多相关《Linux操作系统移植(24页珍藏版)》请在金锄头文库上搜索。

1、Linux操作系统移植,组长:冯启阳组员:李宽 唐杏殷贝 马鼎 马妍璐,项目内容,1、嵌入式linux概述 2、bootloader概述 3、 linux开发环境建立 4、 uboot移植 5、 linux内核移植 6、 linux文件系统移植 7、 项目任务,嵌入式linux概述,嵌入式linux-是将日益流行的Linux操作系统进行裁剪修改,使之能在 嵌入式计算机系统上运行的一种操作系统。嵌入式Linux的特点-是版权免费、性能优异、软件移植容易、代码开放、有许 多应用软件支持、产品开发周期短、新产品上市迅速、实 时稳定安全等。,嵌入式linux特性,精简的内核,性能高、稳定,多任务。适用

2、于不同的CPU,支持多种体系结构,如X86、ARM、MPIS、SPARC等。能够提供完善的嵌人式GUI以。提供嵌人式测览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。提供完整的开发工具和SDK,同时提供PC上的开发版本。用户可定制,可提供图形化的定制和配置工具。常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。针对嵌人式的存储方案,提供实时版本和完善的嵌入式解决方案。完善的中文支持,强大的技术支持,完整的文档。开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。,嵌入式Linux版本,RT-Linux这是由美国墨西哥理工学院开发的嵌入式Lin

3、ux操作系。成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域。 uCLinux uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。 特点:稳定、良好的移植性、优秀的网络功能、对各种文 件系统完备的支持和标准丰富的API。其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。,红旗嵌入式Linux由北京中科院红旗软件公司推出的嵌入式Linux是国内做得较好的一款嵌入式操作系统。 中科院计算所自行开发的开放源码的嵌入式操作系统:Easy Embedded OS(EEOS)也已经

4、开始进入实用阶段了。该款嵌入式操作系统重点支持p-Java。系统目标一方面是小型化,另一方面能重用Linux的驱动和其它模块。,bootloader概述,引导加载程序是计算机系统加电后运行的第一段软件代码对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程,一个嵌入式Linux系统从软件的角度来看,通常可以分为四个层次:,1.引导加载程序 包括固化在固件(firmware)中的引导代码(可选)和BootLoader两大部分。2Linux内核 特定于嵌入式板子的定制内核以及内核的启动参数。3文件系统 包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为root

5、fs。4用户应用程序 特定于用户的应用程序。有时在用户应用程序和内核之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等 。,BootLoader的操作模式(Operation Mode),两种不同的操作模式:启动加载模式(Boot loading)远程下载模式(Downloading)。仅对于开发人员才有意义。1)启动加载模式这种模式也称为自主(Autonomous)模式,BootLoader从目标机上的某个固态存储设备上,将Kernel Image加载到RAM中运行,整个过程并没有用户的介入。这种模式是嵌入式产品发布时的通用模式,也是Bo

6、otLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式,远程下载模式在这种模式下,目标机上的BootLoader通过串口连接或网络连接等通信方式,从宿主机下载文件,比如:下载Kernel Image和Root Filesystem Image等。从宿主机下载的文件,通常先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机中的FLASH类固态存储设备中。BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用。,像Blob或U-Boot等这些功能强大的BootLoader,通常都支持这两种工作模式,并

7、且允许用户在这两种工作模式之间进行切换。比如,U-Boot在启动时处于正常的启动加载模式,但是它会延时5秒,等待终端用户按任意键将U-Boot切换到下载模式。如果在5秒内没有按键,则U-Boot继续启动Linux内核。,BootLoader的工作流程,1.启动操作系统的方式BootLoader的主要功能是引导操作系统(1)磁盘启动方式(2)网络启动方式需要把BootLoader安装到开发板上的EPROM或Flash中。BootLoader通过以太网接口远程下载Kernel Image和Root Filesystem Image等,Flash启动方式大多数嵌入式系统都使用Flash存储介质。Fl

8、ash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。其中,NOR Flash和NAND Flash使用最为普遍。NOR Flash,也就是线性Flash,支持随机访问,即代码可以直接在NOR Flash上执行。除了NOR Flash,还有NAND Flash、Compact Flash、DiskOnChip等,这些Flash具有价格低、存储容量大的特点。但是,这些芯片一般是通过专用控制器的I/O方式来访问,不能随机访问,因此引导方式跟NOR Flash也不同。在这些芯片上,需要配置专用的引导程序。通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而

9、实现自举启动,这跟从磁盘上启动有些相似。,BootLoader一般存储在Flash芯片上。另外,Kernel Image和Root Filesystem Image等也可以存储在Flash(通常是NAND Flash)上。通常把Flash分区使用,每个区的大小应该是Flash擦除块大小的整数倍。BootLoader区:BootLoader一般放在Flash的底端或者顶端,这要根据处理器的复位向量设置情况而定。不过,BootLoader的入口地址一定是CPU上电后执行的第一条指令的地址。参数区:是BootLoader向操作系统内核传递的参数所在的区域。内核映像区:BootLoader引导操作系统

10、内核,就是从该区将Kernel Image解压到RAM中,然后跳转到Kernel Image的入口地址去执行。文件系统区:如果使用Ramdisk文件系统,BootLoader需要把它解压到RAM中。如果使用JFFS2文件系统,将直接挂接为根文件系统。其它区:还可以分出其它一些数据区,这要根据实际需要和Flash大小而定。这些分区由开发者定义,BootLoader直接读写对应的偏移地址。在Linux内核空间,可以配置成MTD设备来访问Flash分区。另外,有的BootLoader支持分区的功能,如Redboot等,可以创建Flash分区表,并且内核的MTD驱动可以解析出Redboot的分区表。,

11、2.BootLoader启动流程,大多数BootLoader分为stage1和stage2两部分。 Stage1-包含了依赖于CPU体系结构的代码,比如设备初始化代码等,并且,通常是用汇编语言来实现,以达到短小精悍的目的。Stage2-通常是用C语言来实现,这样可以实现更复杂的功能,而且代码具有更好的可读性和可移植性,stage1BootLoader在stage1中主要完成以下工作:(1)基本硬件设备初始化 目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。通常包括以下步骤(以执行的先后顺序):屏蔽所有中断:为中断提供服务通常是OS设备驱动程序的责任,因此在Boo

12、tLoader的执行过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器(比如ARM的CPSR寄存器)来完成。设置CPU的速度和时钟频率。RAM初始化:包括正确设置系统内存控制器的功能寄存器以及内存控制寄存器等。初始化LED:一般是通过GPIO来驱动LED,用来表明系统的当前状态(OK或Error)。如果开发板上没有LED,也可以通过初始化UART向串口打印提示信息。关闭CPU内部指令/数据cache。,2)为stage2准备RAM空间为了获得更快的执行速度,通常把stage2加载到RAM空间中执行,因此必须为加载stage2准备好一段可用的RAM空间范围。由于st

13、age2通常是用C语言实现,因此在考虑空间大小的时候,除了stage2可执行映象的大小外,还要将堆栈空间也考虑进来。另外空间大小最好是memory page大小(通常是4KB)的整数倍。(3)拷贝stage2到RAM中 stage2的可执行映像在固态存储设备的存放起始地址和终止地址; RAM空间的起始地址。(4)设置堆栈指针sp:堆栈指针的设置是为执行stage2的C语言代码做好准备。(5)跳转到stage2的入口地址,在上述一切都就绪后,就可以跳转到stage2去执行了。比如,在ARM系统中,这可以通过修改PC寄存器的值来实现。2)stage2(1)用汇编语言跳转到main函数 虽然stag

14、e2的代码通常是用C语言实现的,但是与普通C语言应用程序不同的是,在编译和链接BootLoader这样的程序时,不能使用glibc库中的任何库函数,这样就带来一个问题:从哪里跳转到main()函数呢?直接把main()函数的起始地址作为整个stage2执行映像的入口地址或许是最直接的想法,但是,这样做有两个缺点: 无法通过main()函数传递函数参数。 无法处理main()函数的返回情况。一种巧妙的方法是利用trampoline(弹簧床)的概念。即用汇编语言编写一段trampoline小程序,并将这段小程序的起始地址作为stage2可执行映象的入口地址。然后在trampoline小程序中用CP

15、U跳转指令跳入main()函数中去执行;当main()函数返回时,PC的值再次指向trampoline小程序的起始地址。简而言之,这种方法的思想就是用这段trampoline小程序作为main()函数的外部包裹(external wrapper)。,(2)初始化本阶段要使用到的硬件设备(3)检测系统的内存映射(4)加载Kernel Image和Root Filesystem Image(5)设置内核的启动参数。(6)调用内核 stage2调用Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转MEM_START0x8000地址处。在跳转时,下列条件要满足:CPU寄存器的设置:R00;R1机器类型 ID;关于 Machine Type Number,可以参见 linux/arch/arm/tools/mach-types。R2启动参数标记列表在RAM中起始基地址;CPU模式:必须禁止中断(IRQs和FIQs);CPU 必须SVC模式; Cache和MMU的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭;数据 Cache 必须关闭;,linux开发环境建立,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号