问题标签 [cortex-a8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
701 浏览

security - 从 Cortex A8/DM3730 上的特权上下文访问安全 (TrustZone) 指令的最简单方法

我有一件非常奇怪的事情需要做:访问一些“安全”指令,以处理那些实际上不需要在安全上下文中完成的事情。简而言之:我需要进入安全模式,但不是因为我想要硬件 TPM 功能或任何东西。我只需要访问某些我不会拥有的指令。

我们在 Gumstix Overo FireSTORM COM 上执行此操作。我的理解是这些安全启动,但是在某个地方(MLO?u-boot?)他们切换到非安全模式,但我可能是错的。关键是我们肯定是从非安全(但特权,见下文)模式执行此操作的。

(我撰写了这个问题,关于直接访问 A8 分支预测器的 GHB/BTB,如果您对我想要做什么感到好奇:直接写入分支预测器中的全局历史缓冲区 (GHB) 或 BTB ARM Cortex A8?

现在,所有这些都将通过 u-boot 完成(我们有 Overo FireSTORM COM),所以幸运的是我有“特权”执行。那里不用担心。而且我查看了其他 StackOverflow 问题,但似乎没有关于如何进入安全模式的任何内容。我真正想做的就是访问一些 CP15 寄存器,然后返回非安全模式(并可能重复该过程)。

我已经查看了 SMC 指令,但我找不到任何关于如何适当地捕获呼叫/呼叫去往/如何设置等的文档。

这些信息在任何地方吗?

回顾一下,这就是我想做的事情:

任何帮助都将不胜感激!

感谢@artlessnoise,我在 u-boot 源中找到了这个文件:/u-boot/arch/arm/cpu/armv7/nonsec_virt.S。

它包含以下代码:

大概如果我修改了 mcr p15 指令的掩码,我可以简单地“关闭”移动到非安全模式。但是,这可能会杀死 u-boot。

那么问题来了:如何设置适当的向量,以便在进行 SMC 调用时,我跳回安全模式,并且能够进行 GHB/BTB 修补?

任何其他帮助表示赞赏!

0 投票
1 回答
1186 浏览

gcc - 如何保证裸机arm固定地址的入口功能?

我正在使用 S5PV210,一个 sumsung arm-cortexA8 芯片。在其文档中,程序将从 0xd0200010 开始执行。现在我成功地在它上面运行了我的程序。但我还有一些问题。

起初,我使用链接命令“-Ttext 0xd02000010 -e main”,并认为它会将main函数放到地址0xd0200010。但我发现它只是将 .text 部分放到 0xd0200010 上。如果我更改了 .c 文件中的函数顺序,即使 .text 部分仍将放在 0xd0200010 上,但主函数不会在该地址上,并且“-e main”根本不起作用。

那么,我怎样才能使 main 函数位于 0xd0200010?我可以通过编译器和链接器命令来完成吗?

0 投票
2 回答
482 浏览

c - 为什么arm-linux-gcc进入IRQ模式时只保留r0-r4

我正在使用基于 ARM cortex-A8 的 S5PV210

当我声明这样的中断例程时:

并像这样编译

我知道 gcc 会通过推送一些寄存器为我切换上下文。在我知道这一点之前,我是手动完成的。所以我很好奇 gcc 是如何做到的。反汇编后发现如下代码

这违背了我关于如何切换上下文的概念。在Arm cortex-A8官方文档中,明确r0-r12由用户模式和IRQ模式共享。但是用户模式下的lr独立于IRQ模式。所以,我曾经像这样切换上下文

可以吗?为什么 gcc 推送 lr 注册,为什么不推送 r5-r10 绑定?

0 投票
1 回答
218 浏览

c - 为什么 -fpie 在裸机代码中不起作用并导致野指针?

我正在使用基于 cortex-A8 的 S5PV210。它以初始化开始,然后跳转到 SDRAM 的 0x20000000 并运行我的代码。所以我只需要将我的主要功能放在0x20000000上。

据我所知,有两种方法可以做到。第一种是使用 -Ttext=0x20000000 使 .text 从 0x20000000 开始。第二个是使用 -fpie -pie 生成与位置无关的代码。我正在使用后者。

它大部分时间都有效,但我陷入了我的一个项目。症状是 printf("123") 将打印永久的混乱代码并且永远不会返回。如果我切换回使用 -Ttext=0x20000000,那么它会正常工作。

我已经尝试了一些步骤来分析它:

  1. 更改我的主函数只需调用一个 printf 以便我的代码不会调用任何其他函数,如下所示:

    int main(){ printf("123"); 而(1);返回0;}

  2. 因为 -fpie -pie 大部分时间都很好用,所以我开始注释一些其他功能,最后发现如果我注释了足够多的代码,printf 将再次起作用。

现在我很困惑,-fpie 和 -pie 真的有效吗?

0 投票
0 回答
2251 浏览

gcc - 链接映射文件中显示的 *fill* 部分是什么?

昨天我创建了自己的 u-boot 模块,并希望将文本基地址设置为 0xd0020010。但是编译后,在链接器生成的.map文件中显示是这样的

您可以在 .vectors 部分上方看到,有 16 个字节的 0x00,其名称为“*fill*”。

我的链接脚本是这样的

我试图删除 ALIGH(4),但它静止不动。0xd0020010 是对齐地址吗?所以它应该与“ALIGH”无关

虽然这 16 字节的内存被 0x00 填充,这是nop指令,但我仍然想知道为什么会有一个“*fill*”部分。

0 投票
0 回答
154 浏览

linux-kernel - 通过 tftp 将文件夹(rootfs)传输到起重机板

我已经通过 TFTP 将文件(uImage)传输到起重机板。现在我想将rootfs(文件夹)转移到起重机板。

可以使用tftp吗?U-image 可以成功加载。tftp 传输 uImage

在此处输入图像描述

0 投票
2 回答
610 浏览

gcc - 为什么 u-boot 可以把全局数据的地址放入 r9 寄存器?

当我查看 u-boot 源代码时,我发现它像这样通过 r9 寄存器传递全局数据

所以,我很好奇,u-boot 如何确保进一步的代码不会使用 r9 寄存器并破坏全局数据。是否有选项告诉编译器不要使用特定的寄存器?

0 投票
1 回答
999 浏览

arm - 在 ARM Cortex-A8 上启用 MMU 时出现问题。CPU是S5PV210

这些天我只想写一些裸机代码来处理MMU,经过几天的尝试,我仍然无法使其工作。由于我无法使用串行控制台调试它,而且我没有像 D-STREAM 这样昂贵的调试器,我能做的就是在这里粘贴代码并寻求帮助。我不想当水蛭,但我真的不知道我还能提供什么进一步的信息。

我的 CPU 是基于 cortex-A8 架构的 S5PV210 我想做的只是做一个平面内存映射,这意味着“虚拟地址 == 物理地址” 后面的代码

只是flash LED程序。如果在“enable_mmu”中评论这一行

我的 flash led 程序可以正常工作,如果我取消注释,flash led 将停止工作。这是整个程序

0 投票
1 回答
710 浏览

arm - 如何为 Cortex A8 构建内核模块?

我想编译这段代码,通过目标上的 Debian OS 在 ARM Cortex A8 上启用周期计数器。我写了这段代码/home并想编译它。

我该如何编译它,我应该把输出文件放在哪里?

  • 我只是嵌入式系统的初学者,
  • 我试图关注一些链接,但都失败了
  • 我实际上并不知道这样做的步骤,因为我不熟悉 Linux

代码:

0 投票
0 回答
468 浏览

assembly - 我如何在 Neon 中找到浮点变量的倒数/倒数

我想找到类型为 float 的数字变量的倒数。谁能告诉我霓虹灯(A9处理器)中可用的指令。方法 :