Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15357464
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2008-03-20 09:44:15

obm加载流程
obm前边启动部分__main运行与地址空间无关,__main现检测当前obm是否运行在0x80000000地址,
如果没有运行在该地址,那么调用DDRInit初始化内存,之后调用__CopyDKBOBM将OBM_DKB自己的0x3500*4字节大小
数据(OBM/TAVOR/DDR/xlli_platform_defs.inc)拷贝到0x80000000地址处,执行完毕之后接下来的代码就是__ENABLE_MMU
打开MMU内存映射,之后跳转到0x80000000继续执行,因为MMU已经打开,所以0x80000000映射到了虚拟0地址,
OBM开始在0地址下运行,irq_handler也就可以正常使用,跳转到OBMBootMain开始执行OBM主程序

blob分2段,第1段为start,与地址无关,连接脚本
preview-kit/blob/src/blob$ ll start-ld-script
编译链接地址为0,该start代码运行与地址无关,将由OBM首先加载到0x83000000
,这样start将运行在0x83000000然后start代码将链接到_piggy_start中的
_trampoline,编译地址为BLOB_ABS_BASE_ADDR,也就是0x80040000的blob主体程序
加载到0x80040000地址空间,然后跳转过去执行_trampoline函数,真正启动blob主体程序

因为我们的blob没有实现mmu管理,所以导致我们的blob的zise最大为256K,blob使用obm初始化的虚拟0地址--也就是物理地址0x80000000的DDR地址,作为blob实际运行的起始地址;
0x80000000 ~ 0x80040000    ---> DDR_DKB_OBM    ( 4*64=256K)    0 ~ 0x40000
0x80040000 ~ 0x80100000   ---> DDR_TLB               (12*64=768K)    0x80040000 ~ 0x80100000
0x80100000 ~ 0xC0000000   ---> DDR_Memory        (1023*1M)        没有作任何映射
以上为1G的DDR空间在DKB、OBM和BLOB中的分配图谱


/wtptp_pxa930/DKB/StartUp/dkb_startup.s小写的s是源文件,
然后在wtptp目录下执行make之后,脚本会自动翻译生成
wtptp_pxa930/DKB/StartUp/dkb_startup.S大写的S是源文件,功编译连接使用,所以只能修改小写.s文件
阅读(5755) | 评论(12) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-28 14:30:42

多谢博主了,明白了。可惜我的nandflash里面已经有了系统,开机就会进入图形界面,想了一些办法也没有清空,多谢了,我再想想办法吧

gliethttp2010-05-27 22:27:41

在flash没有任何程序的时候wtptp与boot rom通信下载dkb,然后dkb运行起来之后wtptp就与dkb通信进行文件下载和烧写了.

chinaunix网友2010-05-27 09:48:07

"我看很多xd都是用wtptp,不知道这个东东怎么用?pc端的wtptp同手机上的那块通讯呢?是bootrom还是dkb什么的?" 同问。 marvell的文档里面也没有写怎样通过USB与host PC连接在一起的

chjf032009-09-12 01:40:44

兄弟可以提供blob的源代码吗,非常感谢 ,我的qq 42164935 有空联系。

power42009-06-17 17:00:56

我来说说pxa310上电启动的流程,顺便请教几个问题 1)我们知道arm在reset或中断都会到物理0x00地址,PXA310的0x0 地址映射的是内部的bootrom,所以可以肯定最先启动的是bootrom中的代码,这个bootrom做什么事情呢? 我想至少要做以下一些事情: 1)初始化nandflash,要不然怎么能够拷贝nand flash中的obm到sram中呢?(注释:这个是我猜的!希望知道的兄弟来指正) 2)解析boot_nontrust.bin ,拷贝其中的obm部分到sram。 3)跳转到sram的地址0x5c00 0000 开始运行obm。 2)楼上有兄弟说DKB在bootrom和obm之间运行,可是我们在make bootbin的时候,会发现 ntbb_linux.exe 只是将obm和blob 合在一起生成boot_nontrust.bin,那里来DKB呢?? 3)另外,我们下boot_nontrust.bin都是用jtag+eXtreme下载到flash中,我看很多xd都是用wtptp,不知道这个东东怎么用?