xorriso: boot.catalog и -eltorito-каталог не работают - PullRequest
2 голосов
/ 18 марта 2020

Я пытался создать загрузочный компакт-диск с xorriso, используя пользовательский файл boot.catalog, чтобы - это было моей целью - указать LBA, в которую должен быть помещен мой загрузочный сектор. Однако опция xorriso -eltorito-catalog, похоже, не использует мой пользовательский boot.catalog, вместо этого он создает новый каталог, который затем помещается в окончательный ISO-образ.

Мой пользовательский boot.catalog выглядит вот так (сокращенно, остальные очищены):

 $ xxd boot.catalog | head -n 8
00000000: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 aa55 55aa  .............UU.
00000020: 8800 0000 0000 0400 2000 0000 0000 0000  ........ .......
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
[...]

Насколько я понимаю, DWORD в 0x00000028 (2000 0000, LBA 32) используется для размещения загрузочного образа на указанном LBA в загрузочном компакт-диске. Я использую следующую команду для создания нового загрузочного образа ISO:

 $ xorriso -as mkisofs -iso-level 3 -full-iso9660-filenames -eltorito-boot bootimg.bin -eltorito-catalog boot.catalog -no-emul-boot -boot-load-size 4 -boot-info-table -o test2.iso build

Полученный образ ISO выглядит следующим образом:

 $ isoinfo -i test2.iso -l -s

Directory listing of /
d---------   0    0    0               1 Mar 17 2020 [     19 02]  . 
d---------   0    0    0               1 Mar 17 2020 [     19 02]  .. 
----------   0    0    0               1 Mar 17 2020 [     33 00]  boot.catalog;1 
----------   0    0    0               1 Mar 17 2020 [     34 00]  bootimg.bin;1 
----------   0    0    0               1 Mar 17 2020 [     35 00]  bootstrap.bin;1

Как видите, загрузка bootimg.bin изображение находится на LBA 34 (вместо 32, как написано в моем boot.catalog). Кроме того, извлечение и выгрузка boot.catalog из полученного ISO дает мне:

 $ xxd boot.catalog | head -n 8
00000000: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 aa55 55aa  .............UU.
00000020: 8800 0000 0000 0400 2200 0000 0000 0000  ........".......
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
[...]

Мой вопрос, в зависимости от моего понимания: почему образ загрузки находится в другом секторе (и почему мой boot.catalog заменяется новым, другим)?

Если мое понимание опции -eltorito-catalog неверно: есть ли способ указать xorriso, с чего начать запись файлов в образе ISO? Есть ли способы указать xorriso, куда поместить файлы на компакт-диске?

1 Ответ

1 голос
/ 18 марта 2020

Кажется, что xorriso на самом деле предоставляет опцию, которая модифицирует загрузочный образ, помещая дополнительную информацию, такую ​​как сектор, из которого был загружен образ загрузки, в структуру, к которой можно получить доступ из кода сборки. Опция -boot-info-table помещает структуру со смещением 8, которое выглядит следующим образом:

DWORD boot_image_pvd
DWORD boot_image_lba
DWORD boot_image_len
DWORD boot_image_checksum

Вся структура записана между байтами 8 и 63 в образе загрузки.

  • boot_image_pvd - блок дескриптора основного тома
  • boot_image_lba - блок, в который были загружены первые 2 КБ загрузочного образа из
  • boot_image_len длина всего загрузочного образа (в байтах)

Дополнительная информация здесь .

...