从0写bootloader

本文详细介绍了如何从零开始编写bootloader,包括启动内核的目标、步骤,以及uboot的两个阶段。内容涵盖硬件初始化、内核加载、参数设置和重定位等关键环节,并提供了源码解析。最后提到了如何优化和测试uboot。
摘要由CSDN通过智能技术生成

从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)

/* 发命令 */
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值