Linuxカーネル:「マップファイルが見つかりません」

Linuxカーネル:「マップファイルが見つかりません」

私は自分の設定とコンパイルされたLinuxカーネルを実行しようとしましたが、これまでは成功しませんでした。このマシンは、無料のLibrebootファームウェアがインストールされ、ペイロードとしてGRUB2を搭載したApple Macbook(Intel Core 2 Duo、64ビット)です。私はこのカスタムカーネルを使って私が作ったLinux From Scratchインストールを起動しようとしています。コンピュータの他のパーティションにTrisquel GNU / Linux(バージョン7)がインストールされており、正常に動作するため、このハードウェア/ファームウェア構成でGNU / Linuxを起動できることがわかります。

カーネルバージョンは4.13.1(linux-libre)で、これが私のカーネルをコンパイルしようとする最初の試みです。 GRUBコマンドプロンプトから起動しようとすると、画面が黒くなり、出力は表示されませんが、/var/log/kern.logファイルに書き込まれます。具体的には、ログファイルの先頭に次のメッセージが表示され、混乱しています。

Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
Oct 9 17:24:17 <lee_lfs> kernel: Loaded 100800 symbols from 32 modules.
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] random: get_random_bytes called from start_kernel+0x30/0x3bc with crng_init=0
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] Linux version 4.13.1-gnu (nobody@lee-LibreBook) (gcc version 7.2.0 (GCC)) #1 SMP PREEMPT Mon Oct 9 13:39:53 EDT 2017 

下の2行目は、/boot/System.mapファイルが見つかったことを示すようです。ただし、次の行はファイルが拒否されたことを示しています(カーネルが完全に起動していないのは少なくとも部分的に原因があると考えられています)。

この問題の原因が何であるかを知っている人はいますか?私は以前Linuxの質問のウェブサイト(ここにリンク);しかし、誰もこれを見つけることができませんでした。 (このリンクには、問題に関する詳細な背景情報と以前に提案されたものが含まれています。)

編集 - コメントに記載されている提案に答えるには、次の手順を実行します。

あるユーザーは、「Inspecting...」行がklogdがファイルにアクセスしているという意味ではなく、単にファイルを探し始めたという意味かもしれないと提案しました。しかし、最初は/bootパーティションの/etc/fstabに行を追加するのを忘れていました(この場合はファイルが明らかに見つかりません)、「check ...」行は印刷に追加されませんでした。 /etc/fstab を変更した後、マップされたファイルへの正しいパスとともに、その行がログに表示され始めました。これはklogdがマッピングファイルを探していると疑っていますが、何らかの理由でそれを受け入れないようです。

答え1

だから私はklogdのソースコードを調べましたが、答えが何であるかがわかります。

まず、このInspecting ...行は、klogdがその場所でマッピングファイルを見つけて正常に開いたことを意味します。

ただし、その行を印刷する理由は、Cannot find map file.フォームのマッピングファイルでその行を見つけるためです。

[address] [type] _Version_XXXXX

ここで、「XXXXX」は、ベース256でエンコードされたカーネルバージョンです。

ただし、このバージョンラインは、カーネルのビルド中に生成されたマッピングファイル(または事前パッケージされたTrisquelインストールによって提供されるマッピングファイル)には存在しません。したがって、klogdはこのバージョンラインを見つけることができないため、マップファイルを拒否します。

明らかに、これはより多くの質問を提起しています...

編集する:次のようなフォローアップの質問を作成しました。

「マップファイルが見つかりません」は本当に深刻な問題です。メッセージを開始しますか?

私のSystem.mapファイルに「Version_XXXXX」行が含まれていないのはなぜですか?

編集する:System.mapファイルの先頭に「ダミー」バージョン行を追加しました。

0FFFFFFFFFFFFFFF d Version_265223

このアドレスは仮想メモリマップに存在してはいけません(したがって、ファイル内の他のシンボルを妨害したり競合したりしないことを願っています)。 「265223」は、Base 256でエンコードされたマイカーネルバージョン(4.12.7)です。これで、起動時にkern.logファイルに次のものが表示されます。

Nov  3 19:12:02 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Nov  3 19:12:02 <lee_lfs> kernel: Inspecting /boot/System.map-4.12.7
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 86148 symbols from /boot/System.map-4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Symbols match kernel version 4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 11257 symbols from 31 modules.

だからうまくいくようです - klogdはついにマップファイルを認識します!カーネルはまだ起動しません。これは他の問題による可能性がありますが、次に調査する必要があります。これは現在一時的な解決策のようです。しかし、これがどのように機能するかを調べるために、カーネル開発チームに連絡します。

関連情報