Ну, когда я начал разрабатывать приложения EFI, я обнаружил ту же проблему. Как отправить файл в среду EFI? На данный момент я знаю эти способы:
1. USB-накопитель.
Вероятно, самый простой способ, если вы копируете файлы не слишком часто. Просто поместите файлы на USB-накопитель и подключите его к виртуальной машине (ВМ).
Для доступа к файлу из среды EFI вам нужна оболочка EFI или что-то в этом роде. VMware уже имеет встроенную оболочку, в то время как на других виртуальных машинах вам может потребоваться ее получить. Для этого вы можете использовать замечательный rEFInd Boot Manager, который содержит оболочку. Распакуйте его, вставьте ISO-образ в CD-ROM виртуальной машины и загрузитесь с него. В меню rEFInd выберите "Запустить EFI Shell". Вы увидите командную строку, в которой все устройства хранения отображаются как FS0, FS1, ... Если вы видите только FS0 (файловую систему rEFInd), то вы, вероятно, забыли подключить USB-накопитель к ВМ.
Теперь, чтобы получить свой файл, просто введите команды, подобные этой:
fs1:
cd directory_with_file
Все команды оболочки могут быть найдены командой help
.
2. Пересылка по TFTP.
Больше в настройке, быстрее в использовании. Хорошо, если вы часто отправляете файлы, например, при разработке приложений EFI. Для этого метода вам понадобится TFTP-сервер, такой как tftpd-hpa (он может быть на вашем хост-компьютере), EFI Shell + TFTP-клиент на вашей виртуальной машине. Существует много информации о запуске TFTP-сервера, поэтому вы можете найти руководство самостоятельно. Также полезно иметь DHCP-сервер (это необязательно, но с DHCP настройка будет намного проще).
TFTP-клиент может быть собран из источников Tianocore или загружен из моего облака в виде предварительно скомпилированного двоичного файла x64 (я не знаю, почему сопровождающие Tianocore не предоставляют его в двоичном виде). Разместите tftp.efi
на своей виртуальной машине, где вы сможете получить к ней доступ (USB-накопитель или виртуальный жесткий диск). Поместите ваш файл в корневой каталог TFTP (например, /srv /tftp). Возможно, вам следует перевести сетевой адаптер вашей виртуальной машины в режим моста, чтобы у него был реальный IP-адрес, если вы хотите использовать DHCP. Запустите EFI shell VM, как описано выше. Когда вы увидите командную строку, введите эти команды.
ifconfig -s eth0 dhcp
fs1:
cd destination_directory
tftp 192.168.3.1 file_to_copy
Куда:
eth0
- ваш сетевой адаптер, вы можете найти требуемый с помощью ifconfig -l
. Также вы можете использовать статический ip вместо dhcp, см. help ifconfig
fs1:
это ваша файловая система с tftp.efi
, это может быть fs0:
или другое зависит от вашего загрузочного устройства
tftp
- это приложение tftp.efi
, 192.168.3.1
- это IP-адрес сервера TFTP (хост-компьютер или реальный сервер)
Также вы можете написать эти команды в файле startup.nsh в корне вашей загрузочной файловой системы, чтобы сделать это при загрузке виртуальной машины. Или только последняя строка в другом файле сценария * .nsh для загрузки во время работы EFI.
3. Виртуальная машина QEMU
Это очень удобно для простых тестирований, вам не нужны TFTP, DHCP, USB-накопитель и т.д. Если все в порядке, если вы воссоздаете виртуальную машину каждый раз при загрузке, есть замечательная статья о создании и отладке приложений EFI с QEMU на osdev.org.