f1c100s 源码_F1C100S 简易 boot 原理
背景:荔枝派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 原理相关推荐
- java校验框架源码解析_Spring Boot原理剖析和源码分析
Spring Boot原理剖析和源码分析 依赖管理 问题一:为什么导入dependency时不需要指定版本? spring-boot-starter-parent依赖 org.springframew ...
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...
- 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 1...
老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...
- 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...
老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件 ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
- 手撸spring源码分析IOC实现原理
手撸spring源码分析IOC实现原理 文章出处:https://github.com/fuzhengwei/small-spring 根据小付哥的手撸spring核心源码一步步学习出来的结果收货总结 ...
- Vue3源码分析之打包原理
Vue3源码分析之打包原理 如果之前你已经看过我的<Vue3源码分析之入门>,那么你可以直接阅读此篇文章 Vue3源码分析之入门 一.配置环境 1. 全局安装yarn Monorepo 管 ...
- 以太坊源码阅读3——MPT原理
以太坊源码阅读3--MPT原理 介绍 MPT(Merkel-Patricia Tree),翻译为梅克尔-帕特里夏树 MPT提供了一个基于密码学验证的底层数据结构,用来存储键值对( key-value) ...
- win10最新下载编译Android源码的简易方法分享(已亲测)
win10最新下载编译Android源码的简易方法分享(已亲测) 准备至少150G的硬盘空间 win+R 输入control 打开程序与功能-启用或关闭Windows功能 勾选"适用于Lin ...
- cocos源码分析--SpriteBatchNode绘图原理(转--侵删)
cocos源码分析–SpriteBatchNode绘图原理 https://www.cnblogs.com/xiaonanxia/p/9199737.html
最新文章
- POJ2186——并查集+Tarjan算法求强连通分量
- asp.net mvc连接mysql_ASP.Net MVC连接MySQL和Code First的使用
- Shell基本命令汇总
- 80×86汇编常用指令
- 你造吗?这个属性值你写错了多少年?target=“_blank”
- python入门100例题-这 100 道 Python 题,拿去刷!!!
- Js中的window.parent ,window.top,window.self 代表的对象
- 看懂了这三个故事再结婚
- JAVA中apply方法的原理_关于学习java函数式接口Function中的apply方法的一些感悟
- 优麒麟 20.04 LTS Pro安装Canon LBP2900打印机
- 3.5 Python 实例4-文本进度条
- 福玛特机器人怎么开机_五一解放双手的选择 福玛特扫地机器人解救你
- 航顺HK32F030Mxx官方例程调试笔记(一)
- “宏观经济学”练习题1
- QPST驱动安装失败的原因以及解决方法
- HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计与实现...
- 点阵(点亮其中一个灯)
- YT8511芯片手册 解析|CSDN创作打卡
- shiro实现jwt
- 电子科大计算机科学与技术高考分数,2021四川省高考分数线公布,总分达不到这个数,考电子科大有点悬...
热门文章
- SECS/GEM实现(一)半导体通讯协议软件,C、C++使用介绍
- SWFObject 2.0 官方文档二
- python MySQL操作(增删改查)
- azw3转换为pdf_PDF怎么转换为PPT?PDF秒转PPT秘技!
- 2021爱分析·智慧城市厂商全景报告
- 费用报销管理表格计算机考试,计算机等级考试EXCEL练习题-10通讯费年度计划表...
- 电路第五版课后完全答案百度扫描(免费)
- Masscan教程和入门手册
- laravel判断是手机移动端访问还是PC端访问
- python身份证号码校验第十七位系数_python实现身份证校验位计算