Sal*_*ore 10 arm jazelle cortex-a8
我需要在Beaglebone上运行Linux上的Java应用程序.我知道ARM内核确实支持Jazelle技术在硬件中执行Java字节码.无论如何,我不清楚我需要利用这项技术.我需要以某种方式"激活"Jazelle吗?我需要一个Jazelle知道的Java虚拟机吗?部署和运行利用Jazelle技术的Java软件的流程是什么?使用Jazelle需要许可证吗?
谢谢.
Jazelle是ARM体系结构中的一种执行模式,它"为Java虚拟机(JVM)提供字节码执行的硬件加速的架构支持" - 引自ARM体系结构手册.
看起来有两种口味的Jazelle; DBX和RCT.以下文字来自Cortex-A系列程序员指南(v3).
2.2.2 Jazelle
Jazelle-DBX(Direct Bytecode eXecution)在ARMv5TEJ中引入,以加速Java性能,同时节省功耗.增加内存可用性和即时(JIT)编译器的改进已经降低了其在应用程序处理器中的价值.因此,许多ARMv7-A处理器不实现此硬件加速.Jazelle-DBX最适合在内存非常有限的系统中提供高性能Java(例如,功能手机或低成本嵌入式使用).在今天的系统中,它主要用于向后兼容.
2.2.3 Thumb执行环境(ThumbEE)
在ARMv7-A中引入和要求,ThumbEE有时被称为Jazelle-RCT (运行时编译目标).它涉及Thumb指令集的小改动,使其成为在受控环境中运行时生成的代码的更好目标(例如,通过Java,Dalvik,C#,Python或Perl等托管语言).ThumbEE旨在由Just-In-Time(JIT)或Ahead-Of-Time(AOT)编译器使用,它可以减少重新编译代码的代码大小.托管代码的编译超出了本文档的范围.
据我所知,Jazelle-DBX的大多数用途都是在Java Card实现中,你真的希望通过一个小芯片提供很多性能.这个真正受限的域可以通过直接在cpu上执行字节码来利用一些额外的提升.
然而,大多数像Beaglebone这样的现代嵌入式系统已经拥有更多的内存和CPU功率,而不是Java在那些时代的典型桌面上首次亮相,这使得Jazelle-DBX变得不必要.这主要是因为您将JIT编译到本机主机.(JIT实现对于Java卡来说太大了.)
ThumbEE/Jazelle-RCT的用处也值得怀疑.引用Android移植讨论:
通过所有这些来获得免费的空指针检查没有多大意义.
总而言之,我不知道任何使用任何Jazelle风格的Java VM实现,包括Android的Dalvik.如果我必须在嵌入式设备上运行Java,我会选择; Dalvik,JamVM或Java SE Embedded.
你需要去http://infocenter.arm.com.beaglebone使用Cortex-A8,这是一个ARMv7.在左侧的Cortex-A系列处理器下,Cortex-A8获得最新的手册r3v2(rev 3.2).在ARM体系结构下,扩展参考手册,您需要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
Run Code Online (Sandbox Code Playgroud)
所以这似乎是一个r3p2(rev 3.2)核心.正如手册所说,支持ThumbEE,Jazelle,thumb和ARM.
现在令人困惑的是ti网站上的TRM,ARM trm都说支持Jazelle,直到你关注这个:
Jazelle扩展
Cortex-A8处理器提供了Jazelle Extension的简单实现.这意味着处理器不会加速任何字节码的执行,并且所有字节码都由软件例程执行.
在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
Run Code Online (Sandbox Code Playgroud)
它看起来像汇编程序实现了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
Run Code Online (Sandbox Code Playgroud)
但是代码从该地址的arm指令返回2.不知道这是否意味着什么,也许还有其他的东西要让Jazelle工作.我得到的印象是,那里真的没有jazelle核心,我得到你去购买软件库的印象.
Jazelle文档似乎是您必须联系ARM才能访问的文档.所以我不知道如何实际使用它.
在ARM中进一步阅读.ID_ISAR1寄存器显示1表示
0b0001
添加BXJ指令和PSR中的J位.
此设置可能表示Jazelle扩展的简单实现.
而且,ID_PFR0寄存器的ARM ARM描述比TRM更多信息,它说
值为0b0001表示Jazelle扩展的简单实现.
0b0001就是我们在该寄存器中为该字段读取的内容.
我挖的越多,这似乎是一个"琐碎的实施",这意味着我"不在那里".JMCR寄存器显示如果它是一个简单的实现,那么读取应该返回为零(RAZ)并且写入应该被忽略(WI)它们是,我写了一个,读回来它是零.即便如此,我尝试了BXJ指令,它仍然执行了arm代码.