怎样才能保证硬件板子和 boot loader 的执行环境是正确的?

50 篇文章 1 订阅
13 篇文章 0 订阅

要做到这些测试, 得进行以下的这些验证项目(所有的操作都可以看 u-boot 的源代码 start.S 文件, 不同的平台可能不同, 但是意思差巴多):

1. CPU 寄存器操作测试. (参考这篇)

2. stack pointer (SP)的设定是否正确, function call 是否可正常运行.

3. 中断向量表设定是否正确, 中断向量程序是否可正确运行.

4. 内存初始化及其操作测试, 要保证所有的内存都可正常读/写(如果可以写入的话).

5. 将 data 段加载 RAM, 对 BSS(Block Started by Symbol) 段设定初值(全部置零), 如果有程序段必须在 ROM 意外的内存执行的话, boot loader 也要负责将其加载. 在此阶段, 我们必须保证当主程序执行起来后, 程序中全局变量的初始值都是正确的; 如果有需要被加载的程序段(注: *), 也必须确认其可正确执行. 


只有做好了这些测试后, 才能将板子分配各团队的其他同仁继续开发, 不然把状况不明或不稳定的板子发布, 只会制造团队的纠纷, 浪费大家时间. 

.........................................................................................................................................................................

注解: 有时我们需要把某些模块的性能改善, 一个可行的办法就是让其在速度较快的 RAM 中执行, 在执行之前必须将其从 ROM 中加载到 RAM 里. 方法就是改写 link script(关于链接脚本, 可参考相关文档). 下面只是个例子, 不同的平台环境写法不同, 咱不纠结在这, 重要的流程差不多, 意思也类似.

/* speed_up 模块的 VMA 和 LMA 都是跟在 data 段之后
 * speed_up 模块会被加到执行文件中, 但执行时期要载到 RAM 才能运行.
 */
.text_speed_up__END_data: AT(__START_data_LMA + SIZEOF(.data))
{
    _START_text_speed_up = .;    // '.' 号表示当前的 VMA.
    Speed_up_main.o(.text);
    Speed_up_main.o(.rodata);
    Speed_up_main.o(.data);
    _END_text_speed_up = .;

    /* 图方便, 假设, 这个模块没有 bss 段 */
}
_START_text_speed_up_lma = LOADADDR(.text_speed_up);
_SIZE_TEXT_SPEED_UP = _END_text_speed_up - _START_text_speed_up;

==============================================================================================================================


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值