Вообще, приколисты на AMD иногда прям хорошо доставляют. Мне нравится, дайте ИЩО. Давайте чутка терминологии:
1. AGESA - набор бинарей, что конфигурируют платформу перед полноценной загрузкой. Конфигурируют разное, память например. Нам это не особо важно;
2. ABL - AGESA Bootloader. Это то, что работает в контексте ASP/PSP и заканчивает свою работу перед тем, как Stage 2 загрузчик отдаст управление x86 ядрам;
Ранее,
На текущий момент AMD в ASP/PSP директории пихает только ABL0. Почему? Потому что AMD теперь считает, что AGESA это единый блоб данных. В ABL0, после стандартного заголовка (256 байт, 0x100), содержатся небольшие структурки, я их назвал дескрипторами:
struct ABL_DESCRIPTOR {
UINT32 EntryID;
UINT32 Offset;
};Эти структурки, в совокупности, занимают ~0x90 байт в ABL0 и содержат смещения до других ABL (ID записей нам не важны). То есть, ABL0 просто описывает куда ссылаться, если нужен конкретный загрузчик.
Как считаются эти оффсеты? Ну, они считаются от начала ABL0, точнее, от стандартного заголовка ABL0. Например: оффсет до ABL1 составляет 0x300 байт, ABL0 в образе прошивки лежит по адресу 0x25000. Следовательно, ABL1 будет по адресу 0x25300. И так с каждыми ABL. Вот эта совокупность образует весь AGESA блоб. На моей тестовой материнке он примерно ~500КБ суммарно. Только вот каждый из загрузчиков AGESA сжат и пошифрован (AMD используют zlib, если что). Думайте-подписаться.
В самой AGESA много чего, начиная от каких-то базовых конфигураций, аля TOM настроить, заканчивая резервацией защищённых регионов памяти (ну например C6, про который вы возможно узнали от некоторых наработок xoreaxeaxeax).
На своём докладе я говорил, что загрузчиков всего 9.
Напиздюнькал, не считая ABL0 - 19.
