2391933_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2391933_ja-JP

2391933_ja-JP

LSDK 25.12 udev オートロードと /boot/modules レイアウトの競合


NXPチームの皆様、こんにちは。

私たちは以下の環境を使用しています。

* プラットフォーム:i.MX8MP
* 配布:Debian 13 / trixie
* LSDKリリース:LSDK-25.12_DEBIAN-13_LF-6.12.20
* カーネル:6.12.20
* systemd / udev: 257.x
* kmod / libkmod: 34.x

udevによって一部のカーネルモジュールが自動的にロードされないという、断続的なコールドブートの問題が発生しました。私たちの場合、影響を受けるデバイスは主にオーディオコーデック/オーディオチェーンとWLANモジュールです。

症状は以下のとおりです。

* 'snd_soc_wm8962'は無装填です
* オーディオコーデックおよびオーディオプラットフォームデバイスはバインドされません
* 『aplay -l』はサウンドカードがないと報告
* WLAN インターフェースが欠落しています
* 起動後に手動で「modprobe」または「udevadm trigger」--action=add」を実行することでデバイスを復元できます

デバッグの結果、この問題は今回のflexbuildリリースで使用されているカーネルモジュールのレイアウトに関連していることが判明しました。

`LSDK-25.12_DEBIAN-13_LF-6.12.20` flexbuild タグ内の `configs/debian/debian_post_config.sh`以下のシンボリックリンクを作成します。

「`sh
ln -sf /boot/modules /lib/modules
「`」

また、`tools/create_bootpartition` はカーネルモジュールをブートパーティションにコピーします。

「しっ
cp -rf $KERNEL_OUTPUT_PATH/$KERNEL_BRANCH/tmp/lib/modules $bootpartdir
```

したがって、実行時には `/lib/modules` は `/boot/modules` に依存し、`/boot` は後で `boot.mount` によってマウントされます。

また、`src/system/boot.mount` も確認しました。内容物:

「`ini」
[ユニット]
説明=ブートパーティション
変更前=systemd-modules-load.service

[マウント]
What=UUID=PARTUUID
場所=/boot
タイプ=ext4
オプション=デフォルト

[インストール]
WantedBy=local-fs.target
「`」

これは、`systemd-modules-load.service` によって処理される静的モジュール読み込みパスの前に `/boot` がマウントされることを保証するようです。

しかし、私たちの問題は`systemd-modules-load.service`に起因するものではありません。影響を受けたオーディオ/WLANモジュールは、udevによってデバイス「MODALIAS」イベントを通じて動的にロードされます。

失敗した起動では、影響を受けたデバイスイベント情報がudevによって処理され、「boot.mount」が行われることが観察されました。完了しました。その時点では、`/lib/modules` は `/boot/modules` を指していますが、`/boot` はまだマウントされていません。その結果、libkmodはモジュールのエイリアス/インデックスファイルや対応する「.ko」ファイルにアクセスできず、udevモジュールの自動読み込みパスが失敗します。udevイベントはすでに処理済みなので、手動でudevを再トリガーするか「modprobe」を実行しない限り、ドライバは後から読み込まれません。

私たちが理解している失敗経路は以下のとおりです。

「テキスト
カーネルデバイス追加イベント
→udevはMODALIASイベントを受け取る
→udev/libkmodは/lib/modulesにアクセスしようとします
→ /lib/modules は /boot/modules を指しています
→ /bootはまだマウントされていません
→モジュールのエイリアス/インデックスファイルまたは.koファイルは利用できません
→モジュールの自動読み込みが失敗します
```

以下の点について確認させていただきたい。

1. LSDK 25.12 Debian 13 リリースでは、`/lib/modules -> /boot/modules` というレイアウトが想定されていますか?

2. udev の初期の `MODALIAS` 処理と後の `boot.mount` 処理の間に競合が発生していますか?このレイアウトに関する既知の問題点または既知の制限事項はありますか?

3. 現在の上流のflexbuildメインブランチでは、このアーキテクチャが変更されているようです。カーネルモジュールは`create_bootpartition`によってブートパーティションにコピーされなくなり、`debian_post_config.sh`で`/lib/modules -> /boot/modules`シンボリックリンクが作成されなくなりました。

このアーキテクチャの変更は、このような早期起動モジュールの自動読み込み競争を避けるためでしょうか?

4. LSDK 25.12 Debian 13の場合、NXPが推奨するこの問題の修正方法または回避策は何ですか?

私たちの理解が正しいかどうか、また、このリリースに対する公式パッチや推奨アップデートパスがあるかどうかをお知らせください。

ありがとうございます。

i.MX 8M | i.MX 8M Mini | i.MX 8M NanoRe: LSDK 25.12 udev autoload race with /boot/modules layout

こんにちは、

Q1: この設計の当初の意図は、カーネルイメージとモジュールをブートパーティションにまとめて配置し、カーネルをアップグレードする際にルートファイルシステムを変更せずにブートパーティションだけを交換すれば済むようにすることでした。このレイアウトは意図的なものであり、バグではありません。

Q2: あなたの考え方は正しいです。これはこのレイアウトの本質的な制約です。

Q3: イメージを構築する際に、一度だけ「/boot/modules」の内容をrootファイルシステムの「/lib/modules」に移動し、記号リンクを削除することができます:

rm -f /lib/modules
mkdir -p /lib/modules
cp -a /boot/modules/* /lib/modules/

同時に、

1. ビルドスクリプトの「tools/create_bootpartition」を修正し、「cp -rf .../lib/modules $bootpartdir」の行を削除します。 

2. `debian_post_config.sh` を変更し、`ln -sf /boot/modules /lib/modules` の行を削除します。

3. 「bld linux / modules_install」ターゲットを設定し、ルートファイルシステムにモジュールをインストールする( 「main」ブランチの「linux-modules」ターゲットの実装を参照)。

よろしくお願いします、
志明

Tags (1)
No ratings
Version history
Last update:
Thursday
Updated by: