问题标签 [armv8]

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 投票
0 回答
121 浏览

android - 在 Android.mk 中,为 arm64-v8a 启用 OPENMP 会变慢?

我想在我的 Android 程序中使用 OpenMP。在线搜索后,我编辑了我的 Android.mk 并添加了 OpenMP 标志。但是,在不更改任何代码的情况下,程序运行速度会变慢。仅当我在 armv8a 中启用 OpenMP 时才会出现此问题。

如果有人知道解决方案,请帮忙。我真的真的真的真的很感激它!

0 投票
2 回答
655 浏览

ros - 如何使 ardrone 自治包在 Jetson Nano 上工作?

我正在开发 Jetson Nano 板,我需要将它与 parrot ar 无人机 2.0 连接,所以为了做到这一点,我想使用 ardrone_autonomy 包,但我不能这样做,因为 jetson 有 Ubuntu 18,只支持ROS Melodic,没有这个包。

这是我尝试过的:

  1. 我从这个存储库构建了包: https ://github.com/dsapandora/ardrone_autonomy

但我得到了这个错误:

在我使用这里的几乎所有解决方案解决了这个问题之后: https ://github.com/AutonomyLab/ardrone_autonomy/issues/71

我可以毫无问题地编译包,但是当我尝试运行节点时,它说 ardrone_driver 已经死了,没有任何其他信息。

2.然后我尝试在ROS Kinetic下的docker中构建包,但是在得到与上面相同的bswap错误之后,在应用上述解决方案后,我得到了这个:

这就是我卡住的地方,因为据我所知这是处理器架构的问题(Jetson 使用 armv8),而上述所有解决方案都是针对 armv7 的,但我不知道如何解决这个问题。如果其他人找到解决此问题的方法,请告诉我。任何帮助将不胜感激!

0 投票
1 回答
91 浏览

arm - 在运行时检测 arm 处理器上的扩展超截面支持

在其关于 AArch32 地址转换的部分中,ARMv8 手册描述了当处理器支持这种类型的扩展时,超部分的基本物理地址如何达到 40 位大小。我一直无法确定在 AArch32 模式下运行的内核可以在运行时检测是否是这种情况。我是否遗漏了什么,或者这些信息是否只能通过编译内核的具体处理器类型隐式获得?

0 投票
1 回答
183 浏览

assembly - 如何在uboot中找到由lowlevel_init()调用的s_init()的实现

在 u-boot-2017.05-rc3\arch\arm\cpu\armv8\lowlevel_init.S

lowlevel_init() 调用函数 s_init()

但我在项目中找不到 s_init() 函数的实现

我有“grep -nirs s_init”。在所有项目中,但没有关于 armv8 的 s_init 实现。

这里有一些代码: /* * 调用非常早期的 init 函数。这应该只做*绝对最低限度的开始。它不应该: * * - 设置 DRAM * - 使用 global_data * - 清除 BSS * - 尝试启动控制台 * * 对于带有 SPL 的板,这应该是空的,因为 SPL 可以执行所有 * 在 SPL board_init_f() 中的这个初始化在此之后立即调用 * 的函数。*/ bl s_init

0 投票
2 回答
849 浏览

c - 在 Nvidia Jetson 上除以零不会导致运行时异常

我对 ARM 处理器的内部细节不是很熟悉,但我不了解我的 Nvidia Jetson Nano 开发板上的以下行为。

C代码示例...

编译:

运行生成的 a.out 可执行文件会产生以下输出...

使用 gcc 3.7 在古老的 Pentium 4 上编译的完全相同的代码会导致(如预期的那样)在i达到 0 时抛出运行时异常并导致除以零。

Nvidia 主板运行 Ubuntu 18.04 LTS、gcc 版本 7.4.0(最新),并且在其他方​​面运行良好。我还编译了此代码的等效 Ada 语言版本,并按预期引发了运行时异常因为 Ada 代表我提前进行了安全检查)。

我意识到在 C 中,“除以零会产生未定义的行为”可能是对此的解释,但是对于同一编译器套件的两个版本为同一操作提供如此不同的结果让我感到困惑。

什么情况下可能导致 Nvidia Tegra ARM(64 位)CPU 允许除以零被操作系统忽略?

编辑:/etc/cpuinfo 中有关 CPU 的详细信息...

0 投票
2 回答
512 浏览

assembly - 加载-获取/存储-释放和中断

假设我有一个原子加载-修改-存储操作:

如果我理解正确,当这段代码在两个内核上执行(访问相同的内存地址)时,线程 A 会使用ldaxr. stlxr在线程 B 中失败并重试操作,直到线程 A 释放锁。

ldaxr但是如果在主线程和中断处理程序尝试访问相同的内存地址之后发生中断会发生什么?它会死锁还是中断处理程序优先,并且stlxr在从中断返回时主线程会失败?

0 投票
1 回答
698 浏览

arm - ARMv8 Data Abort 异常子类型“不在转换表中”和“级别的转换表错误”之间的区别?

在制作页表之后,我已经在 ARMv8 上运行了虚拟内存。奇怪的是,我的大部分翻译都在工作(身份映射),除了位于物理地址零的 Flash。我使用一个编辑页表的函数,所以有些工作有些不工作对我来说很奇怪。具体来说,我只映射了几个范围:

再说一次,除了 Flash ,它们都可以工作。我的映射功能也适用于非身份映射。Flash 系列有点奇怪。

我有一个异常处理程序用于剖析问题。我在捕获Data Abort异常时发现了两个有趣的案例。根据访问的内存类型,我遇到了两种 Data Abort 子类型:

当尝试处理访问地址的异常时,我不希望出现在表中,我得到一个 [2] (第 2 级错误,因为映射了一些附近的地址)。

当我尝试处理访问 Flash 的异常时,我确实希望在表中出现 [1](不在表中)。

所以,我对这两种情况代表什么感到困惑。[1] 和 [2] 有什么区别?它们似乎代表着同样的东西。[1] 是否以某种方式代表了翻译在尝试之前失败的情况?如果是这种情况,我希望处理已定义的 0 级故障。对于我不希望出现在表中但收到另一个地址的地址,我期待“不在表中”错误。

0 投票
0 回答
111 浏览

android - 即使我提供了 64 位 apk,Google Play 64 位要求问题

在过去的 3 天里,我一直在研究这个问题,但是每当我在 Google Play 商店上传 android 应用程序包但在审查时收到 64 位要求错误。我的应用程序包完全基于 Java/Kotlin,并提供了一些原生支持第三方对其有依赖。我在 gradle 文件中包含了对所有架构 armeabi-v7a、arm64-v8a、x86、x86_64 的支持,还为 abi 启用了拆分。

在创建签名的应用程序包时,在分析器中它会显示其中的所有本机支持库(lib 文件夹中 armeabi-v7a、arm64-v8a、x86、x86_64 下的.so 文件)。

以下 APK 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码: 21. 即使我添加了对 32/64 位本机代码的依赖项。

这是 Android App Bundles 属性https://ibb.co/j66wn4S

我添加的 Gradle 配置:

截屏

0 投票
0 回答
996 浏览

c - 如何在 ARMv8 32 位上生成地址大小错误?

我是 ARM 的新手,我试图了解地址转换背后的理论,以便在不同级别生成地址大小错误。我知道在从虚拟地址到物理地址的转换过程中,涉及到长描述符转换表格式描述符。观察级别 1 和 2 的格式“块”和“表”以及级别 3 的格式“页面”,如果位[47:40]不为零,则使用描述符的转换将生成地址大小错误。

我不明白的是为什么[47:40]位不会为零,也就是说,如果我在C中工作并且需要分配一页RAM,那么可能的原因会导致这些位设置为非零值?

0 投票
1 回答
211 浏览

caching - 用于缓存的 Armv8 地址字段?

我正在阅读ARM Cortex-A 系列 ARMv8-A 程序员指南

在 11.1.2 缓存标签和物理地址中,有一个缓存地址字段的示例。

例子:

缓存为4路32KB

高速缓存行 = 16 字(64 字节)

以及文档中说明的地址字段:Set(index) = 8 bits, Offset = 6 bits, Tag = 30 bits

根据我的理解,8 位索引将对应于每种方式的 256 个缓存行(在示例中正确说明)。偏移量是 6 位(2^6 = 64),用于正确寻址行内的字节(64 字节)。

但是缓存是 4 路的,这意味着缓存大小是 4*256*64 = 64KB 而不是 32KB。

我的分析是正确的还是我遗漏了什么?