什么是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
时间: 2024-11-07 21:50:09