xorriso: boot.catalog 和 -eltorito-catalog 不工作
xorriso: boot.catalog and -eltorito-catalog not working
我一直在尝试使用自定义 boot.catalog
文件创建带有 xorriso
的可引导 CD,以便 - 这是我的目标 - 指定我的引导扇区应该放置的 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
at 0x00000028
(2000 0000
, LBA 32) 用于将引导映像放置在可引导CD 介质中指定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(而不是我的 boot.catalog
中所写的 32)。此外,从生成的 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 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
将文件放在 CD 中的什么位置?
似乎 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 KB 的块
boot_image_len
是整个引导镜像的长度(以字节为单位)
更多信息here。
我一直在尝试使用自定义 boot.catalog
文件创建带有 xorriso
的可引导 CD,以便 - 这是我的目标 - 指定我的引导扇区应该放置的 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
at 0x00000028
(2000 0000
, LBA 32) 用于将引导映像放置在可引导CD 介质中指定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(而不是我的 boot.catalog
中所写的 32)。此外,从生成的 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 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
将文件放在 CD 中的什么位置?
似乎 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 KB 的块boot_image_len
是整个引导镜像的长度(以字节为单位)
更多信息here。