代码实现一个基本的bootloader

    什么是bootloader?百度一下一大堆,它就是给处理器优化出一个合适的环境,然后再把引线指向内核,剩下的事就交给内核,不会再有它什么事(这里的bootloader不是uboot)。那么就有人问了:如果它在执行中想有些参数之类的东西想传递给内核该怎么办呢?这不是太荒唐了吗?那当然不会这么简单了。

    硬件初始化的工作大家应该能猜到一二,1、肯定是时钟呀,但在这之前需要先关掉看门狗,2、当然是内存了(就是RAM),然后就到内核了(简单吧),但这之前如果我们的bootloader过大的话,也需要把它重定位到RAM中去。这中间有一个小技巧:就是如果你想加快bootloader的运行速度可以开启ICACHE来加快进程。然后进入main函数执行跳转工作。

在这个过程中我们bootloader会在内存中开辟一段空间把一些参数以内核能够认识的方式添加到ram段,这样每当内核需要bootloader的参数的时候她就会取这段内存以特定的方式解析数据,然后bootloader对内核就能够间接传参了。至于地址的重定位以及内核是如何跳转,这些我在代码中有比较详细的注释。代码中的一些数据是从前人的uboot中copy过来,至于寄存器的操作要针对不同的处理器另当别论了。这篇bootloader仅仅是uboot的入门,完整的uboot比这要复杂多了。

代码的参考地址:http://www.oschina.net/code/snippet_2241389_52110




转载于:https://my.oschina.net/u/2241389/blog/529920

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值