从0写bootloader
文章目录
1、bootloader的目标:启动内核
简化版本:
2、最简单的bootloader的编写步骤
2.1、uboot第1阶段
1、初始化硬件:关看门狗、设置时钟、设置SDRAM、nand flash
2、如果booloader比较大,把它重定位到SDRAM、清除bss段
3、把内核从nand flash 读到sdram
2.2、uboot第2阶段
4、设置要传给内核的参数
5、跳转执行内核
3、编写bootloader第1阶段
编写Makefile、boot.lds
对于重定位时,是从nand还是nor启动:
nand flash的结构:
nand读操作相关:
3.1、在start.S中
/* 1. 关看门狗 */
/* 2. 设置时钟 */
/* 3. 初始化SDRAM */
/* 4. 重定位 : 把bootloader本身的代码从flash复制到它的链接地址去 */
bl nand_init /* 初始化nand flash */
/* 5. 执行main */
3.2、在init.c中
/* 判断nand或nor启动 */
int isBootFromNorFlash(void)
/* 重定位 */
void copy_code_to_sdram(unsigned char *src, unsigned char *dest, unsigned int len)
/* 清除bss段 */
void clear_bss(void)
/* 初始化nand flash */
void nand_init(void)
/* 选中nand芯片 */
void nand_select(void)
/* 取消nand片选 */
void nand_deselect(void)
/* 发命令 */