新闻  |   论坛  |   博客  |   在线研讨会
U-BOOT学习笔记(3)--启动流程
mihu525 | 2017-05-01 11:17:33    阅读:569   发布文章

经过之前吐血分析power_perp,我在看boot_perp的时候就已经没有精力细细看寄存器设置了。知道它是对DDR的初始化和配置。

这样看完了就有很多的疑问,这个power_perp和boot_perp是如何关联起来的,又是如何跳转到uboot,或者linux_perp的呢?首先,前面的power_perp和boot_perp没有代码的搬运过程,而且这两个程序看起来互相并不知道对方的存在,各自的link.lds都是从0地址开始的,这不符合常规单片机运行情况啊 !!!

那么我推测肯定elftosb在把所有文件转换成sb文件的时候搞了什么鬼。后来发现MX28中ivt这种机制貌似实现了自动搬运。大体应该是有个HAB库,在芯片复位的时候,OCROM会检测引脚和熔丝设置,根据设置调用外设驱动,从外设读取命令流,这些命令流就是HAB库里的LOAD,LOAD DCD,SKIP,HAB JUMP,HAB CALL。这是启动代码在OCROM中执行,并翻译上面的命令,把外设中的boot image拷贝到RAM中,执行HAB JUMP或者HAB CALL。调用了HAB JUMP或者HAB CALL就执行boot image中的内容了。调用完boot image后,返回在继续调用给下一个LOAD命令,然后再CALL。。。

// STMP378x ROM command script to load and run U-Boot

sources {
        power_prep="./power_prep/power_prep";
        sdram_prep="./boot_prep/boot_prep";
        hello="./hello_world/hello_world";
}

section (0) {

        //----------------------------------------------------------
        // Power Supply initialization
        //----------------------------------------------------------

        load power_prep;
        load ivt (entry = power_prep:_start)  0x8000;
        hab call 0x8000;

        //----------------------------------------------------------
        // SDRAM initialization
        //----------------------------------------------------------

        load sdram_prep;
        load ivt (entry = sdram_prep:_start)  0x8000;
        hab call 0x8000;
        //----------------------------------------------------------
        //  Load and call u_boot - ELF ARM image
        //----------------------------------------------------------

        load hello;
        load ivt (entry = hello:main)  0x8000;
        hab call 0x8000;

}

 

我仿照自带的bd文件改成自己的helloworld,并且把我的hellowrold的链接地址放到过0x0,0x2000,0x40000000结果并没有什么区别,只是在打印main的地址的时候出现在对应的地址上了,诡异吧。中间出现的0x8000我推测应该是把带有入口地址的IVT放到了0x8000的位置。当调用hab call 0x8000的时候,就会跳转到hello的入口地址,去运行用户代码。这个bd文件的详细内容在文档《Kinetis Elftosb User's Guide》(KBLELFTOSBUG.pdf),英语水平有限只是粗略的看了一下,上面的内容只是结合自己看到的以及实验的过程的一种推测,等有时间把文档再详细的看一下。

 


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客