从零开发一个RTOS系列--loader篇

RTOS只是一个内核,要正常启动,和Linux的Uboot类似存在一个loader的模块,这个loader可以做的很专用,不考虑通用情况,只针对某一款特定的平台,特定的RTOS而编写。

下面这个GitHub上的代码库就是笔者简单修改的一个loader。

https://github.com/JeremyLi/bootloader

之前提到的这款RTOS是静态编译、链接的(可以通过-fPIC和链接脚本联合控制),也即是其运行地址是固定的,要使RTOS正常工作只需要把RTOS的Kernel搬运到那个固定地址再跳过去运行就行了。

下面说一下这个BootLoader的主要代码的功能:

 

主要函数是_relocate 和 _load_kernel。_relocate是模仿UBoot的relocate函数,重定BootLoader自身的位置无关代码的逻辑,这里只是简单的把.data和.bss段设置一下,.text段没动。_load_kernel函数是加载RTOS内核的代码,其主要是把Kernel的.text段从lma拷贝到vma,同时也把.data段拷贝到特定地址,把.bss段清零。另外在RTOS内部一般会把.bss后面的 RAM当做heap来用,C库的malloc函数会依据.bss的最后地址初始化_sbrk相关变量以供后面内存申请和释放时使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值