Armadilloフォーラム

ビルドしたLinuxカーネルでWLAN(mlan0)が使用できない

tokita.shinichi

2023年2月21日 15時44分

お世話になります。
製品マニュアルを参考に、ビルドしたLinuxカーネルを使用してルートファイルシステムをビルドし、SDブートさせたところ、WLAN(mlan0)が使用できませんでした。
以下に実施した内容を記載します。

(1)「9.4.1. ブートローダーをビルドする」を実施、imx-boot_armadillo_x2を生成
(2)「9.4.2. Linux カーネルをビルドする」を実施、
Image
armadillo_iotg_g4.dtb
armadillo_iotg_g4-aw-xm458.dtboを生成
カーネルコンフィグレーションは変更していません。
(3)「9.4.3.2. Alpine Linux ルートファイルシステムをカスタマイズする」、「9.9.4. DTS overlays によるカスタマイズ」
これらを参考に、ax2/packages からlinux-atを削除し、ax2/resources/boot/に
Image
armadillo_iotg_g4.dtb
armadillo_iotg_g4-aw-xm458.dtbo
を配置、また以下の内容のoverlays.txtを作成しました。
fdt_overlays=armadillo_iotg_g4-aw-xm458.dtbo
(4)「9.5.1. ブートディスクの作成」を参考に、build_image.shを実行しブートディスクイメージを生成し、microSDカードに書き込み
(5)「9.5.2. SD ブートの実行」を参考に、SDブートを実施
起動後、nmtuiを実行したところ、mlan0が見つからなかった

ビルドしたLinuxカーネルを使用しない((3)を実施しない)場合は、mlan0を使用できました。
両者を比較したところ、ビルドしたカーネルの方では/lib/modulesがなく、lsmodを実行してもモジュールが表示されませんでした。
ビルドしたカーネルを使用しない方では、/lib/modulesが存在し、lsmodを実行したところ、mlanを含めたモジュールが表示されました。

このことからモジュールがロードされていないのではと思うのですが、解決方法がわからず投稿させていただきました。
実施の手順の間違いや、対処法についてご教授いただければ幸いです。
以上、宜しくお願い申し上げます。

コメント

at_dominique.m…

2023年2月21日 16時47分

tokita.shinichiさん、

お世話になっています、
アットマークテクノのマルティネです。

> ビルドしたLinuxカーネルを使用しない((3)を実施しない)場合は、mlan0を使用できました。
> 両者を比較したところ、ビルドしたカーネルの方では/lib/modulesがなく、lsmodを実行してもモジュールが表示されませんでした。
> ビルドしたカーネルを使用しない方では、/lib/modulesが存在し、lsmodを実行したところ、mlanを含めたモジュールが表示されました。
>
> このことからモジュールがロードされていないのではと思うのですが、解決方法がわからず投稿させていただきました。
> 実施の手順の間違いや、対処法についてご教授いただければ幸いです。

申し訳ございません、マニュアルにある手順の問題ですね。今までの製品はモジュールをあまり使っていませんでしたのでモジュールのインストール方法をちゃんと説明してませんでした。
調査していただいた通りに、WLAN の動作にモジュールが必要です。

以下のコマンドでモジュールのツリーを作成できますので、インストール先を build-rootfs/ax2/resources にすれば起動できると思います。

(modules_install はすでに depmod を実行していますが、私の環境では debian kmod の depmod が空の modules.dep を生成していて、使えません。busybox の depmod で問題なかったです。今まであまり意識していなかったので、ちゃんと調査してマニュアルに正しい手順を3月のアップデートに追加させていただきます。)

[ATDE ~/linux-[VERSION]]$ INSTALL_MOD_PATH=/home/atmark/build-rootfs-[build_rootfs_version]/ax2/resources \
    make modules_install
[ATDE ~/linux-[VERSION]]$ sudo apt install busybox
[ATDE ~/linux-[VERSION]]$ ls /home/atmark/build-rootfs-[VERSION]/ax2/resources/lib/modules
[kernel_version]
[ATDE ~/linux-[VERSION]]$ busybox depmod -ae -F System.map -b /home/atmark/build-rootfs-[build_rootfs_version]/ax2/resources [kernel_version]

お手数をお掛けして大変失礼致しました。

この手順でも動作しない場合はまた聞いてください。
よろしくお願いします。

tokita.shinichi

2023年2月21日 18時51分

マルティネ様
お世話になります。ご回答ありがとうございます。

教えていただいた手順を試してみたところ、ax2/resourcesに/lib/modules/[kernel_version]が作成されました。
しかしながら、イメージを作成して起動してみると、lsmodでモジュールが表示されませんでした。
modprobe moalを実行したところ、ロードされ、WLANを使用することができました。
起動時からモジュールがロードされているようなイメージを作成することはできますでしょうか。
お手数ですがご教授いただければ幸いです。
以上、宜しくお願い申し上げます。

at_dominique.m…

2023年2月22日 8時53分

tokita.shinichiさん

> 教えていただいた手順を試してみたところ、ax2/resourcesに/lib/modules/[kernel_version]が作成されました。
> しかしながら、イメージを作成して起動してみると、lsmodでモジュールが表示されませんでした。
> modprobe moalを実行したところ、ロードされ、WLANを使用することができました。
> 起動時からモジュールがロードされているようなイメージを作成することはできますでしょうか。

申し訳ございません、最後まで確認しておらず、提供した手順の「busybox depmod」では /lib/modules/[kernel_version]/modules.alias.bin が正しく作成されてませんでした。
手順が少し面倒になりますが、ひとまずインストールした Armadillo に以下のコマンドを実行していただければ、再起動の際に自動的にロードされるはずです。

armadillo:~# depmod
armadillo:~# persist_file -rv /lib/modules/
removed '/mnt/lib/modules/[kernel_version]/modules.builtin.bin'
'/lib/modules/[kernel_version]/modules.builtin.bin' -> '/mnt/lib/modules/[kernel_version]/modules.builtin.bin'
removed '/mnt/lib/modules/[kernel_version]/modules.symbols.bin'
'/lib/modules/[kernel_version]/modules.symbols.bin' -> '/mnt/lib/modules/[kernel_version]/modules.symbols.bin'
removed '/mnt/lib/modules/[kernel_version]/modules.alias.bin'
'/lib/modules/[kernel_version]/modules.alias.bin' -> '/mnt/lib/modules/[kernel_version]/modules.alias.bin'
removed '/mnt/lib/modules/[kernel_version]/modules.dep.bin'
'/lib/modules/[kernel_version]/modules.dep.bin' -> '/mnt/lib/modules/[kernel_version]/modules.dep.bin'
removed '/mnt/lib/modules/[kernel_version]/modules.symbols'
'/lib/modules/[kernel_version]/modules.symbols' -> '/mnt/lib/modules/[kernel_version]/modules.symbols'
removed '/mnt/lib/modules/[kernel_version]/modules.alias'
'/lib/modules/[kernel_version]/modules.alias' -> '/mnt/lib/modules/[kernel_version]/modules.alias'
removed '/mnt/lib/modules/[kernel_version]/modules.dep'
'/lib/modules/[kernel_version]/modules.dep' -> '/mnt/lib/modules/[kernel_version]/modules.dep'

このコマンドで作成された /lib/modules/*/modules.* を再び build-rootfs の resources ディレクトリにコピーすればイメージも無事に使えると思いますが、手順としてはちょっと満足できないのでこれから ATDE で正しく depmod を実行する方法を確認します。
確認ができたらまたご連絡致します。

お手数をお掛けしますが、それまでは Armadillo上の depmod で進んでみてください。
もう問題ないと思いますが、それでも自動的にロードできなかった場合は「modinfo moal」コマンドの出力を提供していただければ助かります。

よろしくお願いします。

tokita.shinichi

2023年2月22日 13時00分

マルティネ様
お世話になります。

ご教授頂いた手順で、起動時にWLANが使用可能になりました。ありがとうございます。
イメージの作成方法に関しては、引き続きよろしくお願いいたします。

at_dominique.m…

2023年2月22日 16時30分

tokita.shinichiさん

納得できた解決ではありませんが、とりあえず原因が分かって、ATDE で modules.dep を作成することができました。

問題は、モジュールの圧縮です。
kmod の depmod (debian がデフォルトで使っている実装)では圧縮を完全に対応してないようで、modules.alias が生成されていません。
busybox の depmod は確かに圧縮をサポートしていますし、 modules.alias を生成できましたが、実際に使われている modules.alias.bin を生成しません。
Armadillo上で .bin まで生成されるのは、昔から alpine 側でその機能を追加しているからです…

なので、カーネルのコンフィグから CONFIG_MODULES_COMPRESS を無効化すれば解決はされますが、ファイルサイズに影響がありますのでワークアラウンドとしては alpine の busybox を使えます。

以下のコマンドで生成したモジュールディレクトリで問題ないかと思います。

[ATDE ~/linux-[VERSION]]$ INSTALL_MOD_PATH=/home/atmark/build-rootfs-[build_rootfs_version]/ax2/resources \
    make modules_install
[ATDE ~/linux-[VERSION]]$ ls /home/atmark/build-rootfs-[VERSION]/ax2/resources/lib/modules
[kernel_version]
[ATDE ~/linux-[VERSION]]$ podman run --rm \
    -v /home/atmark/build-rootfs-[VERSION]/ax2/resources:/install \
    -v $PWD:/linux docker.io/alpine \
    depmod -ae -F /linux/System.map -b /install [kernel_version]

これからもう少し「良い」生成方法がないかも調べてみて、3月のアップデートにちゃんとした手順を用意します。

tokita.shinichi

2023年2月22日 18時12分

マルティネ様
お世話になります。

ご教授頂いた方法で起動時にWLANが使用可能なイメージを作成できました。
こちらとしてはこれで問題ありません。
この度はご教授ありがとうございました。