2014年12月12日金曜日

failed to load com32 file linux.c32

syslinuxで"failed to load com32 file linux.c32"と表示される理由がようやく判りました。

(1) -d 指定の誤り 

[Ok] syslinux64.exe -d /boot/syslinux  j:
[Ok] syslinux64.exe -d /boot/syslinux/ j:


{NG} syslinux64.exe -d boot/syslinux   j:
{NG} syslinux64.exe -d boot/syslinux/  j:
{NG} syslinux64.exe -d boot\syslinux   j:
{NG} syslinux64.exe -d \boot\syslinux  j:

-d オプションのパス形式は、「Unix形式」かつ「絶対パス」で指定

相対パスで指定すると WARNING: No configuration file found が表示されて、boot: プロンプトになりました。

syslinux 6.03 で -d の効果を確認しています。

(2) syslinux フォルダの名前を変更したり、移動した

場合によっては、 Boot error になり、syslinux の起動が失敗します。

その場合は、syslinux.exe を使ってもう一度、書き込みしましょう。

(3) バイナリ形式の不一致

バイナリの形式と、対応する syslinux が定まっている様子です。


形式 CPU 拡張子 syslinux 6.03 syslinux 5.11 syslinux 4.10 syslinux 3.86
COMBOOT 16-bit .com N N Y Y
COM32 32-bit .c32 N N N Y
COM32R 32-bit .c32 N N Y Y
ELF 32-bit .c32Y Y ? ?
ELF 64-bit .c32 YN N N

.c32 については、複数の形式が有るので注意が必要です。

バイナリエディタで見れば通常、判別できます。

ELF 形式とは

ELF という文字列が有ります。


COM32 形式とは

Syslinux 3.xx (3.00 ~ 3.86) で採用されている実行ファイル形式。

マジックナンバーは B8 FF 4C CD 21 です。doc/comboot.txt を参照。

COM32R との互換性はありません。
 
gPXE が認識できるのは COM32 だけのようです。

COM32R 形式とは

Syslinux 4.xx (4.00 ~ 4.07 ) で採用されている実行ファイル形式。

マジックナンバーは B8 FE 4C CD 21です。syslinux/doc/comboot.txt を参照。

COM32 との互換性はありません。



vesamenu.c32: not a COM32R image につきまして

COM32R は self-relocating な 32-bit プログラムで、syslinux 4.xx で動作します。

つまり、このエラーは syslinux 4.xx でしか起こらないエラーです。

対策

(A) kernel.org から syslinux-4.07.zip を拾ってきて、必要なファイルを抜き取る。
 例: syslinux-4.07\com32\menu\vesamenu.c32
 例: syslinux-4.07\com32\gfxboot\gfxboot.c32

(B) できるものなら syslinux 6.03 へ更新する。次の対策編を参照。


対策編

syslinux 6.03 をダウンロードして、インストール

Kernel.org より最新版 syslinux-6.03.zip が入手できます。
ソースコードと Windows 用 Linux 用のバイナリが提供されています。

Windows 用は bios/win32/syslinux.exe を使います。
c32 ファイルは、bios/com32 以下に入っています。

各モジュールのパスと説明依存関係

bios\com32\chain\chain.c32
bios\com32\cmenu\complex.c32
bios\com32\cmenu\display.c32
bios\com32\cmenu\libmenu\libmenu.c32
bios\com32\cmenu\simple.c32
bios\com32\cmenu\test.c32
bios\com32\cmenu\test2.c32
bios\com32\elflink\ldlinux\ldlinux.c32
bios\com32\gfxboot\gfxboot.c32
bios\com32\gpllib\libgpl.c32
bios\com32\hdt\hdt.c32
bios\com32\lib\libcom32.c32
bios\com32\libutil\libutil.c32
bios\com32\lua\src\cmenu.c32
bios\com32\lua\src\cpu.c32
bios\com32\lua\src\dhcp.c32
bios\com32\lua\src\dmi.c32
bios\com32\lua\src\lfs.c32
bios\com32\lua\src\liblua.c32
bios\com32\lua\src\lua.c32
bios\com32\lua\src\pci.c32
bios\com32\lua\src\syslinux.c32
bios\com32\lua\src\vesa.c32
bios\com32\mboot\mboot.c32
bios\com32\menu\menu.c32
bios\com32\menu\vesamenu.c32
bios\com32\modules\cat.c32
bios\com32\modules\cmd.c32
bios\com32\modules\config.c32
bios\com32\modules\cptime.c32
bios\com32\modules\cpuid.c32
bios\com32\modules\cpuidtest.c32
bios\com32\modules\debug.c32
bios\com32\modules\disk.c32
bios\com32\modules\dmitest.c32
bios\com32\modules\elf.c32
bios\com32\modules\ethersel.c32
bios\com32\modules\gpxecmd.c32
bios\com32\modules\hexdump.c32
bios\com32\modules\host.c32
bios\com32\modules\ifcpu.c32
bios\com32\modules\ifcpu64.c32
bios\com32\modules\ifmemdsk.c32
bios\com32\modules\ifplop.c32
bios\com32\modules\kbdmap.c32
bios\com32\modules\kontron_wdt.c32
bios\com32\modules\linux.c32
bios\com32\modules\ls.c32
bios\com32\modules\meminfo.c32
bios\com32\modules\pcitest.c32
bios\com32\modules\pmload.c32
bios\com32\modules\poweroff.c32
bios\com32\modules\prdhcp.c32
bios\com32\modules\pwd.c32
bios\com32\modules\pxechn.c32
bios\com32\modules\reboot.c32
bios\com32\modules\sanboot.c32
bios\com32\modules\sdi.c32
bios\com32\modules\vesainfo.c32
bios\com32\modules\vpdtest.c32
bios\com32\modules\whichsys.c32
bios\com32\modules\zzjson.c32
bios\com32\rosh\rosh.c32
bios\com32\samples\advdump.c32
bios\com32\samples\entrydump.c32
bios\com32\samples\fancyhello.c32
bios\com32\samples\hello.c32
bios\com32\samples\keytest.c32
bios\com32\samples\localboot.c32
bios\com32\samples\resolv.c32
bios\com32\samples\serialinfo.c32
bios\com32\sysdump\sysdump.c32


0 件のコメント:

コメントを投稿