mips汇编的问题,准确的是说汇编bootcode的问题

heavenscloud 2007-08-14 01:37:41
我想问一个关于mips架构CPU的汇编问题,准确的说是bootcode问题
MIPS的BSP补充包安装完后在开始进行开发,其中参考以前的产品代码以及TORNADO给的参考代码

在从romInit跳转到romStart程序的过程中总有这样的一段代码:



RELOC(t0, romStart)

jal t0




下面那个jal link不link无所谓的事情,最多异常返回了跳到reset就完事,但是这个reloc的部分很有意思,宏定义为:

#define RELOC(toreg,address) \
bal 9f; \
9:; \
la toreg,address; \
addu toreg,ra; \
la ra,9b; \
subu toreg,ra


在这个时候系统虽然把内存初始化好了,不过还没跳到内存去,因为romStart还没执行复制啊。CACHE虽然也初始化好了,我感觉从道理上讲这里是从uncached的kseg1跳转到kesg0的功能,这样复制会快一些。

但是这段汇编怎么都看不明白,求详细的每一条解释一下到底地址是怎么跳到kseg0段的。

我个人觉得应该是和编译器有关,上次做ARM的BSP编译的时候就是之前rom里的所有标号标的都是内存relocate以后的地址,是不是这个也一样的道理呢?

另外我想知道把TLB初始化省略掉仅仅使用KSEG0和KSEG1行不行呢?其中KSEG0为核心代码运行区间(整个内存),KSEG1段则通过地址映射为FLASH。
...全文
430 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
土豆 2007-08-28
  • 打赏
  • 举报
回复
我后来又看了一下,我觉得我们都理解错了。这个是vxworks bootloader 位置无关代码的处理手法。 romStart的连接地址是在ram所在的地址,而实际运行是在flash上,我们需要将romStart的地址换成在flash中的位置,所以该段代码先加上当前运行位置的地址,然后减去链接时生成的当前位置的地址,这样就得到实际运行时romStart的相对地址,这样就可以直接跳转过去了。跟从非cache段到cache段没关系。

#define RELOC(toreg,address) \
bal 9f; \ #ra中是label 9 在运行时的实际的当前地址
9:; \
la toreg,address; \
addu toreg,ra; \
la ra,9b; \ #9b是链接是生成的地址,在代码中是一个链接是计算出来的数据。
subu toreg,ra

个人感觉这个处理方法有点绕,让人不容易明白。如果看看PPC的处理,就明白了。那里是用romStart的链接地址减去romInit的链接地址,在加上ROM_TEXT_ADRS得到
heavenscloud 2007-08-28
  • 打赏
  • 举报
回复
原来是这样~感谢LS朋友的讲解~~似乎明白一些了
关键在于这个la ra,9b的#9b是link后地址啊~~~

多谢!
heavenscloud 2007-08-20
  • 打赏
  • 举报
回复
我感觉从是把执行的地址从非cache段变到cache段,这样复制的时候可以使用cache加速。

另外或许TLB在上电的时候确实是已经初始化好了。但是入口参数BFC0 0000是所有MIPS处理器起始入口。
另外似乎KESG0和KESG1段不需要TLB,只是把最高位去掉就是物理地址了,但是这个去掉的过程是否算经过TLB了呢,不清楚。我记得看SEE MIPS RUN中提到过这两段是不需要TLB的

最关键的还是通过reloc宏的过程PC指针是怎么变的
土豆 2007-08-19
  • 打赏
  • 举报
回复
很有趣的问题,当初也还真没仔细研究过。

我的看法:这里应该还没有跳转到KSEG0,因为代码还没有从flash上拷贝到内存。代码从flash拷贝到内存发生在romStart中。 这里应该是确保romStart是位置无关的,它的起始地址只是相对于romInit的一个偏移。具体还要看看,正好手里没有MIPS的资料,比较郁闷。

另外,关于TLB的问题,我认为TLB必须初始化的。不管用那个段,都需要TLB映射,这个是内核寻址必须的。之所以boot开始不需要作映射就能工作,是因为处理器内核已经将一开始那部分作了映射。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧