最简单的bootloader的编写步骤:
1. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
2. 如果bootloader比较大,要把它重定位到SDRAM
根据ARM的启动方式,如果是从NOR FLASH启动的话,首地址就是0,直接启动就行,把代码复制到SDRAM中即可,如果是NAND FLASH启动的话,一上电自动把前4K代码复制到steppingstone中,然后重新把代码复制到它的链接地址中。这样的话,在复制之前,就需要先初始化SDRAM。如果是NAND启动,同时需要先把NAND FLASH初始化了
3. 把内核从NAND FLASH读到SDRAM
4. 设置"要传给内核的参数"
a)告诉内核,使用的内存有多大
b)去哪里找根文件系统
5. 跳转执行内核
theKernal = (void(*)(int, int, unsigned int))0x30000800;//0x30000800跳转到内核所在地址是0x30000800
theKernel(0, 362, 0x30000100);//362:代表机器id,0x30000100:代表设置要传给内核的参数在内存所处的位置
/*
* mov r0, #0
* ldr r1, =362
* ldr r2, =0x30000100
* mov pc, #0x30000800 //内核回去0x30000100位置找的我们所设置的参数
*/
改进:
1. 提高CPU频率, 200MHZ ==> 400MHZ
2. 启动ICACHE