Мне нужно запустить приложения Java поверх Linux на моем Beaglebone. Я знаю, что ядра ARM имеют поддержку технологии Jazelle для выполнения байт-кода Java на оборудовании. В любом случае мне непонятно, что мне нужно использовать эту технологию. Мне нужно каким-то образом "активировать" Jazelle? Нужна ли мне виртуальная машина Java Jazelle? Каков поток для развертывания и запуска программного обеспечения Java, использующего технологию Jazelle? Требуется ли лицензия для использования Jazelle?
Спасибо.
Ответ 1
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 Execution Environment (ThumbEE)
Введенный и требуемый в ARMv7-A, ThumbEE иногда называют Jazelle-RCT (Цель компиляции времени выполнения). Это связано с небольшими изменениями в наборе команд Thumb, которые делают это лучшая цель для кода, сгенерированного во время выполнения в контролируемых средах (например, таких как Java, Dalvik, С#, Python или Perl). ThumbEE предназначен для использования компиляторами Just-In-Time (JIT) или Ahead-Of-Time (AOT) где он может уменьшить размер кода перекомпилированного кода. Компиляция управляемого кода находится вне объем этого документа.
Насколько я знаю, большинство приложений Jazelle-DBX реализовано в реализациях Java Card, где вы действительно хотите получить большую производительность от крошечного чипа. Этот действительно ограниченный домен может воспользоваться некоторым дополнительным усилением путем непосредственного выполнения байт-кода на процессоре.
Однако большинство современных встроенных систем, таких как ваш Beaglebone, уже имеют больше памяти и процессорной мощности, чем когда Java дебютировала на типичных рабочих столах тех времен, что делает Jazelle-DBX не необходимым. Это в основном потому, что вы получаете JIT-компиляцию на собственный хост. (Реализация JIT слишком велика для Java-карт.)
Полезность ThumbEE/Jazelle-RCT также вызывает сомнения. Цитата из обсуждение по переносу android:
Прохождение всего этого, чтобы получить бесплатные проверки указателей на нуль, не делает много смысла.
В заключение я не знаю о какой-либо реализации Java VM с использованием любого вкуса Jazelle, включая Dalvik Android.
Если бы мне пришлось запускать Java на встроенное устройство, я бы выбрал между ними; Dalvik, JamVM или Java SE Embedded.
Ответ 2
Вам нужно перейти в 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
Итак, это похоже на ядро r3p2 (rev 3.2). Как говорится в руководствах, поддерживаются ThumbEE, Jazelle, большой палец и ARM.
Теперь запутанная вещь - это TRM на сайте ti, 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
но код возвращает 2 из инструкции руки по этому адресу. не знаю, значит ли это что-то или нет, может быть, есть еще кое-что, что нужно сделать, чтобы заставить Джазель работать. У меня создается впечатление, что там действительно нет ядра jazelle, у меня создается впечатление, что вы покупаете библиотеку программного обеспечения.
Документы Jazelle выглядят так, что вам нужно связаться с ARM, чтобы получить доступ. Поэтому я не знаю гораздо больше, чем то, как на самом деле использовать его.
Чтение далее в ARM. в регистре ID_ISAR1 отображается 1, указывающий
0b0001
Добавляет инструкцию BXJ и бит J в PSR.
Этот параметр может указывать на тривиальную реализацию расширения Jazelle.
И тогда описание ARM ARM для регистра ID_PFR0 имеет больше информации, чем TRM, говорится
Тривиальная реализация расширения Jazelle указывается значением 0b0001.
И 0b0001 - это то, что мы читаем для этого поля в этом регистре.
Чем больше я копаю, тем больше это кажется "тривиальной реализацией", что означает для меня "не существует". регистр JMCR показывает, что если это тривиальная реализация, то чтение должно возвращаться как ноль (RAZ), а записи должны игнорироваться (WI), которые они есть, я написал один, прочитал его, это был ноль. Тем не менее, я попробовал инструкцию BXJ и все еще выполнил код руки.