esp8266的bootloader(仅为个人笔记) 一

本文介绍了ESP8266的引导过程,详细阐述了bootloader如何加载应用程序ROM,包括从SPI Flash的第0个扇区加载、映射到DRAM和IRAM,以及如何找到并调用应用程序的入口函数。同时,讨论了输出输入段分布,如DRAM0_0_SEG、IRAM1_0_SEG和IROM0_0_SEG,并分析了VMA的其他部分,特别是RTC Memory的使用。最后,分析了`load_rom`和`system_rtc_mem`两个关键函数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人初学者,以下仅为个人理解

引导过程(不包含bootloader的其他工作)

sdk加载spiflash的第0个扇区(bootloader从0x0000开始烧,还有bootloader的大小要控制小于4096字节,否则会造成越到第1个扇区,第1个扇区里默认是放用户配置数据的),接着sdk将bootloader中代码数据映射回dram和iram,接着进入bootloader的入口函数,接着bootloader找到第2个扇区开始的应用rom,接着bootloader完成将应用rom对应的要放在iram和dram的代码和数据映射回去,接着bootloader找到应用rom的入口函数地址,然后调用入口函数,此时bootloader工作完成,用户的应用程序开始启动

输出输入段分布

dram0_0_seg : org = 0x3FFE8000, len = 0x14000 : 输出.data(输入.data等段),输出.rodata(输入.rodata等段),输出.bss(输入.bss等段)
iram1_0_seg : org = 0x40100000, len = 0x8000 : 输出 .text(输入.text等段,这里和应用rom不同,应用rom将输入的.text段放在了irom0_0_seg中,这里做是因为操作flash的代码必须放在iram中)
irom0_0_seg : org = 0x40240000, len = 0x3C000 : 输出.irom0.text(输入.irom.text等段,.irom.text段在代码中除非明确指出否则不会代码默认是编译在.text段的) 注意 : 在别的地方看到有说操作flash的代码不能放在irom中,否则会造成 crash.[DH] ,这能解释为什么bootloader的连接脚本中将代码放在iram中的原因
用size命令查看如下 :

rboot.elf  :
section          size         addr
.rodata         0x418   0x3ffe8000
.bss              0x0   0x3ffe8418
.text           0xac8   0x40100000

没有.data 和 .irom0.text 段 , 即源代码中没有变量(bootloader主要是选择rom,要操作spiflash,所以在输出段中没有.irom

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值