技术笔记20230721 rBoot学习6

技术笔记20230721 rBoot学习6

  继续学习rBoot。前几天看完了rBoot的readme,今天在网上看到了几篇分析rBoot的文章。顺着文章的思路学习一下。

  • ESP8266 Bootloader开源代码解析之rboot(一)
  • ESP8266 Bootloader开源代码解析之rboot(二)

工程创建

  我学习ESP8266使用的系统是windows,所以选择了方便安装与使用的安信可一体化开发工具AiThinker_IDE v0.5。AiThinker_IDE中的ConfigTool使用默认配置。先构建一个rBoot例程项目。分别从git仓库中下载rBoot和esptool2,然后将他们复制到同一文件夹下。我的工程目录是这样的:

.
├── rBoot
├── esptool2

  分别将rBoot与esptool2导入到AiThinker_IDE中。导入时选择Existing Code as Makefile ProjectCygwin GCC。然后先编译esptool2再编译rBoot即可。

分析代码流程

  由于链接脚本中定义的入口函数ENTRYcall_user_start,我们先看一下这个函数的定义。此函数有汇编版本与C语言版本,如rBoot作者所说,使用gcc编译时使用汇编版本的入口函数,而C语言版本的入口函数虽然会占用stack但其他功能与汇编版本相同。C语言更直观,容易理解,下面就看一下C语言版本的call_user_start

// small stub method to ensure minimum stack space used
void  call_user_start(void) {
	uint32_t addr;
	stage2a *loader;
	addr =  find_image();		// 1.找到image的地址

	if (addr !=  0) {
		loader = (stage2a*)entry_addr;		// 2.加载image
		loader(addr);
	}
}

  此函数主要流程为找到image的地址、加载image。那我们继续看一下rBoot是如何找到image地址的。

你可能感兴趣的:(技术笔记,笔记,学习)