1

ダウンロードしたソースからカーネルをコンパイルしようとしています。kernel.org のソースを使用してカーネル イメージを作成しました。

grub に正常にロードしましたが、ロードしたモジュールを実行しようとすると、エラー メッセージが表示されます: "invalid magic number". 物事を成し遂げるために修正する必要があるものを手に入れていません。

私が従った手順:

  1. xconfig を作成し、
  2. bzImage を作る
  3. モジュールを作る
  4. モジュールをインストールする
  5. また、イメージの名前を bzImage (/boot フォルダー内) から変更し、次から initrd イメージを作成しました。
  6. # dracut /boot/initramfs-3.1.6-1.fc16.x86_64.img 3.1.6-1.fc16.x86_64(ネットからコピペしたコマンド)
4

3 に答える 3

3

カーネルをコンパイルするたびに、そのカーネル内で使用する必要があるカーネル モジュールも再コンパイルする必要があります。たとえば、カーネル 2.6.39 用にコンパイルされたモジュールをカーネル 3.7 にロードすることはできません。カーネル 3.7 用に再コンパイルする必要があります。

詳細 --> より良い回答

于 2013-01-21T13:57:38.883 に答える
2

実際、これがカーネルモジュールと関係があるとは思えません。カーネル自体がモジュールと呼ばれているようです。カーネルが正しくビルドされていないか、grub コマンドラインから間違ってロードされている可能性があります。

http://forums.gentoo.org/viewtopic-t-932358-start-0.html試してみてください。

カーネル ビルドの一部のファイルが適切にクリーンアップされていない可能性があり、前回のビルド試行で行った変更により、誤ったデータが含まれている可能性があります。

また、x86 イメージはカーネル ソース内の arch/x86_64/boot/bzImage または arch/x86/boot/bzImage に配置されることに注意してください。実際にカーネル自体をコピーしたことを確認し、他の不正なファイルをコピーしていないことを確認してください。

それが失敗した場合は、grub 2.x よりも使いやすいので grub 1.x を試してください。多くの点が異なることに注意してください。正しいバージョンの grub のチュートリアルを読む必要があります。多くの場合、grub 1.x は、ディストリビューションに応じて grub-legacy または同様のパッケージに含まれます。

編集:ハードウェア専用のカーネルを構築している場合... initramfs を過度に使用しないでください。システムが必要不可欠なドライバーに十分な大きさのカーネルをロードできない場合に、これを実行したい場合があります (たとえば、sparc はカーネル イメージのサイズが非常に限られています)。もう 1 つはネットワーク経由で起動する可能性がありますが、概してそれは必要ありません。initramfs を使用する必要がある場合は、最初にそれを使用せずにカーネル ビルドを動作させます。

また、個人的には、必要不可欠なドライバー (基本的にはディスクとファイルシステム) を含めてカーネルをビルドし、それを使用してビルドします。

make mrproper (save/backup your .config first) ; 
make menuconfig ; 
make -j8 ; 
make modules_install ; 
cp arch/x86_64/boot/bzImage /boot/linux-3.7.1 ; 

(新しいカーネルを起動するように grub を変更します) 完了し、再起動する準備が整いました。

失敗のスクリーンショットを添付していただけないでしょうか?

于 2013-01-21T14:13:18.883 に答える
1

私はあなたの質問を 100% 明確に受け取っていません。とにかく、kernel.org からカーネル ツリーをダウンロードし、新しいイメージで正常に起動しました。

次に、insmod または modprobe を使用して LKM、つまりカーネル モジュールをロードしようとしています。

そのため、「無効なマジック番号」が表示されます。

解決

新しいカーネルでカーネル モジュールを再コンパイルする必要があり、挿入を試みます。

于 2013-01-21T08:33:39.493 に答える