NvidiaのJetson TK1ボード用のカスタムカーネルをコンパイルしようとしています。カーネル自体(zImage)だけでなく、/usr/src/linux-headers-{version}
と/lib/modules/{version}
が必要なようです。
ただし、linux-headersの作成方法がわかりません。 make headers_install
を実行してみましたが、他の/usr/src/linux-headers
ディレクトリにあるのと同じタイプの出力が作成されないようです。
here などの他の同様の質問を見てきましたが、これは、実行しているバージョンと同じバージョンをビルドしていることを前提としています。
「Linux4Tegra」ディストリビューションから始めていますが、UbuntuCoreに基づいてカスタムシステムを作成しようとしています。
明確にするために、私は自分のLOCAL_VERSION、つまり、リポジトリ内の既存のバージョンではなく、自分のバージョンでカーネルを作成しようとしています。これに一致するヘッダーを生成したいと思います。したがって、linux-headers-xxxパッケージをインストールしても問題は解決しません。
私の質問は、これらのパッケージが最初にLinuxソースからどのように作成されているかです。
既存のヘッダーディレクトリ内のファイルを見ると、そのカーネルバージョンへの参照が含まれているため、これはそのバージョンのLinuxソースから生成されたものと想定しています。どうすればこれらを生成できますか?誰かがカーネルのバージョンをコンパイルしているとき、確かにそれらはどういうわけかこれらのファイルを生成しますか?
遅い答え。私は最近この問題に遭遇し、可能な答えを見つけました。
カーネルヘッダーファイルを/usr/src/linux-headers-4.15.3
にインストールするとします。コンパイルされたカーネルソースツリーは/path/to/compiled/linux-4.15.3/
にあります
まず、クリーンなカーネルソースツリーを解凍します
tar xvf linux-4.15.3.tar.xz
cd linux-4.15.3/
次に、.config
ファイルをディレクトリにコピーします
cp /path/to/compiled/linux-4.15.3/.config .
第三に、それを実行してから、ソースディレクトリの.configファイルを削除して、クリーンなカーネルソースを取得します
make O=/usr/src/linux-headers-4.15.3 oldconfig
rm .config
4番目に、modules_prepare
makeターゲットを実行します
make O=/usr/src/linux-headers-4.15.3 modules_prepare
最後に、無駄なものを削除し、必要なものをコピーします
rm /usr/src/linux-headers-4.15.3/source
cp /path/to/compiled/linux-4.15.3/Module.symvers /usr/src/linux-headers-4.15.3
これで、/usr/src/linux-headers-4.15.3
ディレクトリでモジュールをビルドできるようになりました。
ドキュメント https://www.kernel.org/doc/Documentation/kbuild/modules.txt お知らせくださいmodules_prepare
これにより、カーネルに必要な情報が含まれていることを確認できます。ターゲットは、外部モジュールを構築するためのカーネルソースツリーを準備する簡単な方法としてのみ存在します。
注:「modules_prepare」は、CONFIG_MODVERSIONSが設定されていても、Module.symversをビルドしません。したがって、モジュールのバージョン管理を機能させるには、完全なカーネルビルドを実行する必要があります。
実行Sudo apt-get install linux-headers-generic