关于msm8x60的启动

小组让做ppt,内容太多,看得不是很仔细,结果讲得一塌糊涂的尴尬。但是想想也是自己这段时间看的,总是该总结总结的,至少以后自己看了,有点启发吧。

简单说说msm8x60的启动,首先是arm7中,根据PBL启动RPM,在由RPM启动SBL1,SBL1之后分成两部分:RPM和SBL2,RPM这里陷入一个循环,等待一个变量的改变,之后再进入rpm_main_ctl的主函数,而这个变量将在sbl2跳转sbl3时被触发。sbl2在启动后,会跳转三个方向:1.tz.img,这个我基本没看,2.rpm,指定rpmFirmware启动后的主函数,3.sbl3,在跳转时会将一个*JUMPRPM*(名字没记住)的值赋给一个变量,触发sbl1留下的跳转RPM的循环,实现RPM的跳转。

代码中有1个重要的结构:sbl1/2/3_config_table[],里面包括,一个或者多个成员,以NULL结束。每个成员里面有包含着以下几个重要的成员:exec_func, jump_func, load_sbl_pre_procs, load_sbl_post_procs.

另外在sbl的主控函数中sbl1/2/3_main_ctl中最后一个函数很重要,全称不记得了,它调用了config_table.而后逐个执行config_table的成员,这时它调用的是另一个函数,该函数主要是:1执行load_sbl_pre_procs中的函数清单,2,把跳转的信息拷贝到一个局域变量,而后传递给bl_shared_data,3.跳转exec_func,4.执行load_sbl_post_procs,5.执行jump_func,其中jump_func和exec_func,两者只能执行其一。

sbl1没有exec_func和jump_func,sbl2的config_table有三个成员tz镜像,它在exec_func中执行跳转,它的post_procs为NULL;RPM的pre_procs只用一个函数,指定跳转地址,但是由于之前的循环没有被触发,所以这里不跳转;SBL3,它在jump_func跳转,同时在jump_func中触发rpm跳转。

sbl3跳转appsbl和上面的差不多,appsbl的相关过程,参看:http://www.sctarena.com/Article/Article.asp?nid=3726

   值得一提的aboot_init函数是先通过宏定义生成并放在apps的代码段(__SECTION(apps)),然后apps_init函数中挨个初始化apps代码段的函数时,启动aboot_init,在aboot中boot_linux_from_flash 和boot_linux_from_mmc中都有boot_linux,从而启动linux。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值