《Linux操作系统移植.ppt》由会员分享,可在线阅读,更多相关《Linux操作系统移植.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Linux操作系统移植组长:冯启阳组员:李宽 唐杏殷贝 马鼎 马妍璐项目内容1、嵌入式linux概述l 2、bootloader概述l 3、linux开发环境建立l 4、uboot移植l l 5、linux内核移植l l 6、linux文件系统移植l l 7、项目任务嵌入式linux概述l嵌入式linuxl-是将日益流行的Linux操作系统进行裁剪修改,使之能在l 嵌入式计算机系统上运行的一种操作系统。l嵌入式Linux的特点l-是版权免费、性能优异、软件移植容易、代码开放、有许l 多应用软件支持、产品开发周期短、新产品上市迅速、实l 时稳定安全等。嵌入式嵌入式linux特性特性l精简的内核,
2、性能高、稳定,多任务。l适用于不同的CPU,支持多种体系结构,如X86、ARM、MPIS、SPARC等。l能够提供完善的嵌人式GUI以。l提供嵌人式测览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。l提供完整的开发工具和SDK,同时提供PC上的开发版本。l用户可定制,可提供图形化的定制和配置工具。l常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。l针对嵌人式的存储方案,提供实时版本和完善的嵌入式解决方案。l完善的中文支持,强大的技术支持,完整的文档。l开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。嵌入式嵌入式Linux版本版本lRT-
3、Linuxl这是由美国墨西哥理工学院开发的嵌入式Linux操作系。l成功地应用于航天飞机的空间数据采集、科学仪器测控和l电影特技图像处理等广泛领域。luCLinuxl uCLinux主要是针对目标处理器没有存储管理单元MMU(lMemory Management Unit)的嵌入式系统而设计的。l特点:稳定、良好的移植性、优秀的网络功能、对各种文l 件系统完备的支持和标准丰富的API。l其编译后目标文件可控制在几百KB数量级,并已经被成功l地移植到很多平台上。红旗嵌入式Linux由北京中科院红旗软件公司推出的嵌入式Linux是国内做得较好的一款嵌入式操作系统。中科院计算所自行开发的开放源码的嵌
4、入式操作系统:Easy Embedded OS(EEOS)也已经开始进入实用阶段了。该款嵌入式操作系统重点支持p-Java。系统目标一方面是小型化,另一方面能重用Linux的驱动和其它模块。bootloader概述引导加载程序是计算机系统加电后运行的第一段软件代码对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程一个嵌入式Linux系统从软件的角度来看,通常可以分为四个层次:1.引导加载程序 包括固化在固件(firmware)中的引导代码(可选)和BootLoader两大部分。2Linux内核 特定于嵌入式板子的定制内核以及内核的启动参数。3文件系统 包括根文件系统和建立于Flash
5、内存设备之上文件系统。通常用ramdisk来作为rootfs。4用户应用程序 特定于用户的应用程序。有时在用户应用程序和内核之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。BootLoader的操作模式(Operation Mode)l两种不同的操作模式:启动加载模式(Boot loading)远程下载模式(Downloading)。仅对于开发人员才有意义。1)启动加载模式这种模式也称为自主(Autonomous)模式,BootLoader从目标机上的某个固态存储设备上,将Kernel Image加载到RAM中运行,整个过程并没有用户的
6、介入。这种模式是嵌入式产品发布时的通用模式,也是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式l远程下载模式l在这种模式下,目标机上的BootLoader通过串口连接或网l络连接等通信方式,从宿主机下载文件,比如:下载lKernel Image和Root Filesystem Image等。从宿主机下载l的文件,通常先被BootLoader保存到目标机的RAM中,然l后再被BootLoader写到目标机中的FLASH类固态存储设备l中。BootLoader的这种模式通常在第一次安装内核与根文l件系统时被使用。l像Blob或U-Boot
7、等这些功能强大的BootLoader,通常都支持这两种工作模式,并且允许用户在这两种工作模式之间进行切换。比如,U-Boot在启动时处于正常的启动加载模式,但是它会延时5秒,等待终端用户按任意键将U-Boot切换到下载模式。如果在5秒内没有按键,则U-Boot继续启动Linux内核。BootLoader的工作流程的工作流程1.启动操作系统的方式BootLoader的主要功能是引导操作系统(1)磁盘启动方式(2)网络启动方式需要把BootLoader安装到开发板上的EPROM或Flash中。BootLoader通过以太网接口远程下载Kernel Image和Root Filesystem Ima
8、ge等 Flash启动方式大多数嵌入式系统都使用Flash存储介质。Flash有很多类型,包括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也不同。在这些芯片上,需要配置专用的引导程序。
9、通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而实现自举启动,这跟从磁盘上启动有些相似。lBootLoader一般存储在Flash芯片上。另外,Kernel Image和Root Filesystem Image等也可以存储在Flash(通常是NAND Flash)上。l通常把Flash分区使用,每个区的大小应该是Flash擦除块大小的整数倍。lBootLoader区:BootLoader一般放在Flash的底端或者顶端,这要根据处理器的复位向量设置情况而定。不过,BootLoader的入口地址一定是CPU上电后执行的第一条指令的地址。l参数区:是BootLoader向
10、操作系统内核传递的参数所在的区域。l内核映像区:BootLoader引导操作系统内核,就是从该区将Kernel Image解压到RAM中,然后跳转到Kernel Image的入口地址去执行。l文件系统区:如果使用Ramdisk文件系统,BootLoader需要把它解压到RAM中。如果使用JFFS2文件系统,将直接挂接为根文件系统。l其它区:还可以分出其它一些数据区,这要根据实际需要和Flash大小而定。l这些分区由开发者定义,BootLoader直接读写对应的偏移地址。在Linux内核空间,可以配置成MTD设备来访问Flash分区。另外,有的BootLoader支持分区的功能,如Redboot
11、等,可以创建Flash分区表,并且内核的MTD驱动可以解析出Redboot的分区表。2.BootLoader启动流程 l大多数BootLoader分为stage1和stage2两部分。Stage1-包含了依赖于CPU体系结构的代码,比如设备初始化代码等,并且,通常是用汇编语言来实现,以达到短小精悍的目的。Stage2-通常是用C语言来实现,这样可以实现更复杂的功能,而且代码具有更好的可读性和可移植性 stage1BootLoader在stage1中主要完成以下工作:(1)基本硬件设备初始化 目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。通常包括以下步骤(以执行
12、的先后顺序):屏蔽所有中断:为中断提供服务通常是OS设备驱动程序的责任,因此在BootLoader的执行过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器(比如ARM的CPSR寄存器)来完成。设置CPU的速度和时钟频率。RAM初始化:包括正确设置系统内存控制器的功能寄存器以及内存控制寄存器等。初始化LED:一般是通过GPIO来驱动LED,用来表明系统的当前状态(OK或Error)。如果开发板上没有LED,也可以通过初始化UART向串口打印提示信息。关闭CPU内部指令/数据cache。2)为stage2准备RAM空间为了获得更快的执行速度,通常把stage2加载到R
13、AM空间中执行,因此必须为加载stage2准备好一段可用的RAM空间范围。由于stage2通常是用C语言实现,因此在考虑空间大小的时候,除了stage2可执行映象的大小外,还要将堆栈空间也考虑进来。另外空间大小最好是memory page大小(通常是4KB)的整数倍。(3)拷贝stage2到RAM中 stage2的可执行映像在固态存储设备的存放起始地址和终止地址;RAM空间的起始地址。(4)设置堆栈指针sp:堆栈指针的设置是为执行stage2的C语言代码做好准备。(5)跳转到stage2的入口地址l在上述一切都就绪后,就可以跳转到stage2去执行了。比如,在ARM系统中,这可以通过修改PC寄
14、存器的值来实现。2)stage2(1)用汇编语言跳转到main函数 虽然stage2的代码通常是用C语言实现的,但是与普通C语言应用程序不同的是,在编译和链接BootLoader这样的程序时,不能使用glibc库中的任何库函数,这样就带来一个问题:从哪里跳转到main()函数呢?直接把main()函数的起始地址作为整个stage2执行映像的入口地址或许是最直接的想法,但是,这样做有两个缺点:无法通过main()函数传递函数参数。无法处理main()函数的返回情况。一种巧妙的方法是利用trampoline(弹簧床)的概念。即用汇编语言编写一段trampoline小程序,并将这段小程序的起始地址作
15、为stage2可执行映象的入口地址。然后在trampoline小程序中用CPU跳转指令跳入main()函数中去执行;当main()函数返回时,PC的值再次指向trampoline小程序的起始地址。简而言之,这种方法的思想就是用这段trampoline小程序作为main()函数的外部包裹(external wrapper)。(2)初始化本阶段要使用到的硬件设备(3)检测系统的内存映射(4)加载Kernel Image和Root Filesystem Image(5)设置内核的启动参数。(6)调用内核 stage2调用Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转MEM_STAR
16、T0 x8000地址处。在跳转时,下列条件要满足: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开发环境建立虚拟机和linux安装配置虚拟机安装VMware-workstation-6.5.1-126130”目录下包含了虚拟机的安装软件的压缩包
17、,安装了之后,就可以在PC上不用改动分区的情况安装Linux操作系统了。Linux安装Ubutufederal 10交叉编译环境的建立交叉编译-在一个平台上生成可以在另一个平台上执行的代码1)工具EABI_4.3.3_EmbedSky_20091210.tar.bz2是用于在PC的Linux系统中交叉编译开发板的Linux.2)方法解压到/opt/EmbedSky/4.3.3/目录 终端执行命令#tar xvfj EABI_4.3.3_EmbedSky_20091210.tar.bz2-C/终端输入命令:#gedit/etc/profile 执行打开profile文件,然后修改内容如下图所示:(红 色 框)终端输入命令:#source/etc/profile 使交叉编译器生效终端输入命令:#arm-linux-gcc-v来验证交叉编 译器是否生效