arm相关内容
ARM 程序集具有用于进入“主管模式"的 SWI 和 SVC 指令. 让我困惑的是,为什么会有两个?这里据说SVC以前是SWI.这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?其中一个存在于架构之前,而另一个存在于之后? 解决方案 是的,SWI 和 SVC 是一回事,只是换了个名字而已.以前,SVC 指令被称为 SWI,软件中断. SVC(和 SWI)
..
我决定继续快速弯道优化并坚持_mm_movemask_epi8 SSE 指令.如何使用 uint8x16_t 输入为 ARM Neon 重写它? 解决方案 经过一些测试,看起来以下代码可以正常工作: int32_t _mm_movemask_epi8_neon(uint8x16_t 输入){const int8_t __attribute__ ((aligned (16))) xr[8]
..
我正在关注 Baking Pi 剑桥大学课程,在 ARMv6 指令集中构建了一个简单的操作系统,针对 Raspberry Pi. 到目前为止,我们一直在使用两种方法通过 ldr 指令将数据加载到寄存器中,现在我意识到我正在一起使用它们,我不完全理解它们的作用. 所以我使用了 ldr r0,=0x20200000 之类的东西,我实际上理解为“将存储在内存位置 0x20200000 的数据
..
我一直在为 ARM 设备上的增强现实开发 C++ 代码,代码的优化对于实现保持良好的帧率.为了将效率提高到最高水平,我认为收集一般提示很重要使编译器的工作更轻松,并减少程序的循环数.欢迎提出任何建议. 1- 避免高成本指令:除法、平方根、sin、cos 使用逻辑移位来除以或乘以 2. 尽可能乘以倒数. 2- 优化内部“for"循环:它们是一个瓶颈,所以我们应该避免在内部进行大量
..
arm-eabi、gnueabi 和 gnueabi-hf 交叉编译器有什么区别?我发现很难选择适合我的目标平台的可执行文件.arm 有本地编译器吗? 解决方案 我不太确定: eabi 代表将在裸机臂核心上运行的代码编译. gnueabi 代表 linux 的代码编译 对于 gnueabi/gnueabi-hf 部分,我在这里找到了答案.p> gcc-arm-linux-g
..
我正在 ARM cortex-A8 上使用 ELinux 内核. 我知道引导加载程序是如何工作的以及它在做什么.但我有一个问题 - 为什么我们需要引导加载程序,为什么引导加载程序诞生? 为什么我们不能在没有引导加载程序的情况下直接将内核从闪存加载到 RAM 中?如果我们加载它会发生什么?其实处理器是不支持的,但我们为什么要按照流程来呢? 解决方案 引导加载程序是一种计算机程
..
在 x86 内联汇编中我可以这样写: asm ("cpuid": "=a" (_eax),"=b" (_ebx),"=c" (_ecx),“=d"(_edx): "a" (op)); 所以在匹配约束中,而不是仅仅写“=r"并让编译器选择寄存器,我可以说我想使用哪个特定的寄存器(=a 例如使用 %eax) 我怎样才能为 ARM 组装做到这一点?ARM GCC 组装手册 http://www
..
我在 gem5 中遇到以下错误.这仅在 ARM 中发生.在 X86 中,我看到一些系统调用被忽略,但没有一个会导致致命错误. tomas@ubuntu:~/gem5$ ./build/ARM/gem5.opt configs/example/arm/starter_se.py ../tests_gem5/hellogem5模拟器系统.http://gem5.orggem5 是受版权保护的软件;使
..
我有一个用汇编语言编写的裸机 ARM 的启动代码,我正试图了解它是如何工作的.该二进制文件被写入一些外部闪存中,并在启动时将其自身的部分复制到 RAM 中.尽管我阅读了这篇 wikipedia,但我仍然没有完全理解在这种情况下重新定位的概念条目.RAM 映射到低地址窗口,闪存映射到高地址窗口.有人能解释一下为什么我们在这里测试链接寄存器的值吗? /* 测试我们是否从一个地址运行,我们没有链接在
..
我在我的 s3c2440 板上启用了 MMU(3G - 4G 内存 :: 故障属性),当我没有读/写 3G - 4G 内存时一切都很好.所以为了测试页面故障向量,我写信给3G地址的0xFF,正如我所料,我从FSR得到了正确的值,所以我在_do_page_fault()中做了这个,步骤是这样的: .....//将新页面设置为转换表......invlidate_icache ();//清空缓存cl
..
ADRP PC 相对偏移处的 4KB 页面地址. ADRL 将相对于 PC 的地址加载到寄存器中.它类似于 ADR操作说明.ADRL 可以加载比 ADR 更广泛的地址,因为它会生成两条数据处理指令. 具体来说, ADRL 汇编成两条指令,一条是 ADRP,然后是 ADD.如果汇编器不能用两条指令构造地址,它产生重定位.然后链接器生成正确的偏移量.ADRL 产生与位置无
..
ARM 有一个叫做 TrustZone 的东西.根据 ARM 文档,它使进程可以在安全/非安全世界中运行. 安全/非安全世界是什么意思.是与处理器执行模式有关还是与设置内存区域的权限或其他有关. ARM 的 7 种操作模式与安全/非安全世界之间是否有任何关系. 如何在 ARM 中启用 TrustZone. 这是从哪个版本的 ARM 引入的. 是否必须使用此 TrustZone.lin
..
有没有人在没有 Scratchbox 或 qemu 的情况下在 Linux 下成功为 ARM 交叉编译单声道? (可能使用 distcc 或一些交叉编译器工具链) 解决方案 我设法使用 CodeSourcery Lite 工具链在 Ubuntu 机器上安装了 Scratchbox 2 交叉编译 mono(2.0, 2.4, 2.6, 2.8, 2.10.1).我使用了 Mono 项目
..
我尝试为指令行清除和无效 ARM v7 处理器缓存,因为指令代码在执行过程中可能会发生变化. 为了达到效果,我尝试了 2 个变体.他们在这里: 我使用了 GCC __clear_cache() 函数,但它没有给出所需的结果.缓存中的指令码没有改变. 我查找了 GCC 的源代码并找到了 uclinux-eabi.h 文件,我在其中找到了下一个用于清除缓存的代码: /* 清除指令缓
..
我首先要说我不是该领域的专家,我的问题可能包含误解,在这种情况下,如果您纠正我并附上资源,我会很高兴,以便我可以了解更多细节. 我试图弄清楚系统总线的方式以及移动设备中出现的各种设备(如传感器芯片、wifi/BT SoC、触摸屏等)如何被 CPU 寻址(和其他 MCU). 在 PC 世界中,我们有将命令/数据路由到设备的总线仲裁器,而且,afaik,地址是硬连线在板上(如果我错了,请纠
..
我对仅针对地址空间区域刷新缓存(L1、L2 和 L3)感兴趣,例如从地址 A 到地址 B 的所有缓存条目.在 Linux 中是否有这样做的机制,无论是来自用户还是内核空间? 解决方案 查看此页面以获取 linux 内核中可用的刷新方法列表:https://www.kernel.org/doc/Documentation/cachetlb.txt Linux 下的缓存和 TLB 刷新.
..
我正在尝试自学组装.我在 C、Java 和 Python 方面拥有多年的经验 - 但我无法在这方面取得任何进展,我即将放弃. 所以,我下载了 uVision4,并假设我可以编写一个基本的汇编程序: MOV R1, #0x7F0E0C2DMOV R3,#0x1048B3C5ADCS R1、R3、ROR #0x18结尾 那么,建立两个变量,做一个运算,大功告成.检查寄存器的输出和调试器的条件
..
我正在阅读arm手册并提出此建议,但未提及原因. 为什么无符号类型更快? 解决方案 在 ARMv4 之前,ARM 不支持加载半字和有符号字节.要加载有符号字节,您必须 LDRB 然后对值进行符号扩展(LSL 向上然后 ASR 向下).这很痛苦,所以 char 默认为 unsigned. 在 ARMv4 中添加了指令来处理半字和有符号值.这些新指令必须被压缩到可用的指令空间中.可
..
我已经阅读了 Linux 中的系统调用,并且到处都给出了有关 x86 架构的描述(0x80 中断和 SYSENTER).但我无法追踪 ARM 架构中系统调用的文件和进程.谁能帮忙. 我知道的几个相关文件是: arch/arm/kernel/calls.S arch/arm/kernel/entry-common.S(需要解释) 解决方案 在 ARM 世界中,您通过 sup
..
我使用最新的 Apple M1 芯片处理器.而且我在安装应用程序时不断出错. 说, brew install openjdk@11 错误:无法以 Intel 默认前缀 (/usr/local) 安装在 ARM 处理器上的 Homebrew 中!请使用其中一种在/opt/homebrew 中创建新安装“替代安装"从:https://docs.brew.sh/Installation您可以迁
..