查看ESP8266 Boot的源代码
←
ESP8266 Boot
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
=== 片内 Bootloader === 在没有外置 SPI Flash 的情形下,ESP8266 有几个外围支持元件(晶振、电容、电阻),也能启动,其片内有 ROM,带一个很小的 OS(极可能是 XTOS,xtensa 提供的最小系统),可将其理解为一个片内 Bootloader 这个 Bootloader 实现了很多常用的函数,其内存地址也是固定的,官方 SDK 已经将其导出,参考这个链接脚本:https://github.com/icamgo/noduino-sdk/blob/master/sdk/ld/eagle.rom.addr.v6.ld 这个应该是 ESP8266 最底端的,Reset 异常处理后,首先进入的就是这个 XTOS,在完成的基本系统初始化后,加载 SPI Flash 的第一部分 (0x00000 始)进入 RAM,然后串口输出这类信息: <source lang=bash> ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x40100000, len 30372, room 16 tail 4 chksum 0xe6 load 0x3ffe8000, len 900, room 4 tail 0 chksum 0x0a load 0x3ffe8388, len 392, room 8 tail 0 chksum 0x14 csum 0x14 </source> xtos 加载 SPI Flash 上的固件,跳转入口在 SPI Flash 0x00000 开始的第 5 - 8 字节,一般是 call_user_start() ,call_user_start() 实现在 libmain.a 里,是乐鑫所有 wifi 初始化的调用者 而 SPI Flash 的第二部分固件,实际是 esptool 直接取 elf 文件的 .irom0.text Section,这部分被映射到内存,具体地址在 ld script 里定义: 常见的: <source lang=bash> $ head ld/eagle.app.v6.4096.ld MEMORY { dport0_0_seg : org = 0x3FF00000, len = 0x10 dram0_0_seg : org = 0x3FFE8000, len = 0x14000 iram1_0_seg : org = 0x40100000, len = 0x8000 irom0_0_seg : org = 0x40240000, len = 0xBF800 } </source> 整个 flash 是映射到 0x40200000 开始的地方,这个映射窗口大小为 1MB。irom0 映射到内存地址空间的 0x40240000 开始的地方,因此其在 flash 上的地址偏移为 0x40000 更多探索,参考社区对其的逆向工程: * http://dflund.se/~kongo/esp8266.bin/iram0.txt * http://www.esp8266.com/viewtopic.php?f=13&t=214 <br><br>
返回到
ESP8266 Boot
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面