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