X86でARM用のカーネルヘッダファイルを作成するには?

X86でARM用のカーネルヘッダファイルを作成するには?

工場カーネル(5.10.110)で使用するARMベースのボードがあります。

カーネルモジュールを手動でビルドするには、カーネルヘッダパッケージが必要です。このパッケージをインストールするには、次を参照してください。文書:

sudo dpkg -i /opt/linux-headers-*.deb

これにより、次のような構造が作成されます。

/lib/modules/5.10.110$ ls -la
total 1584
drwxr-xr-x 1 root root   4096 Apr 29 15:13 .
drwxr-xr-x 1 root root   4096 Jul 10 21:36 ..
lrwxrwxrwx 1 root root     31 Feb 20 07:05 build -> /usr/src/linux-headers-5.10.110
drwxr-xr-x 2 root root   4096 Feb 20 13:29 extra
drwxr-xr-x 1 root root   4096 Feb 20 13:29 kernel
-rw-r--r-- 1 root root 327270 Apr 29 15:13 modules.alias
-rw-r--r-- 1 root root 346627 Apr 29 15:13 modules.alias.bin
-rw-r--r-- 1 root root  28645 Feb 20 13:29 modules.builtin
-rw-r--r-- 1 root root      0 Apr 29 15:13 modules.builtin.alias.bin
-rw-r--r-- 1 root root  30656 Apr 29 15:13 modules.builtin.bin
-rw-r--r-- 1 root root 164216 Feb 20 13:29 modules.builtin.modinfo
-rw-r--r-- 1 root root  95077 Apr 29 15:13 modules.dep
-rw-r--r-- 1 root root 153551 Apr 29 15:13 modules.dep.bin
-rw-r--r-- 1 root root    140 Apr 29 15:13 modules.devname
-rw-r--r-- 1 root root  51432 Feb 20 13:29 modules.order
-rw-r--r-- 1 root root    468 Apr 29 15:13 modules.softdep
-rw-r--r-- 1 root root 163120 Apr 29 15:13 modules.symbols
-rw-r--r-- 1 root root 206275 Apr 29 15:13 modules.symbols.bin

カーネル全体を再コンパイルして、バージョンを5.10.110から5.10.110に増やす必要があります。5.10.160

カーネルモジュールをコンパイルしようとすると、必要なヘッダが見つかりません。

5.10.110のBuildフォルダには、次のファイルが含まれています。

/lib/modules/5.10.110/build$ ls -la
total 1364
drwxr-xr-x  5 root root    4096 Apr 29 15:03 .
drwxr-xr-x  1 root root    4096 Jul 10 22:35 ..
-rw-r--r--  1 root root  220133 Feb 20 07:05 .config
-rw-r--r--  1 root root   68886 Dec  1  2022 Makefile
-rw-r--r--  1 root root 1075160 Feb 20 07:02 Module.symvers
drwxr-xr-x  3 root root    4096 Apr 29 15:03 arch
drwxr-xr-x 31 root root    4096 Apr 29 15:03 include
drwxr-xr-x 17 root root   12288 Apr 29 15:03 scripts

バージョン5.10.160の新しいカーネル用のカスタムカーネルモジュールを構築するために、これらのヘッダーをどのように再生成できますか?

いろいろ試してみました。カーネルがクロスコンパイルされたシステムからこれらのフォルダをコピーすることは機能しません。これは、 "scripts"フォルダにaarch64(x86_64)で実行されていないシステムコードが含まれているためです。

それから私は5.10.110の "scripts"フォルダをコピーしましたが、これがうまくいくか、害があるのか​​、望ましくない結果になるのかわかりません。

それでは、カスタムカーネルモジュールを構築するために環境をクロスコンパイルする方法は?

ベストアンサー1

工場カーネル(5.10.110)で使用するARMベースのボードがあります。

カーネルモジュールを手動でビルドするには、カーネルヘッダパッケージが必要です。

ARMベースのボードがありますが、おそらくIntelベースのPCホストを使用してクロスコンパイラ/ツールチェーンを介してこのモジュールを構築しています。コマンドdpkgは、PCホストにインストールされているLinuxディストリビューション用のヘッダーを取得してインストールします。ただし、ARMベースのマザーボードで使用されるカーネルバージョンのヘッダーが必要です。


まず、特定のカーネルバージョン5.10.110のtarballをダウンロードする必要があります。これがLinuxカーネルのメインラインバージョンなのか、それともチップやボードメーカーが修正したバージョンなのかを無視しているのです。

Linuxカーネルのメインラインバージョンのソースコードは、以下から入手できます。Linuxカーネルのアーカイブ。メインラインバージョン5.10.110のタールボールは次のとおりです。ここ(gzip圧縮)

とにかく適切なソースコードを入手またはダウンロードしてください。
PC展開のインストールとはまったく別に、このソースツリーを解凍してインストールします。次の開発ディレクトリを使用することをお勧めします/家クロスコンパイル操作のため。


サブディレクトリに必要なバージョンのカーネルソースコードがある場合は、make headers_installシェルのコマンドを使用してカーネルのヘッ​​ダファイルをエクスポートできます。
引用するこのガイド:

Exporting kernel headers for use by userspace
=============================================

The "make headers_install" command exports the kernel's header files in a
form suitable for use by userspace programs.
...

The "make headers_install" command can be run in the top level directory of the
kernel source code (or using a standard out-of-tree build).  It takes two
optional arguments:

  make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr 

もう一度お話しますが、クロスコンパイルのためにホストシステムとは別に、これらのヘッダーを以下の開発ディレクトリのように、よりローカルな場所にインストールすることをお勧めします。/家(つまり、上記の例を盲目的に使用しないでください)。

おすすめ記事