Armadilloフォーラム

カーネルモジュールのビルドでエラーが発生します

ryo_agusa

2023年3月17日 14時14分

https://armadillo.atmark-techno.com/blog/10899/14608

以上の情報を参考に以下のGitHubで公開されているドライバのビルドをやってみたところ、エラーが発生してしまいます。

https://github.com/morrownr/8821au-20210708

状況としましては、

1. https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g4…
2. Linuxカーネルのデフォルトコンフィギュレーションを行っている
3. at-dtwebを使ってデバイスツリーのカスタマイズを行っている

以上の状況で、ドライバのビルドを以下のように指定しています。

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KSRC=../linux-5.10-5.10.168-r0

エラー内容は以下の通りです。

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C ../linux-5.10-5.10.168-r0 M=/home/atmark/8821au-20210708  modules
make[1]: ディレクトリ '/home/atmark/linux-5.10-5.10.168-r0' に入ります
awk: 致命的: cannot open file `include/generated/asm-offsets.h' for reading: そのようなファイルやディレクトリはありません
  CC [M]  /home/atmark/8821au-20210708/core/rtw_cmd.o
aarch64-linux-gnu-gcc: error: missing argument to ‘-mstack-protector-guard-offset=’
make[2]: *** [scripts/Makefile.build:286: /home/atmark/8821au-20210708/core/rtw_cmd.o] エラー 1
make[1]: *** [Makefile:1822: /home/atmark/8821au-20210708] エラー 2
make[1]: ディレクトリ '/home/atmark/linux-5.10-5.10.168-r0' から出ます
make: *** [Makefile:2501: modules] エラー 2

どうすればカーネルモジュールのビルドが通るのか、ご教示いただけませんでしょうか。

コメント

溝渕です。

> 以上の情報を参考に以下のGitHubで公開されているドライバのビルドをやってみたところ、エラーが発生してしまいます。

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C [path-to]/linux-5.10  modules

でビルドできました。一旦Linuxカーネルをビルドするか、次のようにするとビルドできるようになりませんか?

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- asm-generic

ちなみにソースはHEADを取ってきています。

git clone https://github.com/morrownr/8821au-20210708.git

溝渕です。

すみません。専用のターゲットがありました。

>

> make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- asm-generic
> 

ではなく、modules_prepareを使ってください。

[atde]$ make help | grep modules_prepare
  modules_prepare - Set up for building external modules
[atde]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare

> 溝渕です。
>
> すみません。専用のターゲットがありました。
>
> >

> > make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- asm-generic
> > 

>
> ではなく、modules_prepareを使ってください。
>
>

> [atde]$ make help | grep modules_prepare
>   modules_prepare - Set up for building external modules
> [atde]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare
> 

>

すみません、Linuxのビルドに時間をかけていたので、訂正があったことに気が付いておりませんでした。Linuxのビルドに途中で失敗してしまうので、以上を実行して、Linuxビルドのエラーは別のフォーラムに投稿したほうがよろしいでしょうか。

>

> make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C [path-to]/linux-5.10  modules
> 

>
> でビルドできました。一旦Linuxカーネルをビルドするか、次のようにするとビルドできるようになりませんか?

Linuxをビルドしようとすると、途中で以下のエラーが発生してしまいます。

  UPD     drivers/base/firmware_loader/builtin/imx/sdma/sdma-imx7d.bin.gen.S
make[4]: *** 'drivers/base/firmware_loader/builtin/nxp/pcieuart9098_combo_v1.bin.gen.o' に必要なターゲット '/lib/firmware/nxp/pcieuart9098_combo_v1.bin' を make するルールがありません.  中止.
make[4]: *** 未完了のジョブを待っています....
  UPD     drivers/base/firmware_loader/builtin/nxp/pcieuart9098_combo_v1.bin.gen.S
make[3]: *** [scripts/Makefile.build:503: drivers/base/firmware_loader/builtin] エラー 2
make[2]: *** [scripts/Makefile.build:503: drivers/base/firmware_loader] エラー 2
make[1]: *** [scripts/Makefile.build:503: drivers/base] エラー 2
make[1]: *** 未完了のジョブを待っています....

ですので、以下を実行したほうがよろしいでしょうか。

>

> make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- asm-generic
> 

溝渕です。

> Linuxをビルドしようとすると、途中で以下のエラーが発生してしまいます。

ご利用のATDEのバージョンを教えていただけますか?

> 溝渕です。
>
> > Linuxをビルドしようとすると、途中で以下のエラーが発生してしまいます。
>
> ご利用のATDEのバージョンを教えていただけますか?
>

ATDE9のv20220624です。

溝渕です。

https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
の、
「1. Linuxカーネルのビルドに必要なパッケージのインストール」
を実行してみていただけますか?

エラーが出ているpcieuart9098_combo_v1.binは、atmark-firmwareパッケージに含まれます。

事前に、

[atde]$ sudo apt update

のようにしておくと無難です。

>
> 事前に、
>
>

> [atde]$ sudo apt update
> 

>
> のようにしておくと無難です。
>

アップデートをし忘れておりました。試してみます。

> 溝渕です。
>
> https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
> の、
> 「1. Linuxカーネルのビルドに必要なパッケージのインストール」
> を実行してみていただけますか?
>
> エラーが出ているpcieuart9098_combo_v1.binは、atmark-firmwareパッケージに含まれます。
>
> 事前に、
>
>

> [atde]$ sudo apt update
> 

>
> のようにしておくと無難です。
>

本日試しましたところ、Linuxカーネルのビルドはエラーが出ることなく終了し、ビルドできているっぽいことは確認できました。

[ATDE ~/linux-5.10-5.10.168-r0]$ ls arch/arm64/boot/Image
arch/arm64/boot/Image
[ATDE ~/linux-5.10-5.10.168-r0]$ ls arch/arm64/boot/dts/freescale/armadillo_*.dtb
arch/arm64/boot/dts/freescale/armadillo_iotg_g4.dtb

カーネルモジュールのビルド

[ATDE ~/8821au-20210708]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C ../linux-5.10-5.10.168-r0 modules

もエラーは出ずに終わったのですが、.koファイルが見当たりません。どこにありますでしょうか?ビルドする際の出力は以下のようになっております。

make: ディレクトリ '/home/atmark/linux-5.10-5.10.168-r0' に入ります
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  CHK     include/generated/compile.h
  CC      drivers/mxc/hantro/hantrodec.o
  AR      drivers/mxc/hantro/built-in.a
  AR      drivers/mxc/built-in.a
  AR      drivers/built-in.a
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  AR      init/built-in.a
  LD      vmlinux.o
  MODPOST vmlinux.symvers
  MODINFO modules.builtin.modinfo
  GEN     modules.builtin
  LD      .tmp_vmlinux.kallsyms1
  KSYMS   .tmp_vmlinux.kallsyms1.S
  AS      .tmp_vmlinux.kallsyms1.S
  LD      .tmp_vmlinux.kallsyms2
  KSYMS   .tmp_vmlinux.kallsyms2.S
  AS      .tmp_vmlinux.kallsyms2.S
  LD      vmlinux
  SORTTAB vmlinux
  SYSMAP  System.map
  MODPOST modules-only.symvers
  GEN     Module.symvers
make: ディレクトリ '/home/atmark/linux-5.10-5.10.168-r0' から出ます

溝渕です。

> .koファイルが見当たりません。どこにありますでしょうか?ビルドする際の出力は以下のようになっております。

KSRCの指定が必要ですね。次のように実行してみてもらえますか?

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KSRC=[path-to]/linux-5.10  modules

> KSRCの指定が必要ですね。次のように実行してみてもらえますか?
>
>

> make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KSRC=[path-to]/linux-5.10  modules
> 

>

KSRCの指定をしてビルドをしたところ、.koファイルが生成されていることを確認できました。後は https://armadillo.atmark-techno.com/blog/10899/14608 の手順通りに進めていこうと思います。ありがとうございました。