代码实现一个基本的bootloader

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

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

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

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

相关文章
相关标签/搜索