LINUX.ORG.RU

Не смог найти edk2 (из TianoCore) в debian 13

 ,


1

1

В генте нашел, а в дебиане не нашел.

Искал так

Есть какой-то другой пакет (с исходниками):
https://packages.debian.org/trixie/source/edk2
но мне непонятно, почему он не нашелся сразу

https://packages.debian.org/trixie/efi-shell-x64
что с этим пакетом делать? Установить, а дальше?

dpkg -L efi-shell-x64
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/efi-shell-x64
/usr/share/doc/efi-shell-x64/changelog.Debian.gz
/usr/share/doc/efi-shell-x64/copyright
/usr/share/efi-shell-x64
/usr/share/efi-shell-x64/shellx64.efi

и это не то, что мне надо. Обещали-то библиотеки, хидеры, утилиты…

apt source edk2
извлекает всё в текущую директорию,
и это не как в Gentoo

«в соответствии с FHS чаще выбирают один из трёх мест:

  • /usr/src — для системных исходников и модулей ядра (только root). Подходит, если хотите хранить исходники пакетов, относящихся к системе.
  • /var/cache/apt/archives или /var/tmp — временные файлы сборки; /var/tmp для долгоживущих временных данных, /tmp для кратковременных.
  • /usr/local/src или ~/src — для локально собранных пакетов пользователем (рекомендуется для пользовательских сборок).»

Ну, допустим, /usr/local/src/edk2

Но я не собирался его компилировать руками!
https://github.com/tianocore/tianocore.github.io/wiki/Build-Instructions/
https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC
https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions

. edksetup.sh
Loading previous configuration from /usr/local/src/edk2/edk2-2025.02/Conf/BuildEnv.sh
WORKSPACE: /usr/local/src/edk2/edk2-2025.02
EDK_TOOLS_PATH: /usr/local/src/edk2/edk2-2025.02/BaseTools
CONF_PATH: /usr/local/src/edk2/edk2-2025.02/Conf

И для сборки ему чего-то нехватает:

"gcc" -MMD -MF /usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/CryptoPkg/Library/OpensslLib/OpensslLibCrypto/OUTPUT/openssl/crypto/bio/bss_core.obj.deps @/usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/CryptoPkg/Library/OpensslLib/OpensslLibCrypto/OUTPUT/cc_resp.txt -c -o /usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/CryptoPkg/Library/OpensslLib/OpensslLibCrypto/OUTPUT/openssl/crypto/bio/bss_core.obj  /usr/local/src/edk2/edk2-2025.02/CryptoPkg/Library/OpensslLib/openssl/crypto/bio/bss_core.c
/usr/local/src/edk2/edk2-2025.02/EmulatorPkg/Unix/Host/X11GraphicsWindow.c:18:10: fatal error: X11/extensions/XShm.h: Нет такого файла или каталога
   18 | #include <X11/extensions/XShm.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [GNUmakefile:379: /usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/EmulatorPkg/Unix/Host/Host/OUTPUT/X11GraphicsWindow.obj] Ошибка 1


build.py...
 : error 7000: Failed to execute command
        make tbuild [/usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/EmulatorPkg/Unix/Host/Host]


build.py...
 : error F002: Failed to build module
        /usr/local/src/edk2/edk2-2025.02/EmulatorPkg/Unix/Host/Host.inf [X64, GCC, DEBUG]

- Failed -
Build end time: 08:28:58, Nov.03 2025
Build total time: 00:00:24

Допустим я доустановил что-то и собирал EDK II, вот
find /usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64 -maxdepth 1 -iname ‘*.efi’

...
./EbcDxe.efi
...
./UefiPxeBcDxe.efi
...

Последние установленные пакеты:
grep "status installed" /var/log/dpkg.log | grep "$(date +%Y-%m-%d)"

2025-11-03 05:03:48 status installed efi-shell-x64:all 2025.02-8
2025-11-03 08:19:03 status installed acpica-tools:amd64 20250404-1
2025-11-03 08:19:03 status installed nasm:amd64 2.16.03-1
2025-11-03 08:19:03 status installed python-is-python3:all 3.13.3-1
2025-11-03 08:19:03 status installed man-db:amd64 2.13.1-1
2025-11-03 08:30:51 status installed libxfixes-dev:amd64 1:6.0.0-2+b4
2025-11-03 08:30:51 status installed libxext-dev:amd64 2:1.3.4-1+b3
2025-11-03 08:30:51 status installed libxrender-dev:amd64 1:0.9.12-1
2025-11-03 08:30:51 status installed libxrandr-dev:amd64 2:1.5.4-1+b3
2025-11-03 08:30:53 status installed man-db:amd64 2.13.1-1

find . -iname HelloWorld.efi

./Build/EmulatorX64/DEBUG_GCC/X64/HelloWorld.efi
./Build/EmulatorX64/DEBUG_GCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/OUTPUT/HelloWorld.efi
./Build/EmulatorX64/DEBUG_GCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/DEBUG/HelloWorld.efi

/usr/local/src/edk2/edk2-2025.02/Build/EmulatorX64/DEBUG_GCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/OUTPUT/HelloWorld.efi

«Если для сборки укажешь целевую архитектуру EBC, то вместо HelloWorld.efi под X64 получишь HelloWorldEbc.efi.»

Ранее на сайте:
2025-10-05, @lesopilorama, Читал про UEFI, много думал.
2018, @ncrmnt, tianocore

В интернете: 2013-11-13, icbook, Теория и практика EFI Byte Code, https://habr.com/ru/articles/201954/
(используют FASM для получения EBC и патчат файл-результат)

Про EBC:
https://github.com/tianocore/tianocore.github.io/wiki/EBC-FAQ
https://github.com/tianocore/tianocore.github.io/wiki/Tasks-Build-a-C-compiler-for-EBC
«EBC has a unique feature that is not found in other intermediate languages, natural indexing. Natural indexing has made compiler development for EBC notoriously difficult.»
«The original EBC compiler is the Intel C Compiler for EFI Byte Code. This compiler is very expensive ($955)»
https://github.com/yabits/llvm/tree/retrage/ebc
«LLVM backend for EFI Byte Code»
«Since LLVM 9.0, the LLVM linker now supports PE/COFF output»
«Rebasing his work up to the latest LLVM is the recommended starting point for any future work»
«Getting the compiler stable on Linux should be the first goal»



Последнее исправление: Saakx (всего исправлений: 27)

efi-shell это только efi shell, запускается как обычный efi бинарник, напоминает досовский command или виндовый cmd, только под efi. Больше там ничего не должно быть

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Нет, должен быть пакет с названием edk2-devel или как-то так, который мне установит всё остальное из репозитория „EFI development toolkit”

Saakx
() автор топика

Вероятно, там только в таком виде собрали: https://packages.debian.org/trixie/ovmf

apt source edk2 извлекает всё в текущую директорию, и это не как в Gentoo
«в соответствии с FHS чаще выбирают один из трёх мест:

apt source это не «потребительская» команда для пересборки системы, это если ты разработчик и собираешься у себя в $HOME его дорабатывать и потом опакетить со своими патчами.

firkax ★★★★★
()
Ответ на: комментарий от firkax

это не «потребительская» команда

А если мне надо при помощи того пакета свою программу компилировать?
Он должен быть установлен в системе как зависимость времени сборки.

Build-Depends field in debian/control:
This field in the source package's debian/control file explicitly lists the packages needed for building. These often include development libraries (ending in -dev), compilers (like gcc), build systems (like make, cmake), and other tools.

Иначе я не смогу свою программу в виде пакета поставлять. Только через сборку у себя, а это риск для воспроизводимости. Debian же больше всех гордится своей политикой «reproducible builds»…

Saakx
() автор топика
Последнее исправление: Saakx (всего исправлений: 2)
apt install apt-file -y
apt update
apt-file search XShm.h
emscripten: /usr/share/emscripten/cache/sysroot/include/X11/extensions/XShm.h
emscripten: /usr/share/emscripten/system/include/X11/extensions/XShm.h
libxext-dev: /usr/include/X11/extensions/XShm.h
kostik87 ★★★★★
()

В пакете в Gentoo содержатся следующие файлы:

30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json 	/usr/share/qemu/firmware/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json
31-edk2-ovmf-2m-raw-x64-sb-enrolled.json 	/usr/share/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json
40-edk2-ovmf-4m-qcow2-x64-sb.json 	/usr/share/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json
41-edk2-ovmf-2m-raw-x64-sb.json 	/usr/share/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json
50-edk2-ovmf-4m-qcow2-x64-nosb.json 	/usr/share/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json
51-edk2-ovmf-2m-raw-x64-nosb.json 	/usr/share/qemu/firmware/51-edk2-ovmf-2m-raw-x64-nosb.json
edk2-ovmf 	/usr/share/edk2-ovmf
OVMF_CODE_4M.qcow2 	/usr/share/edk2/OvmfX64/OVMF_CODE_4M.qcow2
OVMF_CODE_4M.secboot.qcow2 	/usr/share/edk2/OvmfX64/OVMF_CODE_4M.secboot.qcow2
OVMF_CODE.fd 	/usr/share/edk2/OvmfX64/OVMF_CODE.fd
OVMF_CODE.secboot.fd 	/usr/share/edk2/OvmfX64/OVMF_CODE.secboot.fd
OVMF_VARS_4M.qcow2 	/usr/share/edk2/OvmfX64/OVMF_VARS_4M.qcow2
OVMF_VARS_4M.secboot.qcow2 	/usr/share/edk2/OvmfX64/OVMF_VARS_4M.secboot.qcow2
OVMF_VARS.fd 	/usr/share/edk2/OvmfX64/OVMF_VARS.fd
OVMF_VARS.secboot.fd 	/usr/share/edk2/OvmfX64/OVMF_VARS.secboot.fd
README.gentoo.bz2 	/usr/share/doc/edk2-202502-r1/README.gentoo.bz2
Shell.efi 	/usr/share/edk2/OvmfX64/Shell.efi

https://www.portagefilelist.de/index.php?p=package&id=7099d25eefd940ee407d21b6b39ea59c

Если тебе надо - поищи аналогично по apt-file где они.

Если их нет - смотри как они получаются в Gentoo, сравни с тем как собран пакет в Debian, пересобери, если нужно.

Но я не вижу в списке пакета в Gentoo каких-либо include.

kostik87 ★★★★★
()
Ответ на: комментарий от Saakx

build-depends ставятся через apt-get install (например, apt-get install gcc или чаще всего apt-get install build-essential это метапакет в котором комплект нужного для компиляции чего попало).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ну а у меня программа, написанная для UEFI (планируется), поэтому для её сборки требуется EFI SDK, логично? Значит должна быть команда apt-get install edk2-dev или как-то так.

Saakx
() автор топика

Если Вам нужен SDK для написания EFI-приложений, попробуйте установить пакет gnu-efi.

AITap ★★★★★
()
Ответ на: комментарий от Saakx

Я говорю о пакете efi-shell, а не о том, какой должен быть

mittorn ★★★★★
()
Ответ на: комментарий от Saakx

Верно, не существует. Учитывая, что там, как и в EDK2, рекомендуется пользоваться своей системой сборки, пользы от системного пакета с исходниками в /usr/src получилось бы не очень много.

Считайте, что программирование под EFI - это как разработка под встраиваемые системы. Нужно быть готовым компилировать взятые чёрт знает откуда исходники, стоя на голове в акваланге. Вон, SDK ни для различных моделей STM32, ни ESP32, ни Raspberry Pi Pico через APT всё равно не достать (хотя gcc-avr в своё время завезли, и спасибо за это).

AITap ★★★★★
()
Ответ на: комментарий от AITap

как разработка под встраиваемые системы

Неофициальные репозитории же для Debian есть?

«From Debian 11 (or 10 with backports), a vastly superior solution is available in the form of the Debian package extrepo»

https://salsa.debian.org/extrepo-team/extrepo

И есть их список?

https://salsa.debian.org/extrepo-team/extrepo-data

«To add metadata for your own external repository, please open a merge request to add a file called repos/debian/<your-repo.yaml>»

Но пока не вижу поисковика по их пакетам (аналогичного gpo.zugaina.org)

Saakx
() автор топика
Последнее исправление: Saakx (всего исправлений: 2)
Ответ на: комментарий от AITap

Стойка на голове в акваланге это то, чем пытается заниматься автор темы. А надо просто скачать архив, распаковать куда хочешь и, опционально, подправить PATH.

vbr ★★★★★
()

Я когда последний раз собирал dxe драйверок чтобы впатчить в бивис тупо брал все из гита, в deb’ках не смотрел даже.

С шеллом там прикол был, что гитовый у меня с бивисом не стартовал даже, надо было откатиться и методом тыка найти старый релиз, который заработал. (Stable API Nonsense, бгг).

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.