2

У меня есть вопрос, можно ли скопировать файл в EFI, используя какой-то протокол?

Пример У меня есть компьютер и виртуальная машина, виртуальная машина загружается в efi, и мне нужно скопировать на него файл и затем выполнить его в среде efi.

Является ли это возможным?

2 ответа2

0

Ну, когда я начал разрабатывать приложения 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.

0

Если вы просто хотите выполнить удаленный двоичный файл EFI, поищите команду "rload", если она доступна в вашей оболочке EFI.

Это использует TFTP. И это предполагает, что у вашего EFI есть сетевые драйверы и все.

В моей оболочке не нашел команды для фактического копирования удаленного файла в файловую систему, что немного раздражает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .