grubでのエラー
たまにはカーネルネタ。というかgrubネタ。
カーネル(vmlinux)をビルドして/bootにそれをコピーしgrub.confに今ビルドしたカーネルのエントリを追加する。いつものパターンである。
リブートする。立ち上がらない。
Error 13: Invalid or unsupported executable format
ビルドしたカーネルで立ち上がらないと凹む。まあ、そーゆー時はGoogleである。grubのマニュアルをインターネットに発見する。
曰く
13 : Invalid or unsupported executable format
This error is returned if the kernel image being loaded is not
recognized as Multiboot or one of the supported native formats
(Linux zImage or bzImage, FreeBSD, or NetBSD).
チンプンカンプンである。Multibootというのは何だ?
サポートするネーティブなフォーマットでない?
Linuxの場合zImage or bzImageと書いてある。むむむ、/bootにはvmlinuxという圧縮していないイメージをコピーしたぞ。
ということで、arch/i386/boot/bzImageをvmlinuz-xx.xx.xxとしてコピーし、再起動してことなきを得た。
通常はbzImageをコピーするのだけど、crashコマンドとか利用する時は圧縮しないカーネルが必要なので、それから起動しようとしたのだけど、だめだと言うお話であった。




vmlinuxは普通のELF実行ファイルなので、先頭アドレスに実行コードがあると信じてジャンプしてくると文字列で"ELF"とか書いてあってビックリ仰天、死んでしまう。と
クロスコンパイラじゃないgccはELF objectを生成するので当然といえば、当然。
vmlinuxがELFだと色々なデバッガソフトで何も考えずにカーネルの内部情報ぬきだせて便利なので、今後も変わらないと予想
投稿: kosaki | 2007年8月20日 (月) 11:29
kosakiさん、コメントありがとうございます。勉強になるっす。(無知な私)
crashなんかもgdbの拡張(?)ですもんね。
投稿: hyoshiok | 2007年8月24日 (金) 09:49