背景:荔枝派nano 运行 RTT (rt-thread) 。 使用 RTT 提供的 bootload 很复杂,编译 bin 之后需要打包成 ota 包(图形界面,无法使用 bat 等方式集成操作),才能下载进板子进行更新。

本文描述的 boot 来自于 https://gitee.com/zhangheyang/f1c100s_rt-thread

boot.bin 合法格式。

f1c100s 对 spi 引导程序是有格式要求的。格式细节我忽略不分析

start.S 内定义。

编译生成 boot.bin 之后用 mksunxi 对其进行校验,并填充相关位置。

让 f1c100s 能够认可 boot.bin ,并执行它。

boot.bin 逻辑

初始化 CPU 寄存器。

初始化中断状态。

设置中断向量表位置。

赋值中断向量表。

初始化时钟、DRAM、串口。

bl sys_clock_init

bl sys_dram_init

bl sys_uart_init

读取第二段程序并引导启动。 这里,第二段程序是 RTT。

如果是 uboot ,这里第二段就是 uboot 第二段。

bl sys_copyself

结束 有三种情况 1.返回spl 2.启动第二段程序 3.死循环

具体分析 sys_copyself 函数。

获取启动方式,如果不是SPI,那就返回 spl 状态(start.S 内定义)。

从 spi flash 0x00010000 读取 16 字节。

struct

{

void (*Exe)(void);// 程序地址?

uint32_t magic;// 魔数 0xaa55aa55

uint32_t rev;// 没有使用。

uint32_t imgLength;// 程序大小。

}head_t;

如果魔数不正确,将进入死循环 while(1)。

正确的情况下。

从 spi flash 0x00010000 读取 imgLength 长度数据到 0x80000000(DRAM);

然后直接跳转到 0x80000000。运行。

对应的第二阶段程序就有需要完成 head_t 头部信息。

RTT 需要修改内容:

start_gcc.S 文件

.vectors 最前面加入 head_t 结构。

b system_vectors; 第二段程序向量表存放位置。(向量表第一项 reset)

.long 0xaa55aa55; 魔数

.long 0; 留空

.long image_size; 程序大小

image_size 让链接器进行计算即可,不需要另外使用工具进行处理。

修改 link.lds 文件

最前面位置加入

__image_start = .;

.bss 段前面加入

__image_end = .;

最末尾处计算一下 image_size

PROVIDE(image_size = __image_end - __image_start);

f1c100s 源码_F1C100S 简易 boot 原理相关推荐

  1. java校验框架源码解析_Spring Boot原理剖析和源码分析

    Spring Boot原理剖析和源码分析 依赖管理 问题一:为什么导入dependency时不需要指定版本? spring-boot-starter-parent依赖 org.springframew ...

  2. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  3. 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 1...

    老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...

  4. 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...

    老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件 ...

  5. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

  6. 手撸spring源码分析IOC实现原理

    手撸spring源码分析IOC实现原理 文章出处:https://github.com/fuzhengwei/small-spring 根据小付哥的手撸spring核心源码一步步学习出来的结果收货总结 ...

  7. Vue3源码分析之打包原理

    Vue3源码分析之打包原理 如果之前你已经看过我的<Vue3源码分析之入门>,那么你可以直接阅读此篇文章 Vue3源码分析之入门 一.配置环境 1. 全局安装yarn Monorepo 管 ...

  8. 以太坊源码阅读3——MPT原理

    以太坊源码阅读3--MPT原理 介绍 MPT(Merkel-Patricia Tree),翻译为梅克尔-帕特里夏树 MPT提供了一个基于密码学验证的底层数据结构,用来存储键值对( key-value) ...

  9. win10最新下载编译Android源码的简易方法分享(已亲测)

    win10最新下载编译Android源码的简易方法分享(已亲测) 准备至少150G的硬盘空间 win+R 输入control 打开程序与功能-启用或关闭Windows功能 勾选"适用于Lin ...

  10. cocos源码分析--SpriteBatchNode绘图原理(转--侵删)

    cocos源码分析–SpriteBatchNode绘图原理 https://www.cnblogs.com/xiaonanxia/p/9199737.html

最新文章

  1. POJ2186——并查集+Tarjan算法求强连通分量
  2. asp.net mvc连接mysql_ASP.Net MVC连接MySQL和Code First的使用
  3. Shell基本命令汇总
  4. 80×86汇编常用指令
  5. 你造吗?这个属性值你写错了多少年?target=“_blank”
  6. python入门100例题-这 100 道 Python 题,拿去刷!!!
  7. Js中的window.parent ,window.top,window.self 代表的对象
  8. 看懂了这三个故事再结婚
  9. JAVA中apply方法的原理_关于学习java函数式接口Function中的apply方法的一些感悟
  10. 优麒麟 20.04 LTS Pro安装Canon LBP2900打印机
  11. 3.5 Python 实例4-文本进度条
  12. 福玛特机器人怎么开机_五一解放双手的选择 福玛特扫地机器人解救你
  13. 航顺HK32F030Mxx官方例程调试笔记(一)
  14. “宏观经济学”练习题1
  15. QPST驱动安装失败的原因以及解决方法
  16. HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计与实现...
  17. 点阵(点亮其中一个灯)
  18. YT8511芯片手册 解析|CSDN创作打卡
  19. shiro实现jwt
  20. 电子科大计算机科学与技术高考分数,2021四川省高考分数线公布,总分达不到这个数,考电子科大有点悬...

热门文章

  1. SECS/GEM实现(一)半导体通讯协议软件,C、C++使用介绍
  2. SWFObject 2.0 官方文档二
  3. python MySQL操作(增删改查)
  4. azw3转换为pdf_PDF怎么转换为PPT?PDF秒转PPT秘技!
  5. 2021爱分析·智慧城市厂商全景报告
  6. 费用报销管理表格计算机考试,计算机等级考试EXCEL练习题-10通讯费年度计划表...
  7. 电路第五版课后完全答案百度扫描(免费)
  8. Masscan教程和入门手册
  9. laravel判断是手机移动端访问还是PC端访问
  10. python身份证号码校验第十七位系数_python实现身份证校验位计算