Самый простой способ выполнить двоичный (INTEL FSP) файл из программы на C / C ++ - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь интегрировать INTEL FSP в мою собственную ОС для инициализации кремния, для этого мне нужно собрать ОС с двоичным FSP по какому-то действительному адресу. Я много искал, но нигде не могу найти руководство по бинарной интеграции, где бы они ни говорили об API и интеграции FSP с coreboot. Есть ли самый простой способ, с помощью которого я могу вызвать двоичный файл из моей ОС, который написан на C?

1 Ответ

0 голосов
/ 19 января 2019

Этот мерзавец ссылка решил мою проблему.Ниже приведен фрагмент кода для определения MACRO INCBIN (), который использует псевдоинструкцию ассемблера incbin для встраивания двоичного файла в исполняемый файл.

#define STR2(x) #x
#define STR(x) STR2(x)

#define INCBIN(name, file) \
    __asm__(".section .rodata\n" \
        ".global incbin_" STR(name) "_start\n" \
        ".type incbin_" STR(name) "_start, @object\n" \
        ".balign 16\n" \
        "incbin_" STR(name) "_start:\n" \
        ".incbin \"" file "\"\n" \
        \
        ".global incbin_" STR(name) "_end\n" \
        ".type incbin_" STR(name) "_end, @object\n" \
        ".balign 1\n" \
        "incbin_" STR(name) "_end:\n" \
        ".byte 0\n" \
); \
extern const __attribute__((aligned(16))) void* incbin_ ## name ## _start; \
extern const void* incbin_ ## name ## _end; \

Макрос INCBIN должен вызываться глобально.Далее мы включаем «binary.bin», который будет доступен через «foobar» из приложения.

INCBIN(foobar, "binary.bin");

После компиляции с фрагментом кода выше, «binary.bin» должен быть скомпилирован с результирующим исполняемым файлом.Теперь, чтобы получить доступ к вышеупомянутому двоичному файлу, необходимо использовать «foobar».«incbin_foobar_start» будет иметь начальный адрес, а «incbin_foobar_end» будет иметь двоичный конечный адрес.Затем последним шагом является выполнение операции memcpy (), чтобы поместить двоичный файл в место (адрес памяти), в котором был создан FSP.

...