动态模块加载和ELF Loader

很早很早以前就想在嵌入式系统上实现动态模块加载的功能了,期间走了些弯路,直到最近,才完整地在嵌入式系统上实现动态模块加载。

=== 动态模块加载的好处 ===

动态模块加载的好处很多,例如,当你升级一个系统的时候,可以只升级一个模块,而不必升级整个系统。你可以把不同的模块放在不同的介质上,并实施不同等级的保护,例如BIOS部分进行写保护。

有些系统允许用户进行二次开发,这个时候几乎一定是需要动态加载功能的,因为你不希望用户需要链接整个系统才能够进行二次开发,而且你可能希望支持多个用户模块,彼此不相互依赖,彼此不干扰。

=== Background ===

一般来说,C的编译器编译出来的代码,由以下几个重要的部分:
.code: 代码段
.data: 有初值的数据段
.bss: 无初值的数据段

通常还有.rodata,是只读的数据段,在嵌入式系统中经常可以合并到.code段中.

注: .code, .data 和.bss这些段的命名不同的编译器可能会有不同。

由于不同段在实际运行的时候可能会被加载到不同的介质,例如.code和.rodata可以放在NOR FLASH上而.data,.bss放入RAM中,或者要满足所谓的scatter loading,因此编译器会努力使段可以自由移动。

但是要做到这一点,并不容易。

在代码段中运行的指令,要获取数据段中的数据,方法有&#
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值