AM3352启动分析:
Stp1: 定义栈大小
Stp2: 复位CPU
Stp3: 禁能FIQ和IRQ
Stp4: 清除Bss
Stp4:调用main()函数
具体过程如下:
1.声明全局函数,以便在其他文件中调用:
.global Reset @Reset the CPU.global _stack @Define Stack .global _bss_start @Define the start of the BSS(Block Started by Symbol).global _bss_end @Define the end of the BSS.global start_boot @main()
2.定义栈大小(.set相当于C中#define )具体见笔记
.set UND_STACK_SIZE, 0x8 @未定义.set ABT_STACK_SIZE, 0x8 @数据访问中止.set FIQ_STACK_SIZE, 0x8 @快速中断.set IRQ_STACK_SIZE, 0X800 @外部中断.set SVC_STACK_SIZE, 0x8 @管理
3.复位CPU,操作方式为为每个模式设置栈
Entry:LDR r0, =_stack @ Read the stack addressMSR cpsr_c, #MODE_UND|I_F_BIT @ switch to undef modeMOV sp,r0 @ write the stack pointerSUB r0, r0, #UND_STACK_SIZE @ give stack space @@ Set up the Stack for abort mode @ MSR cpsr_c, #MODE_ABT|I_F_BIT @ Change to abort modeMOV sp, r0 @ write the stack pointerSUB r0,r0, #ABT_STACK_SIZE @ give stack space后面的模式都一样,不再一一列举
4.清除BSS,利用循环,每次清除一个字
Clear_Bss_Section:LDR r0, =_bss_start @ Start address of BSSLDR r1, =(_bss_end - 0x04) @ End address of BSSMOV r2, #0 Loop: STR r2, [r0], #4 @ Clear one word in BSSCMP r0, r1BLE Loop @ Clear till BSS end
5.至此,终于可以跳转到C代码了:
@Enter_main:LDR r10,=start_bootMOV lr,pc @ Dummy return from start_bootBX r10 @ Branch to start_bootSUB pc, pc, #0x08 @ looping
经过一天的实验,终于引导成功,实现了IO操作
待续……
转载于:https://www.cnblogs.com/liutingbl/p/4151028.html
AM3352启动分析:相关推荐
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 )
文章目录 一. Launcher 应用 startActivitySafely 方法分析 二. Launcher 中的 startActivity(View v, Intent intent, Obj ...
- springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器
springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...
- 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT
全志H3启动分析,移植主线UBOOT 参考资源 启动流程 因为使用的是外扩SD卡,因此主要参考了这部分内容:Bootable SD card SD卡Layout如下: start sector siz ...
- STM8启动分析及IAP
STM8启动分析及IAP 转载于:https://www.cnblogs.com/LittleTiger/p/5535041.html
- ADS中startup.s文件启动分析
映像文件分析,ADS 中startup.s 文件启动分析,学嵌入式开发ADS 必看 2010-04-17 10:21 声明: 我也是转来的,不是原创,由于别人是网易的日志,不能直接转,所以-- 感谢原 ...
- 2022版u-boot启动分析笔记之一(start.S与lowlevel_init.S)
u-boot-2022.01-rc4启动分析笔记之一(start.S与lowlevel_init.S U-Boot启动过程概述 从链接脚本u-boot.lds说起 start.S start.S从re ...
- Uboot启动分析--start.S启动分析(1)
总目录 NXP i.MX8M secure boot流程 Uboot链接脚本分析述 Uboot启动分析–start.S启动分析(1) Uboot启动分析–start.S启动分析(2) Uboot启动分 ...
- BSP板机支持包、linux启动分析、ARM裸机编程
文章目录 一.BSP 二.驱动 驱动的基本要素 三.启动分析 1.uboot 2.uboot的作用 3.uboot相关命令 关键的内容: 1)bootargs,启动参数 2)启动命令 3)修改启动延时 ...
- RecentsActivity启动分析二
接着上一篇RecentsActivity启动分析一继续分析RecentsActivity.先给大家看布局的结构图 简单的画了RecentsView部分,如下图所示 那接着就从RecentsActivi ...
- k8s replicaset controller源码分析(1)- 初始化与启动分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
最新文章
- python 数据分析学什么-python数据分析师要学什么
- CentOS安装mariadb
- c语言课设报告河海大学,2020河海大学计算机学硕838经验贴
- HashSet集合和TreeSet集合
- 使用java+TestNG进行接口回归测试 1
- mmall工程生成dao层的插件出错了出错了 自动生成mapper 的插件出错了
- jar 、war、ear_在命令行上操作JAR,WAR和EAR
- 3千字带你搞懂XXL-JOB任务调度平台
- printf格式化字符串_Java printf()–将格式化的字符串打印到控制台
- Atitit attilax在自然语言处理领域的成果
- 解决 iOS 13 定位权限弹框自动消失
- 石家庄地铁选站系统进度报告
- VINS-Mono 代码解析六、边缘化(3)
- 傻瓜式自制鼠标光标,超简单
- 2021年上半年软考真题及答案解析汇总
- C语言,移动鼠标获得当鼠标当前位置坐标
- 使用post上传文件报500错误
- 微信小程序的详细登录(上)
- 怎样把CAD图纸的背景颜色修改成白色?
- python获取cookie文件_Python Cookie 读取和保存方法
热门文章
- MSRA,我的实习初体验(上)
- 如何在脱敏数据中使用BERT等预训练模型
- 【Linux】肝!Shell 脚本编程最佳实践
- 【比赛】CCF BDCI新闻情感分类初赛A榜4/2735,复赛1%题解报告
- 【NLP】目前有比Topic Model更先进的聚类方式么?比如针对短文本的、加入情感分析的?...
- 马云:旧制造业要凉,贸易战至少得打20年(附演讲全文)
- 【开学福利】13本python+AI书籍,快拿去
- 统计学习方法读书笔记10-决策树
- 深度学习2.0-18.随机梯度下降之手写数字问题实战(层)
- 《Effective Java 3rd》读书笔记——对于所有对象都通用的方法