NvidiaのJetson TK1ボード用のカスタムカーネルをコンパイルしようとしていますが、カーネル自体(zImage)に加え/usr/src/linux-headers-{version}
て/lib/modules/{version}
。
しかし、Linuxヘッダーを作成する方法がわかりません。実行してみましたが、他のディレクトリに表示されるのと同じタイプの出力がmake headers_install
生成されないようです。/usr/src/linux-headers
私は次のような他の同様の質問を見ました:ここしかし、これは実行中のバージョンと同じバージョンをビルドすると仮定し、別のLOCAL_VERSIONを使用してビルドしようとしました。
私は「Linux4Tegra」ディストリビューションから始めていますが、Ubuntu Coreに基づいてカスタムシステムを作成しようとしています。
言う、私は自分のLOCAL_VERSION、つまりリポジトリ内の既存のバージョンではなく、自分のバージョンでカーネルを生成しようとしています。これに合ったヘッダを生成したいと思います。したがって、linux-headers-xxxパッケージをインストールしても問題は解決しませんでした。
私の質問は、これらのパッケージが元のLinuxソースからどのように生成されたかです。
既存のヘッダーディレクトリのファイルを見ると、そのカーネルバージョンへの参照が含まれているため、そのバージョンのLinuxソースから生成されたと想定します。どのように生成できますか?誰かがカーネルバージョンをコンパイルしたときにどういうわけかこれらのファイルを生成しますか?
ベストアンサー1
答えが遅かった。最近この問題が発生し、可能な答えが見つかりました。
カーネルヘッダファイルをにインストールするとします/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を構築しません。したがって、モジュールのバージョン管理が機能するには、カーネル全体のビルドを実行する必要があります。