欢迎来到天天文库
浏览记录
ID:59194018
大小:538.00 KB
页数:30页
时间:2020-09-26
《第 3 章 嵌入式BootLoader原理及移植ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章嵌入式BootLoader原理及移植目录嵌入式BootLoader的基本概念1嵌入式BootLoader的两个阶段2典型嵌入式BootLoader(BLOB)的分析3BLOB在博创PXA270-S的移植4嵌入式BootLoader的基本概念嵌入式系统中的OS启动加载程序相对于操作系统内核来说,它是一个硬件抽象层ARM中,系统在上电或复位时从地址0x00000000处开始执行,这个地址是BootLoader程序在嵌入式系统中,BootLoader是严重地依赖于硬件而实现的在操作系统内核运行之前运行的一段小程序,功能:初始化硬件设备建立内存空间的映射图调整系统的软硬件环境,以便操作
2、系统内核启动嵌入式BootLoader的基本概念上电复位下载模式启动/下载系统初始化应用初始化多任务应用板级初始化系统升级开发调试嵌入式BootLoader的基本概念嵌入式BootLoader的两个阶段BootLoader的stage1基本硬件初始化1BootLoader的stage1为加载stage2准备RAM空间2为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载BootLoader的stage2准备好一段可用的RAM空间范围。由于stage2通常是C语言执行代码,因此在考虑空间大小时,除了stage2可执行映像的大小外,还必须把堆栈空间也考虑进来
3、。空间大小最好是memorypage大小(通常是4KB)的倍数必须确保所安排的地址范围确实是可读写的RAM空间,因此,必须对所安排的地址范围进行测试。BootLoader的stage1为加载stage2准备RAM空间2BootLoader的stage1拷贝BootLoader的stage2到RAM空间中3为了得到一段干净的RAM空间范围,可以将所用的RAM空间范围进行清零操作。在拷贝stage2到RAM的过程中,需要确定stage2的可执行映像在固态存储设备中的起始地址、终止地址及RAM空间的起始地址。BootLoader的stage1设置堆栈4堆栈指针的设置是为了执行C语言代码作好
4、准备。通常可以把sp的值设置为(stage2_end-4),也即在前面所讲的那个1MB的RAM空间的最顶端(堆栈向下生长)。BootLoader的stage1跳转到stage2的C入口点5在执行上述步骤后,最后跳转到BootLoader的stage2去执行。如在ARM系统中,这可以通过修改PC寄存器为合适的地址来实现。BootLoader的stage2通常,stage2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接BootLoader这样的程序时,不能使用glibc库中的任何支持函数。这就带来一个问题,
5、那就是从哪里跳转进main()函数呢?直接把main()函数的起始地址作为整个stage2执行映像的入口点或许是最直接的想法。但是这样做有两个缺点:(1)无法通过main()函数传递函数参数;(2)无法处理main()函数返回的情况。trampoline程序:.text.globl_trampoline_trampoline:blmain/*若main一旦返回,必须重新调用*/b_trampolineBootLoader的stage2(1)初始化至少一个串口,以便和终端用户进行I/O输出信息;(2)初始化计时器等。(3)在初始化这些设备之前,也可以重新把LED灯点亮,以表明程序已经进
6、入main()函数的执行。初始化本阶段要使用到的硬件设备1BootLoader的stage2检测系统的内存映射2在4GB物理地址空间中哪些地址范围被分配用来寻址系统的RAM单元如SA-1100中,从0xC0000000开始的512M空间被用作系统的RAM空间在SamsungS3C44B0X中,从0x0c00,0000到0x1000,0000之间的64M地址空间被用作系统的RAM地址空间嵌入式系统往往只把CPU预留的全部RAM地址空间中的一部分映射到RAM单元上,而让剩下的那部分预留RAM地址空间处于未使用状态BootLoader的stage2必须检测整个系统的内存映射情况必须知道CP
7、U预留的全部RAM地址空间中的哪些被真正映射到RAM地址单元,哪些是处于"unused"状态的BootLoader的stage2加载内核映像和根文件系统映像3规划内存占用的布局内核映像所占用的内存范围根文件系统所占用的内存范围从Flash上拷贝BootLoader的stage2设置内核的启动参数4Linux2.4.x以后的内核都期望以标记列表(taggedlist)的形式来传递启动参数启动参数标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结
此文档下载收益归作者所有