Комментарии 13
Исправлена ошибка верстки, вызванная некорректной вставкой изображений.
почему не вставить код текстом, используя тег <source>?
Изначально не планировалось публиковать на Хабре. В последний момент решили выложить скриншоты. Исходный код тоже подверстаем, но чуть позже. Спасибо за понимание :)
fixed
эм. а расцветки для асма нет? <source lang="asm"> хотя бы комменты подсвечивает…
Изначально указано lang=«Assembler», замена на lang=«asm» визуализацию не улучшает ((
PUSH64 R7 ; Storage for output
MOVQ R7,R0 ; Address of storage = stack pointer
PUSHN R7 ; Parameter#2 = Output address
PUSHN R6 ; Parameter#1 = MSR address
таки разница есть. хм… но всё равно отвратно.
уже жалею что предложил заменить скриншоты ^_^
Непонятно, зачем это нужно. В чём сложность иметь разные бинарники для разных платформ? Ваше приложение всё равно не сможет работать на незнакомой архитектуре, а если список поддерживаемых архитектур предопределён — зачем всё так усложнять?
Один бинарник под все архитектуры — это удобное и изящное решение, позволяющее избежать проблем с конфигурированием, собенно если этот бинарник «прошит» в ПЗУ карты-адаптера. Изначально, EFI Byte Code разрабатывался именно для этого. Возможность писать на EBC загружаемые приложения — просто дополнительный бонус.
Приложение может запуститься на незнакомой архитектуре, если до распознавания архитектуры оно работает в минимальном режиме, взаимодействуя только с системными таблицами и UEFI-объектами.
Приложение может запуститься на незнакомой архитектуре, если до распознавания архитектуры оно работает в минимальном режиме, взаимодействуя только с системными таблицами и UEFI-объектами.
Метод этот применять не стоит вообще, я думаю.
Вместо него стоит выделить платформозависимый код в отдельный DXE-драйвер и вызывать этот самый код через стандартные механизмы взаимодействия. Драйвер не загружен — до свиданья, никакого неопределенного поведения при запуске на ARM.
Вместо него стоит выделить платформозависимый код в отдельный DXE-драйвер и вызывать этот самый код через стандартные механизмы взаимодействия. Драйвер не загружен — до свиданья, никакого неопределенного поведения при запуске на ARM.
Если загрузчик, стартующий до вызова драйвера, должен быть кроссплатформенным, то он пишется не в нативном коде, а с использованием EFI Byte Code. DXE-драйверы, поддерживающие конкретные платформы, как правило, используют нативный код. Следовательно, мы вернулись к ситуации, рассмотренной в статье:
- вызывающая процедура: EBC
- вызываемая: нативный код
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Организация вызова x86-процедур из EFI Byte Code