blob代码分析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
blob代码分析

Blob代码分析 Blob 简介 Blob 是Boot Loader Object的缩写,是一款功能强大的Boot loader。它遵循GPL,源代码完全开放。Blob 既可以用来简单的调试,也可以启动Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux Advanced Radio Terminal)的板子写的,该板使用的处理器是StrongARM SA-1100。现在Blob 已经被移植到了很多CPU上,包括S3C44B0。 Blob源代码的硬件平台 MBA44B0是一款基于S3C44B0的开发板。本文将以运行在MBA44B0开发板上的Blob的源代码为基础,再针对自己的开发板进行Blob的移植。开发板的主要配置为: 三星ARM7 处理器S3C44B0 ; 2MB 的Flash,地址范围0x0000 0000~0x0020 0000; 8MB 的SDRAM,地址范围0x0c00 0000~0x0c80 0000; 1个串口,2个LED灯; JTAG接口; 晶振为6MHz,系统主频为60MHz。 Blob 的运行过程分析 图1 blob启动文件关系 Blob编译后的代码定义最大为64KB,并且这64KB又分成两个阶段来执行。 第一阶段的代码在start.s中定义,大小为1KB,它包括从系统上电后在0地址开始执行的部分。这部分代码运行在Flash中,它包括对S3C44B0的一些寄存器的初始化和将Blob 第二阶段代码从Flash拷贝到SDRAM中。除去第一阶段的1KB代码,剩下的部分都是第二阶段的代码。 第二阶段的起始文件为trampoline.s,被复制到SDRAM后,就从第一阶段跳转到这个文件开始执行剩余部分代码。第二阶段最大为63KB,单词trampoline词义为“蹦床”,所以在这个程序中进行一些BSS段设置,堆栈的初始化等工作后,最后跳转到main.c进入C函数。 如图2所示,2MB的Flash空间分别分配给了Blob、kernel、ramdisk。系统上电后,先执行第一阶段代码,进行相应的初始化后,将Blob 第二阶段代码复制到RAM地址blob_abs_base(blob_base则是从Blob进行自升级或调试的区域),然后跳转到第二阶段开始执行。在第二阶段中,从汇编跳转到C的Main()函数,继续进行如下工作: 外围的硬件初始化(串口,USB等); 从Flash中将kernel加载到SDRAM的kernel区域; 从Flash中的ramdisk加载到SDRAM的ramdisk区域; 根据用户选择,进入命令行模式或启动kernel。 blob启动过程中几个源代码文件的分析 ./src/blob/Makefile.am文件 …… blob_SOURCES = blob: blob-start blob-rest rm -f $@ dd if=blob-start of=$@ bs=1k conv=sync dd if=blob-rest of=$@ bs=1k seek=1 chmod +x $@ …… 其中blob-start是代码执行的第一个阶段,它在start.s中定义,其中最大为1KB。由于第一阶段代码不到1024字节,所以第一阶段代码与第二阶段代码之间有空隙,一般会自动填0。它存储在从地址0始的flash空间中,当系统加电时代码就从地址0始在flash空间中运行,完成必要的硬件初始化。 blob-rest是代码执行的第二个阶段,除去第一阶段的1KB代码,剩下的部分就是第二阶段的代码。 在分析start.s之前先分析一下./include/blob/arch/Mba44b0.h文件,该文件对S3C440b0的相关寄存器进行了定义。 …… #define LED_GPIO (0 //LED_GPIO(GPIO--通用可编程输入输出口)口定义 #define S3C44B0_MCLK // s3c44b0的时钟频率67.5MHz #define SDRAMSIZE (8) //SDRAMD的大小 #define BLOB_ABS_BASE_ADDR (0x0c200400) //blob被装载的基地址 #define BLOB_RAM_BASE (0x0c100000) //blob在RAM中的基地址 #define PARAM_RAM_BASE (0x0c110000) //内核的启动参数在RAM中的基地址 #define KERNEL_RAM_BASE (0x0c300000)

文档评论(0)

aicencen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档