嵌入式系统Bootloader学习笔记_第1页
嵌入式系统Bootloader学习笔记_第2页
嵌入式系统Bootloader学习笔记_第3页
嵌入式系统Bootloader学习笔记_第4页
嵌入式系统Bootloader学习笔记_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在嵌入式系统学习过程中涉及到了在嵌入式系统学习过程中涉及到了Bootloader , 下面讲述了Bootloader 的基本作用,在后续的文章中我将对如何编写自己的Bootloader 进行介绍。1. Bootloader 的基本概念:简单地说,bootloader 就是在操作系统内核运行前运行地一段小程序。通过这段小程序,可以对硬件设备,如CPU、 SDRAM 、 Flash 、串口等进行初始化,也可以下载文件到系统板、对Flash 进行擦除和编程,真正起到引导和加载内核镜像的作用,但是随着嵌入式系统的发展,bootloader 已经逐渐在基本功能的基础上,进行了扩展,bootloader

2、可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。从这个层面上看,功能扩展后bootloader 可以虚拟地看成是一个微小的系统级的代码包。bootloader 是依赖于硬件而实现的,特别是在嵌入式系统中。不同的体系结构需求的 bootloader 是不同的;除了体系结构,bootloader 还依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU 构建,运行在其中一块电路板上的bootloader ,未必能够运行在另一块电路开发板上。BootLoader 为系统复位或上电后首先运行的代码,一般应写

3、在起始物理地址0x0 开始。 Bootloader 的启动过程可以是单阶段的,也可以是多阶段的。通常。多阶段的bootloader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的bootloader 大多数是二阶段的启动过程,也即启动过程可以分为 stage 1 和 stage 2 两部分。2. ARM Bootloader 的一般作用对于一个ARM 系统来说,本质上, bootloader 作为引导与加载内核镜像的“ 工具 ” ,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:( 1 ) 初始化 RAM (必需):bootloader 必须能够初始化RAM ,

4、因为将来系统要通过它保存一些Volatile 数据, 但具体地实现要依赖与具体的CPU 以及硬件系统。( 2 ) 初始化串口(可选,推荐):bootloader 应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些debug 的工作;甚至与PC 通信。( 3 n 启动内核镜像(必需):根据内核镜像保存的存储介质不同,可以有两种启动方式:FALSH 启动以及RAM 启动;但是无论是哪种启动方式,下面的系统状态必须得到满足:lCPU寄存器的设置:R0=0;R1=机器类型;R2 =启动参数标记列表在 RAM中的起始地址;这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。lCPU

5、模式:关闭中断;属于 SVC 模式;Bootloader 中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC 模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作,例如一些特定寄存器访问操作。l Cache 和 MMU 的设置:MMU 必须关闭;数据cache 必须关闭;指令cache 可以关闭也可以开启;Bootloader 中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟地址,因此MMU 必须关闭。Bootloader 主要是装载内核镜像,镜像数据必须真实写回SDRAM 中,所以数据cache 必须关闭;而对于指令cache,不存在强制

6、性的规定,但是一般情况下,推荐关闭指令cache 。Bootloader 启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句指令语句。Bootloader 存在的必要性Bootloader 的功能决定了在引导Linux 系统时,必须使用bootloader ,除非你对 linux 内核进行了修改。Bootloader 有两个主要功能:1 在发布模式,自动引导linux 系统,为系统初始化各种参数。2 在调试模式,要能够方便的下载内核,引导内核。Linux 系统一定要bootloader 支持吗?答:是的。通用的Linux 内核,启动时需要很多参数,这些参数必须通过bootloader

7、传递。 而且内核一般是压缩存放到外存上的,从外存到内存的拷贝也是由 bootloader 完成。Bootloader 为什么不和kernel 放到一起呢?答:不可以这样做。从bootloader 的第二个功能就知道,bootloader 是不能和内核放到一起。当然,在发布模式时,是可以集成到一起的,通常没必要。从哪里可以得到bootloader ?答:目前通用的bootloader 很多,不论是嵌入式还是桌面系统,比如lilo,grub,blob 等。桌面用的bootloader 我们就不讨论了,重点说一下嵌入式领域用的bootloader 。采用通用的bootloader 功能强大,开发容易

8、,而且由专人维护升级,不过多是针对特定的CPU 或者特定开发板的。如果是学习,推荐自己开发bootloader如何编写自己的bootloader?答:编写一个bootloader 只要能够完成前面提到的两个功能就可以了。分别描述一下这两个功能的实现:1 该功能比较简单,就是从FLASH 中拷贝数据到RAM 。如果内核的存放不是基于文件系统的,直接采用汇编就可以完成块拷贝。然而如果内核存放在文件系统之上,比如内核存放到了基于ext2 文件系统的CF 卡上。首先我们的 bootloader 要能够访问CF 卡, 然后要能够识别文件系统,只有这样才能正确找到内核文件并拷贝到内存中。2 该功能一般通过

9、串口实现。对于ARM 来说,驱动串口比较容易,直接从主机的串口接收内核数据存放到RAM 中,就可以启动内核了。如果需要发布,还要实现把内核从RAM 烧写到外存的能力。为了提高速度,充分挖掘开发板和CPU 的潜力, 出现了许多用网口和USB接口下载内核的bootloader 。使用网口,bootloader 必须提供网卡驱动和TCP/IP 协议的支持。使用USB 接口,需要提高大容量存储类驱动。为了拓展思路,你也可以使用红外,存储卡接口进行数据下载。使用红外接口,和串口基本一样,无非就是没有了连线。使用存储卡,通常需要文件系统的支持。比如,我们使用SD 卡存放内核,在主机交叉编译好内核后,把内核

10、存放到SD 卡上。然后将XD 卡插到目标板的插槽中,bootloader 必须有能力把 SD 卡上的内核拷贝的RAM 中,过程参考功能1 的实现,下面讲述了Bootloader 的基本作用,在后续的文章中我将对如何编写自己的Bootloader 进行介绍。1. Bootloader 的基本概念:简单地说,bootloader 就是在操作系统内核运行前运行地一段小程序。通过这段小程序,可以对硬件设备,如 CPU、SDRAM、Flash、用口等进行初始化,也可以下载文件到系统板、对 Flash 进行擦除和编程,真正起到引导和加载内核镜像的作用,但是随着嵌入式系统的发展,bootloader 已经逐

11、渐在基本功能的基础上,进行了扩展,bootloader 可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。从这个层面上看,功能扩展后bootloader 可以虚拟地看成是一个微小的系统级的代码包。bootloader 是依赖于硬件而实现的,特别是在嵌入式系统中。不同的体系结构需求的 bootloader 是不同的;除了体系结构,bootloader 还依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的 CPU 构建, 运行在其中一块电路板上的bootloader , 未必能够运行在另一块电路开发板上。B

12、ootLoader 最为系统复位或上电后首先运行的代码,一般应写在起始物理地址0x0 开始。 Bootloader 的启动过程可以是单阶段的,也可以是多阶段的。通常多阶段的bootloader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的bootloader 大多数是二阶段的启动过程,也即启动过程可以分 为 stage 1 和 stage 2 两部分。2. ARM Bootloader 的一般作用对于一个ARM 系统来说,本质上, bootloader 作为引导与加载内核镜像的“ 工具 ” ,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:( 1) 初始化 R

13、AM (必需):bootloader 必须能够初始化RAM ,因为将来系统要通过它保存一些Volatile 数据,但具体地实现要依赖与具体的CPU 以及硬件系统。( 2) 初始化串口(可选,推荐):bootloader 应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些debug 的工作;甚至与PC 通信。( 3 n 启动内核镜像(必需):根据内核镜像保存的存储介质不同,可以有两种启动方式:FALSH 启动以及RAM 启动;但是无论是哪种启动方式,下面的系统状态必须得到满足:lCPU寄存器的设置:R0 = 0;R1=机器类型;R2 =启动参数标记列表在 RAM中的起始地址;这三个寄存

14、器的设置是在最后启动内核时通过启动参数来传递完成关闭中断;CPU 模式:属于 SVC 模式;Bootloader 中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC 模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作,例如一些特定寄存器访问操作。l Cache 和 MMU 的设置:MMU 必须关闭;数据cache 必须关闭;指令cache 可以关闭也可以开启;Bootloader 中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟地址,因此MMU 必须关闭。Bootloader 主要是装载内核镜像,镜像数据必须真实写回SDRAM 中,所以数

15、据cache 必须关闭;而对于指令cache ,不存在强制性的规定,但是一般情况下,推荐关闭指令cache 。Bootloader 启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句指令语句。Bootloader 存在的必要性Bootloader 的功能决定了在引导Linux 系统时,必须使用bootloader ,除非你对 linux 内核进行了修改。Bootloader 有两个主要功能:1 在发布模式,自动引导linux 系统,为系统初始化各种参数。2在调试模式,要能够方便的下载内核,引导内核。Linux 系统一定要bootloader 支持吗?答:是的。通用的Linux 内核,启

16、动时需要很多参数,这些参数必须通过bootloader 传递。而且内核一般是压缩存放到外存上的,从外存到内存的拷贝也是由 bootloader 完成。Bootloader 为什么不和kernel 放到一起呢?答:不可以这样做。从bootloader 的第二个功能就知道,bootloader 是不能和内核放到一起。当然, 在发布模式时,是可以集成到一起的,通常没必要。从哪里可以得到bootloader ?答:目前通用的bootloader 很多,不论是嵌入式还是桌面系统,比如lilo,grub,blob 等。桌面用的bootloader 我们就不讨论了,重点说一下嵌入式领域用的bootloade

17、r 。采用通用的bootloader 功能强大,开发容易,而且由专人维护升级,不过多是针对特定的CPU 或者特定开发板的。如果是学习,推荐自己开发bootloader 。如何编写自己的bootloader?答:编写一个bootloader 只要能够完成前面提到的两个功能就可以了。分别描述一下这两个功能的实现:1 该功能比较简单,就是从FLASH 中拷贝数据到RAM 。如果内核的存放不是基于文件系统的,直接采用汇编就可以完成块拷贝。然而如果内核存放在文件系统之上,比如内核存放到了基于ext2 文件系统的CF 卡上。首先我们的bootloader要能够访问CF卡,然后要能够识别文件系统,只有这样才能正确找到内核文件并拷贝到内存中。2 该功能一般通过串口实现。对于ARM 来说,驱动串口比较容易,直接从主机的串口接收内核数据存放到RAM 中, 就可以启动内核了。如果需要发布,还要实现把内核从RAM 烧写到外存的能力。为了提高速度,充分挖掘开发板和CPU 的潜力,出现了许多用网口和USB接口下载内核的bootloader 。使用网口,bootloader 必须提供网卡驱动和TCP/I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论