源码技术
php
java
python
Linux
当前位置:
首页
>
Linux
>嵌入式linux打卡第一天
嵌入式linux打卡第一天
2026-09-05 04:17:13
嵌入式linux打卡第一天
基于正点原子IMX6U左神教程
由于之前看了第一期以及搭建好了裸机开发环境
今天看到了第二期的8.2讲
1、BOOT ROM做的事情
启动文件
第1行定义了一个全局标号_start。 第7行就是标号_start开始的地方,相当于是一个_start函数,这个_start就是第一行代码。
第10~13行就是设置处理器进入SVC模式,这里我们设置处理器运行在SVC模式下。处理器模式的 设置是通过修改CPSR(程序状态)寄存器来完成的,CPSR寄存器,其中M[4:0](CPSR的bit[4:0])就是设置处理器运行模式的,如果要将处理器设置为SVC模式,那么M[4:0]就要等于0X13。
11~13行代码就是先使用指令MRS将CPSR 寄存器的值读取到R0中,然后修改R0中的值,设置R0的bit[4:0]为0X13,然后再使用指令 MSR将修改后的R0重新写入到CPSR中。
第15行通过ldr指令设置SVC模式下的SP指针=0X80200000,因为I.MX6U-ALPHA开 发板上的DDR3地址范围是0X80000000~0XA0000000(512MB)或者 0X80000000~0X90000000(256MB),不管是512MB版本还是256MB版本的,其DDR3起始地 址都是0X80000000。
由于Cortex-A7的堆栈是向下增长的,所以将SP指针设置为0X80200000, 因此SVC模式的栈大小0X80200000-0X80000000=0X200000=2MB,2MB的栈空间已经很大了, 如果做裸机开发的话绰绰有余。
第16行就是跳转到main函数,main函数就是C语言代码了。
Makefile
链接脚本文件
第 2 行设置定位计数器为 0X87800000,因为我们的链接地址就是0X87800000。第 5行设置链接到开始位置的文件为start.o, 因为start.o 里面包含着第一个要执行的指令,所以一定要链接到最开始的地方。第6行是main.o 这个文件,其实可以不用写出来,因为main.o的位置就无所谓了,可以由编译器自行决定链接 位置。在第11、13行有“__bss_start”和“__bss_end”这两个东西?这个是什么呢?“__bss_start” 和“__bss_end”是符号,第11、13这两行其实就是对这两个符号进行赋值,其值为定位符“.”, 这两个符号用来保存.bss 段的起始地址和结束地址。前面说了.bss 段是定义了但是没有被初始化的变量,我们需要手动对.bss段的变量清零的,因此我们需要知道.bss段的起始和结束地址, 这样我们直接对这段内存赋0即可完成清零。通过第11、13行代码,.bss段的起始地址和结束 地址就保存在了“__bss_start”和“__bss_end”中,我们就可以直接在汇编或者 C 文件里面使 用这两个符号。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
Linux Cassandra Nodetool 常用命令实战
Linux 场景分类的常用命令
最新文章
Linux Cassandra Nodetool 常用命令实战
2.4寸屏幕Linux终端
Kali Linux 200个核心命令
能暴涨44%:Linux终于获得关键功能!Windows 10/11中早已存在数年
20个Linux运维常用的脚本!绝了
新手入门Linux驱动开发:从0到1的完整学习路线(避坑版)
通过一个小实验让你彻底理解linux的虚拟内存区域
struct page 核心解析:Linux 物理页管理的元数据中枢
详解linux内核链表list_head及其接口应用
干货:一图总结Linux常用的服务与端口!
热门文章
Linux运维必备的服务器防护方案,屏蔽恶意ip地址
运维入门:彻底搞懂Linux文件权限
Linux目录结构大起底:你的文件都藏在哪里?
Linux 增加swap分区大小
Linux网络配置,有时经验习惯也有坏处啊
一文搞懂Linux文件系统
Linux中功能强大的免费PDF编辑器——Master PDF Editor v4.3.89
Linux内核参数调优:为K8s节点优化网络性能
PLC+实时LinuxRT+QT编程
Linux常用命令汇总,超全!
随机文章
10个月宝宝每天需要喝多少奶粉?
封神!45种Linux网络工具
Linux 部署 Memcached 及基础命令指南
Linux定时任务工具
Linux中Zsh Shell详解:从入门到进阶
专业见习①——Linux入门
Linux系统运行MeteoInfo
Python学习第二课(第7节:输入与输出)
Python学习【77】:Python的高级知识学习汇总
单片机程序与Linux程序核心对比
Linux 命令在网络安全场景中的核心应用