你需要去http://infocenter.arm.com。 beaglebone 使用的是 ARMv7 的 Cortex-A8。在左侧的 Cortex-A 系列处理器下,Cortex-A8 获得最新的手册 r3v2 (rev 3.2)。在 ARM Architecture 下展开 Reference Manuals,您需要 ARMv7-AR(问题 C 是撰写本文时最新的)。
将这些信息用于我的示例
http://github.com/dwelch67/beaglebone_samples
我的 beaglebone 节目中的功能示例:
12345678
Hello World!
413FC082
410330C3
00000000
00001131
00000011
00000000
00000000
00000000
00000002
13112111
00000000
00000000
00000002
12345678
所以这似乎是一个 r3p2 (rev 3.2) 核心。正如手册所说,支持 ThumbEE、Jazelle、拇指和 ARM。
现在令人困惑的是ti网站上的TRM,ARM trm都说支持Jazelle,直到你关注这个:
Jazelle 扩展
Cortex-A8 处理器提供了 Jazelle 扩展的简单实现。这意味着处理器不会加速任何字节码的执行,所有字节码都是由软件例程执行的。
在 Jazelle 扩展的实现中:
不支持 Jazelle 状态
BXJ 指令的行为类似于 BX 指令。
这告诉我们一些事情。这是否真的意味着该处理器中没有 Jazelle 硬件,尽管其他地方都这么说?
它还向我们展示了运行 jazelle 代码你 bxj 到达那里就像你 bx 在手臂和拇指模式之间切换一样。于是我试了一下:
.globl bxjtest
bxjtest:
ldr r0,=skip
bxj r0
mov r0,#1
bx lr
skip:
mov r0,#2
bx lr
看起来汇编器实现了bxj
82000064 <bxjtest>:
82000064: e59f0044 ldr r0, [pc, #68] ; 820000b0 <GET32+0x8>
82000068: e12fff20 bxj r0
8200006c: e3a00001 mov r0, #1
82000070: e12fff1e bx lr
82000074 <skip>:
82000074: e3a00002 mov r0, #2
82000078: e12fff1e bx lr
但代码从该地址的 arm 指令返回 2。不知道这是否意味着什么,也许您还需要做其他事情才能让 Jazelle 工作。我得到的印象是那里真的没有 jazelle 内核,我得到的印象是你去购买软件库。
Jazelle 文档似乎是您必须联系 ARM 才能访问的那种。所以我不知道如何实际使用它。
在 ARM 中进一步阅读。 ID_ISAR1寄存器显示为1表示
0b0001
在 PSR 中添加 BXJ 指令和 J 位。
此设置可能表示 Jazelle 扩展的简单实现。
然后,ID_PFR0 寄存器的 ARM ARM 描述比 TRM 包含更多信息,它说
Jazelle 扩展的一个简单实现由值 0b0001 表示。
0b0001 是我们在该寄存器中为该字段读取的内容。
我挖掘得越多,这似乎是一个“微不足道的实现”,这对我来说意味着“不存在”。 JMCR 寄存器表明,如果它是一个简单的实现,那么读取应该返回为零(RAZ)并且写入应该被忽略(WI),它们是,我写了一个,读回它是一个零。尽管如此,我尝试了 BXJ 指令,它仍然执行了 arm 代码。