ARM裸机二

简介: ARM裸机二

一、栈

1.1、四种栈
满栈,空栈,减栈,增栈

ARM中,要求使用满减栈

1.2、栈的意义
c语言中的局部变量是用栈来实现的,如果汇编没有设置栈地址,c代码定义的局部变量就会落空,导致整个程序崩了。

1.3、各种模式下的栈
ARM有37个寄存器,7种模式,每种模式都有自己的SP(r13栈)寄存器

各种模式下用不同的栈,操作系统内核使用自己的栈,每个应用程序也使用自己独立的栈,这样各是各的,就不会说一个栈出错,整个系统崩。

二、cache高速缓存

2.1、什么是cache
cache是一种内存,叫高速缓存。

从容量来说:CPU < 寄存器 < cache < 内存DDR(RAM)

从速度来说:CPU > 寄存器 > cache > 内存DDR(RAM)

2.2、cache作用意义
1.指令是放在flash/硬盘中的,运行时读取到DDR,再从DDR读到寄存器,再由寄存器送给cpu。

2.因为寄存器和DDR之间速度差异太大,DDR的速度远不能满足寄存器的需要(不能满足cpu的需

要,所以没有cache会拉低整个系统的整体速度)

3.cache工作时会把cpu正在运行指令的旁边几句指令事先读到cache。

4.读写cp15实现开关cache

三、重定位和链接脚本

3.1、位置有关编码和位置无关编码
位置有关编码:汇编源文件编码成二进制可执行时编码方式与位置(内存地址)无关

位置无关编码:汇编源文件编码成二进制可执行时编码方式与位置(内存地址)有关

对比:位置无关代码要好一些,适应性强,放在哪里都能正常运行;位置有关代码就必须运行在链接时指定的地址上,适应性差。位置无关码有一些限制,不能完成所有功能,有时候不得不使用位置有关代码。

链接地址:链接时指定的地址(指定方式为:Makefile中用-Ttext,或者链接脚本)
运行地址:程序实际运行时地址(指定方式:由实际运行时被加载到内存的哪个位置说了算)

3.2、为什么使用重定位
uboot启动过程:上电后BL0运行,BL0会加载外部启动设备中的uboot的前16KB(BL1)到SRAM中去运行,BL1运行时会初始化DDR,然后将整个uboot搬运到DDR中,然后用一句长跳转(从SRAM跳转到DDR)指令从SRAM中直接跳转到DDR中继续执行uboot直到uboot完全启动。uboot启动后在uboot命令行中去启动OS。

分散加载:把uboot分成2部分(BL1和整个uboot),两部分分别指定不同的链接地址。启动时将两部分加载到不同的地址(BL1加载到SRAM,整个uboot加载到DDR),这时候不用重定位也能启动。
分散加载其实相当于手工重定位。重定位是用代码来进行重定位,分散加载是手工操作重定位的。

3.3、程序段
1.代码段,数据段,bss段(ZI段),自定义段

2.整个程序的所有东西分成了一个一个的段,给每个段起个名字,然后在链接时就可以用这个名字来指示这些段。也就是说给段命名就是为了在链接脚本中用段名来让段站在核实的位置。

3.段名分为2种:

先天性段名:编译器内部定的,代码段(.text),数据段(.data)非零初始化全局变量,bss段(.bss)零初始化全局变量

后天性段名:自己定义的

3.4、链接脚本
从源码到可执行程序的步骤:预编译、编译、链接、strip(把可执行程序中的符号信息给拿掉)

用来指挥连接器工作的,处理.o文件中的程序段,将其链接成一个可执行程序

链接脚本的关键内容有2部分:段名 + 地址(作为链接地址的内存地址)

SECTIONS {} 这个是整个链接脚本
. 点号在链接脚本中代表当前位置。
= 等号代表赋值

3.5、重定位
1.ldr和adr都是伪指令,区别是ldr是长加载、adr是短加载。
adr指令加载符号地址,加载的是运行时地址;ldr指令在加载符号地址时,加载的是链接地址。

2.用处:uboot分2次运行,BL1加载到SRAM,整个uboot加载到DDR。执行DDR时候需要重定位到指定地址

3.步骤:拷贝代码和数据段,清bss段,长跳转

四、RAM和ROM

4.1、RAM特性及分类
易失性存储器
可随机地址访问,掉电数据丢失
DRAM动态存储器,SRAM静态存储器(动态需要软件初始化才能用)
DDR就是DDR SDRAM,是SDRAM的升级版
4.2、ROM特性及分类
非易失性存储器
不可随机地址访问,掉电数据不丢失,只能以块为单位访问
ROM(PROM,EPROM,EEPROM),Flash(NandFlash,NorFlash),SSD(固态硬盘)
SD卡,TF卡,MMC卡等都是NandFlash,只是多了一层封装和接口
4.3、ROM
4.3.1、扇区和块
1.扇区,软盘硬盘一般都是以扇区为单位,读写最小单位为扇区
2.一个扇区可以看成一个块(block)
3.常见块设备有:磁存储设备硬盘,软盘,flash等

4.3.2、Nand
1.Nand的结构可以看成是一个矩阵式存储器,其中被分成一个一个的小块,每一小块可以存储一个bit位,然后彼此以一定单位组合成整个Nand
2.Nand单次访问的最小单位叫Page(页),就是扇区
3.一个block(块)等于若干Page(页)
4.Nand中:Page是读写Nand的最小单位;Block是擦除Nand的最小单位
5.Nand的每个页由2部分组成,譬如K9F2G08中为2K+64字节,64k用来存储ECC数据(错误校验码)、坏块标志等

五、shell和环境变量

5.1、shell
shell(壳):命令解释器,一种应用程序
提供人机交互界面
终端就是一个shell,可以输入命令回车执行
uboot启动后大部分时间和工作都是在shell下完成
5.2、环境变量
环境变量可以被认为是系统的全局变量
环境变量就是运行时的配置属性
系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行
环境变量和全局变量不同之处在于:环境变量被存储在Flash中

目录
相关文章
|
安全 编译器 内存技术
ARM裸机
ARM裸机
154 0
|
异构计算
【黑金ZYNQ7000系列原创视频教程】03.体验FPGA里的ARM&mdash;&mdash;裸机helloworld实验
黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36637&extra=page%3D1     爱奇艺地址: http://www.iqiyi.com/w_19rugii7ut.html?source=
1362 0
|
5月前
|
数据处理 编译器 数据库
x64 和 arm64 处理器架构的区别
x64 和 arm64 处理器架构的区别
|
5天前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
9天前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
15 0
|
13天前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
2月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
|
1月前
ARM64架构提供的Cache操作
ARM64架构提供的Cache操作
|
2月前
|
Ubuntu Windows
ARM架构安装ubuntu系统
8月更文挑战第19天
783 0