web-dev-qa-db-ja.com

/ usr / src / linux-headers- {version}ファイルを作成する方法

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ソースから生成されたものと想定しています。どうすればこれらを生成できますか?誰かがカーネルのバージョンをコンパイルしているとき、確かにそれらはどういうわけかこれらのファイルを生成しますか?

2
Alex

遅い答え。私は最近この問題に遭遇し、可能な答えを見つけました。

カーネルヘッダーファイルを/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をビルドしません。したがって、モジュールのバージョン管理を機能させるには、完全なカーネルビルドを実行する必要があります。

5
Situ Mingfeng

実行Sudo apt-get install linux-headers-generic

1
Lev Bystritskiy