This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

bootloader的一些疑问

您好!

麻烦请教一下如下的几个关于bootloader的问题:

1.boot rom已经给出了源代码,但是我想问boot rom里的程序是否可以我们自己修改?

2. 我可不可以把boot rom理解成一个rom,是有core 0去读取里面的程序来完成RBL的所有功能?

3. host mode下,知道地址的情况,我们还需要做参数表等操作么,是不是直接把程序下载到core的l2上就可以了?

4.hex等文件有源代码可以看么?.out文件中本来就包含有段信息,hex做了哪些修改?

5.core1-core7的核一开始就处于IDLE状态么?是不是受到中断后就跳转到boot magic的地址的上去了?这个跳转是水区引导的呢?

问题有些多,但是都是原理性问题,我也是做好了boot后产生的一些疑问,麻烦Andy和大家了!

  • 还有就是是不是只有Corepac 0需要在L2预留空间,其他核需要么?

  • 1. RBL(Rom Bootloader)不能自己修改,如果想自己在boot的时候添加功能,应考虑用IBL(MCSDK里有例子);

    2. RBL就是一段代码,CORE 0读取它并执行;

    3. 主机下载后,需要写core 0的magic address启动;

    4. hex去除了.out文件的多余信息,保留执行码等并形成boot able,无源代码;

    5.core1-7为IDLE,core 0启动后,写每个core的magic address,并发给每一个core一个IPC中断启动它,该IPC中断不需要在代码里响应;

    6. 视使用的boot mode 不同,需保留每个核高位的一部分,比如以太网启动,需保留每个核上的(0x0087 2DC0 ~ 0x0087 FFFF),EMIF16启动不用保留因为它是直接从NOR启动的。

     

  • 您好

    Allen就你的问题给出了很详细的解答,如果想详细了解RBL加载的工作流程,建议可以花点时间看看RBL 源码。

    RBL 源码链接:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/6352.aspx

  • 谢谢Allen核Andy的答复!

    大部分我都能理解了,还有一点小问题希望能在深入点。

    3. boot table中有每个核的c_int00信息,已知地址方式是如您所说,UG上说EMAC方式下是RBL直接跳转c_int00,就不用拷贝了。我觉得RBL在copy镜像文件时,有识别c_int00然后把它放到每个核单独的一个寄存器的功能(不好意思我没查到这一点的RBL代码),这正确么?

    5.不需要再代码里响应是什么意思?您的意思是不需要写中断服务程序么?我理解受到中断后,其他核就会跳转到自己的magic address,我想问这是哪个模块执行的这个跳转。

    6. core 0的保留区上有说明,有很多是用来RBL的栈,那其他核不用跑RBL,core1-7是不是指需要留出最后一个字magic地址空间便可以。

    谢谢您!

  • Boottable里只有core 0的c_int00, RBL只唤醒core 0, 其它core是靠core 0唤醒的,也就是说在合并boottable的时候要去掉其它core 的入口地址;

    不需要响应此IPC中断,RBL执行了这次跳转;

    不是,文档里明确提出要所有的核都保留这些内存,不仅仅是magic address

    The RBL reserves a portion of the L2 in all the cores in the device to perform the boot process. The start address, size, and the definition of the sections reserved are listed in the device-specific data manuals.

  • 1. 目前我用的第三方公司做的设备  EMAC下启动可以实现 但是我确实在0核没有写入c_int00地址 而是靠Core1-7自己从core0 拷贝到L2 的boot table中寻找。

        按您的说法,如果工具链是一样的工具链的话(mergtbl。exe一样的话),去掉了其他核的入口地址表不可能实现boot。

       目前我看不到这个exe文件的源码,所以我不知道在这个问题上该怎么理解?

    2. 谢谢,这个问题差不多理解了,我估计core 0的RBL 使用全局地址让其他core跳转这个指令的,之前没看明白;

    3. 这句话我在文档中也看见了,但是没有找到其他文档有具体的解释,我这边继续试验一下,看在保留区域写入无效数据会出现什么情况。

    很感谢Allen的指导!

  • 防止沉贴,自顶一楼!

  • 你好,我在使用从nor flash加载功能时,发现小文件都可以100%成功加载,但我的核0加了一个RTOS,编译出来的镜像打包之后也有接近两兆,烧写上去后会出现10%概率的加载失败,仿真器连上发现是代码跑飞了,请问这个问题该如何解决呢?芯片是6678