找回密码
 注册
搜索
查看: 2803|回复: 17

MTK6235(NAND+SDRAM架构)的程序装载,希望高人解惑

[复制链接]
发表于 2009-10-27 10:51:20 | 显示全部楼层 |阅读模式
MTK6235的(nand+sdram),采用nand boot架构(multi-bin),normal power up的过程大致是:
1:reset,从emi获取预定义的一条跳转指令,pc指向内部rom
2:内部rom程序跑起来后,做简单c运行环境初始化,以及外部io初始化.
3:寻找nand boot loader,并校验是否正确,若找到,则load nand boot到 sdram(开始空间为第一个image的执行域意外的空间)
4:执行nand boot,装载手机运行所需要的第一个rom.以及其他一些必要的初始化.
5:跳转到上述装载的rom的执行域,开始执行程序.
6:又开始做很多的初始化,这时用户可以看见开机logo.并且开始装载程序的第二个rom.
7:装载好第二个rom之后,程序的控制权交给os,后面程序就全面跑起来了(各个task初始化,...)

我有个疑惑:
               程序运行需要的第三个rom(DEMAND_PAGING_ROM0),是怎样装载运行的?我看有很多的用户ui res,以及部分的程序都是在这个load 域内的,并且这个load域以及执行域的地址都在0xf2000000,这个地址空间不是mtk,reverse的没有用到的,如何访问到这个地址的?

我刚接触mtk,不熟.请高人解惑.
 楼主| 发表于 2009-10-27 12:30:43 | 显示全部楼层
[em01]我先顶一下,高人冒个泡的,
点评回复

使用道具 举报

发表于 2009-10-27 12:40:29 | 显示全部楼层
你提的问题跟 hack BIN档文件(extract image, font resource)有点关系, 严重关注一下![em08]
点评回复

使用道具 举报

 楼主| 发表于 2009-10-27 13:14:43 | 显示全部楼层
高人咋都不冒泡的,难道35做的人,不多[em01]
点评回复

使用道具 举报

 楼主| 发表于 2009-10-28 09:45:50 | 显示全部楼层
[em01]我顶
点评回复

使用道具 举报

发表于 2009-10-28 10:39:51 | 显示全部楼层
我觉得os获得控制权应该是在加载完第二个rom之后吧,之所以要这样做是因为:
  1:内部ram大小有限,开始不能显示什么东西,在bootloader运行阶段只能加载一些必要的驱动。
  2:为了不让用户感觉开机太慢,要引入primary ROM,此时有显示,并加载secondary ROM(大)
  
  说错了别喷,我是做硬件的。。。
点评回复

使用道具 举报

 楼主| 发表于 2009-10-28 11:14:44 | 显示全部楼层
没错的.[em01],做硬件的,已经了解不少了
点评回复

使用道具 举报

发表于 2009-10-28 19:47:34 | 显示全部楼层
你这个说的比较外行了!
点评回复

使用道具 举报

 楼主| 发表于 2009-11-3 12:39:52 | 显示全部楼层
[em05][em06][em10][em12][em13][em14][em12][em11][em09][em05]
点评回复

使用道具 举报

发表于 2009-11-11 09:54:47 | 显示全部楼层
[em01]
点评回复

使用道具 举报

发表于 2009-12-11 00:40:14 | 显示全部楼层
guan zhu
点评回复

使用道具 举报

发表于 2010-3-10 11:10:54 | 显示全部楼层
怎么没什么人顶,很想知道这个问题~~~[em01][em01]
点评回复

使用道具 举报

发表于 2010-3-12 15:56:33 | 显示全部楼层
BIN分成了三部分,Primary BIN 、Secondary BIN、DEMAND_PAGING,开机时按照上面的方法把Primary和Secondary BIN加载到RAM中,对于DEMAND_PAGING部分就在真正使用到时才加载到shared RAM中,当shared RAM满后就会采用算法实现新老更替,这就实现了动态加载。动态加载不会减小生成BIN的大小,但会减少RAM的空间使用,在RAM空间紧张的时候我们可以将一些代码或数据放到动态加载区以达到节省RAM的目的。
在39平台中DEMAND_PAGING 运行时域地址为0xF4xxxxxx,程序中会根据这个地址来判断是不是DEMAND_PAGING中代码或数据。当我们写硬件驱动程序的时候要注意,对传过来的数据buffer指针如果判断为DEMAND_PAGING区域,我们就要这些数据复制到另外的非cached buffer中,然后将这个buffer传给硬件处理,不能直接将DEMAND_PAGING区域数据直接传给硬件处理。
点评回复

使用道具 举报

发表于 2010-4-17 21:23:19 | 显示全部楼层
以下是引用7761858在2010-3-12 15:56:33的发言:
BIN分成了三部分,Primary BIN 、Secondary BIN、DEMAND_PAGING,开机时按照上面的方法把Primary和Secondary BIN加载到RAM中,对于DEMAND_PAGING部分就在真正使用到时才加载到shared RAM中,当shared RAM满后就会采用算法实现新老更替,这就实现了动态加载。动态加载不会减小生成BIN的大小,但会减少RAM的空间使用,在RAM空间紧张的时候我们可以将一些代码或数据放到动态加载区以达到节省RAM的目的。
在39平台中DEMAND_PAGING 运行时域地址为0xF4xxxxxx,程序中会根据这个地址来判断是不是DEMAND_PAGING中代码或数据。当我们写硬件驱动程序的时候要注意,对传过来的数据buffer指针如果判断为DEMAND_PAGING区域,我们就要这些数据复制到另外的非cached buffer中,然后将这个buffer传给硬件处理,不能直接将DEMAND_PAGING区域数据直接传给硬件处理。


这样说来,是否修改图像、铃声等,只要把xF4xxxxxx後的一段抽出来,修改完再重灌便成?
点评回复

使用道具 举报

发表于 2010-5-14 10:36:01 | 显示全部楼层
nand flash分为2部分,1。rofs 放code 2。core imga
第二部分是可以xip的,mtk的ui资源就放到这里,其实并没有占用真正的
内存,分析一下scat file的内存大小就会知道。
点评回复

使用道具 举报

发表于 2010-5-14 14:48:59 | 显示全部楼层
顶各位高手!
点评回复

使用道具 举报

 楼主| 发表于 2010-6-4 13:02:05 | 显示全部楼层
好像是用arm9的cache技术实现,这部分没有研究。。。。。。
点评回复

使用道具 举报

发表于 2010-8-10 12:23:59 | 显示全部楼层
我考,这帖子要顶啊,期待高人出现,绝对的回复
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-30 18:43 , Processed in 0.048480 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表