查看: 1969|回复: 1

初识DSP Bootloader

[复制链接]
  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2019-1-20 12:09:36 | 显示全部楼层 |阅读模式
    分享到:
    bootloader即引导程序,在学嵌入式中也有这个概念。今天又是纠结了一天的概念和流程,总算有个初步的认识,先把它记下来。

    这里有必要清楚什么叫二次bootloader。首先dsp上电复位后,会触发复位中断,中断指向固化在片内ROM中的bootloader代码。这是出厂就存在的引导程序,不可修改。它实现的功能是查询bootloader模式规定的接口,初始化该接口,并从该接口中读取“固定大小”内的源程序并搬移到内存RAM的0地址执行。这个过程叫一次引导。至于为什么要搬到RAM执行程序,因为内存读取速度远比flash等快。注意此时的bootloader不会初始化与模式无关的外设。

    小程序只需要一次引导,但一般程序规模大于这个“固定大小(一般64K或1K)”,这时候程序员就在原接口储存器编写一个新的引导程序,这个引导程序不会超过这个“固定大小”,而源程序则放在另外一处,这样在新的bootloader程序中实现搬移源程序的工作。这样当系统复位时,第一次引导把接口中的第二次引导程序复制到RAM中执行,复位结束后,在RAM的0地址中执行第二次引导,将目的源程序复制到RAM中执行。即第二次引导实现真正的代码搬移,第一次引导是第二次引导的引导。



    整个引导程序模块有以下部分:

    1、存储区、代码段和数据段的配置;

    该部分即链接命令cmd文件,具体语法可查阅。

    2、编写二次引导程序,生成复制表;

    因为一次引导程序没有初始化C语言环境,所以二次引导程序一般只能用汇编语言编写。程序中包括三部分:

    a. 配置需要的外设寄存器,例如EMIF寄存器。

    b. 定义复制引导表,并根据表信息用代码实现源代码的搬移。

    (所谓引导表,可以理解为复制代码时需要的格式要求)

    c. 跳转到C程序入口函数c_int00(),它最后会调用main函数。

    3、COFF文件转化为hex和bin文件。

    烧写需要hex和bin格式,需要进行转化。需要编写boot引导表格式生成cmd文件,注意这个cmd文件不是链接命令的那种。然后调用软件自带的exe程序,以cmd文件为参数,对引导程序和源程序一起编译产生的.out文件进行格式转换,转换后可以烧写入flash。

    最后,对于引导表的生成有两种方法,一种是显式的说明大小、地址等,一种是借助链接cmd文件相关指令。我也没实践过,先记着吧。
    ---------------------
    作者:hunterlew
    来源:CSDN
    原文:https://blog.csdn.net/hunterlew/article/details/41517705
    版权声明:本文为博主原创文章,转载请附上博文链接!

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 22:16 , Processed in 0.113751 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.