ARM
文章平均质量分 75
老和山乔治
宁静致远
展开
-
ARM64系统寄存器
系统寄存器通常是不允许在EL0访问的,读写会触发异常。异常信息记录在ESR_EL1寄存器中。举例而言,对于MDIR_EL1这个系统寄存器,它的编码如下。原创 2024-01-10 21:58:56 · 513 阅读 · 0 评论 -
代码段在 elf 文件中的大小端探究
踩坑前段时间在分析问题的时候,以 ARM 为例,发现代码段在 .o 和最终的 elf 文件中的大小端是不同的。构造了测试例如下:int a = 0x66778899;int b = 0xaabbccdd;int main(){ asm volatile ( ".inst 0x11223344 \n" ".inst 0xe1e740d2 \n" :::); return 0;}目标文件armebarm可以看到在目标文件原创 2022-01-04 16:09:23 · 775 阅读 · 0 评论 -
linux 运行动态链接程序报错,/bin/sh: ./<file>: not found
错误现象之前使用 qemu 搭建了 Linux 学习环境后,没关注到运行动态链接程序的问题。典型的错误日志如下:/ # ./test_linux-/bin/sh: ./test_linux: not found修复方法上述问题出现的原因是动态加载器没找到,sh 程序首先会让内核执行 exec 程序加载待运行的程序,内核识别到是一个 elf 文件,并且发现是一个动态链接的程序,那么回去寻找动态加载器,如果找不到的话就会报上面的错误。通常动态加载器名称是 ld-linux-xxx。以 aarch64原创 2021-10-20 09:44:28 · 1009 阅读 · 1 评论 -
Dump QEMU 所使用的 dtb 信息
qemu一直疑惑 qemu 启动 Linux 时所传的 dtb 信息。最近找到了获取的方法,供参考。我们可以让 qemu dump virt machine 使用 GICv2 开启虚拟化情况下所使用的 dtb。之后通过 dtc 命令转换成 dts 文本。$ qemu-system-aarch64 -machine virt,gic-version=2,virtualization=on,dumpdtb=dump.dtb$ dtc -o dump.dts -O dts -I dtb dump.dtb原创 2021-04-09 13:16:34 · 3228 阅读 · 1 评论 -
浮点数 & IEEE 754 & ARM SIMD / NEON / VFP
Floating point integer提到浮点数,首先要看下定点数是什么概念。在定点数表达法中,其小数点固定地位于实数所有数字中间的某个位置。比如有四位小数,那么所有数字都是有固定的四位小数的,123451234512345 则表示 1.23451.23451.2345。缺点很明显,精度和数据大小无法兼顾。浮点数的表示涉及到不同的处理器的支持情况。对于需要高精度计算的数值分析来说,搞清楚浮点数背后的故事是相当有必要的,这可以减少或消除不必要的精度损失。IEEE 754IEEE 754浮点原创 2020-11-03 14:34:41 · 1028 阅读 · 0 评论 -
非对齐访问——以ARM为例
数据的对齐与非对齐访问12Older ARM processors require data load and stores to be to/from architecturally aligned addresses. This means:LDRB/STRB - address must be byte alignedLDRH/STRH - address must be 2-byte alignedLDR/STR - addres原创 2020-09-22 13:39:53 · 8038 阅读 · 1 评论 -
ARM 多寄存器寻址 (块拷贝寻址)
LDM/LDMIA/LDMFDLoad Multiple Increment After (Load Multiple Full Descending) loads multiple registers from consecutive memorylocations using an address from a base register. The consecutive memory locations start at this address, and theaddress just a.原创 2020-08-28 11:39:51 · 1896 阅读 · 0 评论 -
CAS 原子比较交换操作
原子比较交换操作C111Atomically compares the object representation (until C++20)value representation (since C++20) of the object pointed to by obj with that of the object pointed to by expected, and if those are bitwise-equal, replaces the former with desired (pe原创 2020-05-13 11:51:41 · 601 阅读 · 0 评论 -
设备树 DTS & DTB
Device Tree1设备树是一种数据结构,用来描述硬件设备,如此一来硬件信息就无需硬编码在代码中,这样就将设备驱动和实际硬件解耦开来,有了良好的可扩展性。操作系统可以在启动运行时读取相应的文件,必要时也可以修改。当然设备树也没有完全解决所有硬件配置的问题。Flattened Device Tree,Device Tree Source,Device Tree BinaryLinux us...原创 2020-05-05 15:43:12 · 834 阅读 · 0 评论 -
ARM GIC (二)GICv3 中断安全态、分组及编程模型
The GICv3 architecture supports the ARM TrustZone technology. Each INTID must be assigned a group and security setting.每一个中断都需要配置安全态和分组。中断安全态及中断分组gicv3 为了兼容 armv8 引入了支持2种安全状态(secure state),根据 sec...原创 2020-04-01 18:32:46 · 4507 阅读 · 1 评论 -
编译器 __built_in_xxx 内建函数
内建函数编译器内部实现的函数。通常以 __builtin 开头。这些函数主要在编译器内部使用,主要是为编译器服务的。内建函数的主要用途如下。用来处理变长参数列表;用来处理程序运行异常;程序的编译优化、性能优化;查看函数运行中的底层信息、堆栈信息等;C 标准库函数的内建版本。常用内建函数__builtin_return_address(LEVEL)C 语言函数在调用过程中,会将......原创 2020-01-06 15:00:39 · 1652 阅读 · 0 评论 -
ARM Foundation 平台, DS-5,FVP
仿真模型https://developer.arm.com/tools-and-software/simulation-models固定虚拟平台(FVP)。ARM 推出了一些硬件仿真平台,用户开发者在还没单板的情况下提前进行软件开发,缩短软件开发周期。仿真模型基于 ARM 相关的IP核,非常准确,可靠性高。值得注意的是,这些平台并不基于某个现成的处理器设计,而只是基于某个 ARM 架构。平台...原创 2019-11-12 10:50:49 · 3315 阅读 · 0 评论 -
ARM 过程调用标准 AAPCS 以及堆栈使用
ARM 过程调用标准 AAPCS原创 2019-11-08 09:35:04 · 4652 阅读 · 0 评论 -
WIP: Linux string.c memcpy等的优化
通用实现// lib/string.c...#ifndef __HAVE_ARCH_MEMCPY/** * memcpy - Copy one area of memory to another * @dest: Where to copy to * @src: Where to copy from * @count: The size of the area. * * You...原创 2019-10-25 20:06:28 · 566 阅读 · 0 评论 -
ARM 指令 对齐访问等
跳转指令条件执行条件执行:condition execution条件标志:condition flags条件码:condition code根据运算结果更新的条件标志,来判断指令的条件码是否符合条件,符合条件就执行,否则不执行。几乎所有A32的指令都可以基于APSR中的条件标志,进行带条件判断的执行。寄存器为0与否,CBZ CBNZ;寄存器某个位为0与否, TBZ TBNZ......原创 2019-10-26 16:13:38 · 1917 阅读 · 0 评论 -
ARM v8 简介
ARMv8 RegistersGeneral Purpose RegistersARMv8提供了31个64-bit的通用寄存器。分别是X0-X30。每个64-bit的寄存器低32位又包含32-bit的兼容形式。称作W0-W30。读取W不会影响相应X的高32位,写入W会清零相应X的高32位。Special RegistersIn the ARMv8 architecture, when...............原创 2019-04-11 19:49:43 · 5710 阅读 · 0 评论 -
Linux aarch64 编译 & qemu 搭建实验平台
交叉编译工具链linaro 官网下载即可。https://www.linaro.org/downloads/https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/解压以后在环境变量 PATH 里加上工具链的路径。内核下载https://mirrors.edge.kernel...原创 2019-08-28 23:09:32 · 14772 阅读 · 0 评论 -
GCC 内联汇编
How to Use Inline Assembly Language in C Code1The asm keyword allows you to embed assembler instructions within C code. The asm keyword is a GNU extension. When writing code that can be compiled wit...原创 2019-09-13 19:42:29 · 776 阅读 · 0 评论 -
ARM GIC(一)GICv3 基本架构和中断生命周期
GIC简介GIC的全称为General Interrupt Controller,主要作用可以归结为:接受硬件中断信号,并进行简单处理,通过一定的设置策略,分给对应的CPU进行处理。中断源分类SGI: Software Generated Interrupt软件产生中断,中断号是0-15。通过向SGI寄存器写数触发,相当于IPI,可用于CPU间的通信,比如时间同步,全局进程调度信息等。......原创 2020-02-26 20:22:55 · 2371 阅读 · 0 评论