vamOS
comma four の Wi-Fi 再接続とホットスポット NAT を直すフォーク
Wi-Fi reconnect and hotspot NAT fixes for vamOS on the comma four
このプロジェクトは commaai の vamOS のフォークです。master は上流と同じで、comma four の Wi-Fi まわりの修正 2 件を wcn3990-mfp ブランチと kernel-nat-config ブランチに置いています。どちらも上流へ pull request #133 と #134 として提出中です。
vamOS は、comma 3X と comma four 向けの新しいオペレーティングシステム、commaai の vamOS のフォークです。上流の vamOS は、カーネル(boot.img)と system(system.img)のビルドから端末への書き込みまでを ./vamos という一つのコマンドで行います。
このフォークの master は上流と同じ内容で、加えているのは comma four の Wi-Fi まわりの修正 2 件です。それぞれ wcn3990-mfp ブランチと kernel-nat-config ブランチにあり、上流へ pull request #133 と #134 として提出しています。wcn3990-mfp が直す問題は、openpilot や agnos-kernel-sdm845 と同じく、comma の端末で WPA3 を使えるようにする確認の中で見つけたもので、上流の issue #131 に報告しています。あわせて、NetworkManager の SAE ホットスポットが起動しない問題を issue #132 に報告しています。
特徴
wcn3990-mfpブランチは、PMF(管理フレーム保護)を要求するアクセスポイントへの再接続を直します。WCN3990 の Wi-Fi ファームウェアfirmware-5.binが持つ機能ビット列にmfpを立てる、1 バイトの変更です。ath10k はファームウェアがmfpを広告しているときだけ WMI のピア PMF フラグを立てるため、これが無いと切断時の保護付き Deauth をファームウェアが書き換えてしまい、アクセスポイント側がリプレイとして捨てます。その結果、次の接続が association comeback になり、再接続に 20 秒以上かかっていました。変更後の実機の試行では 7 回中 6 回が数秒で再接続し、association comeback は 1 度も出ていませんkernel-nat-configブランチは、Wi-Fi ホットスポットが nftables でクライアントを NAT できるようにします。カーネル設定にCONFIG_NF_NAT、CONFIG_NFT_NAT、CONFIG_NFT_MASQ、CONFIG_NFT_REJECTを足す 4 行の変更です。vamOS のカーネルには nf_tables と conntrack が入っている一方 NAT が無効なため、NetworkManager の共有モード(ipv4.method=shared)ではホットスポットのクライアントにアドレスは配られても NAT されません。iptables-legacyは入っていますがip_tablesモジュールがイメージに無いので、そちらでも回避できません。なお、上流側のインターフェースでの転送は NetworkManager が有効にしないことがあり、その対処はユーザー空間の変更になるため、この pull request には含めていません- 上流の vamOS 本体は、
./vamos setupでサブモジュールと udev ルールを初期化し、./vamos build kernelで boot.img、./vamos build systemで system.img をビルドします。./vamos flash kernel/flash system/flash allで EDL 経由で書き込み、./vamos profile diff A Bで 2 つの rootfs プロファイルの差分を取れます - カーネルへのパッチは
kernel/patches/に置き、Linux カーネルツリーへ順番に適用されます。ファイル名はNNNN-SUBSYSTEM-description.patchの形式で、NNNNは 0 埋めの連番、SUBSYSTEMはdefconfig(カーネル設定)、dts(デバイスツリー)、driver(ドライバ)、core(コアカーネル)のいずれか、descriptionは kebab-case の短い要約です(例:0001-defconfig-add-vamos.patch) - README のチェックリストには、comma 3X と comma four それぞれのハードウェア対応状況が並んでいます。両方で UFS、ディスプレイ、I2C、Wi-Fi(テストは未了)、USB、モデム、SPI、グラフィックス(GPU)が済み、GPS は comma four のみ済みです。サウンド、カメラ(カーネル配線・ISP・openpilot)、rusticl / msm_drm 経由の OpenCL、Venus(動画のエンコード・デコード)、openpilot と tinygrad(msm_drm)への対応、dmesg をきれいにするなどの検証は未了です
対応環境と入手方法
comma 3X と comma four 向けの OS です。このフォークの 2 件の変更を確かめたのは comma four の実機です。README には、ビルドに必要なホスト環境は書かれていません。
ソースを取得し、試したいブランチに切り替えてから、README の手順でセットアップ・ビルド・書き込みを行います。
git clone https://github.com/shunnag/vamOS.git
cd vamOS
git switch wcn3990-mfp # または kernel-nat-config
./vamos setup # サブモジュールと udev ルールを初期化
./vamos build kernel # boot.img をビルド
./vamos build system # system.img をビルド
./vamos flash kernel # boot.img を EDL 経由で書き込み
./vamos flash system # system.img を EDL 経由で書き込み
./vamos flash all # まとめて書き込み
./vamos profile diff A B # 2 つの rootfs プロファイルの差分を取る
ビルド済みのイメージは、このフォークでは配布していません。上流のリリースを参照してください。
wcn3990-mfp の確認は、実機でファームウェアのファイルを差し替えて行ったもので、イメージを丸ごとビルドしての確認はしていません。kernel-nat-config は、この設定を入れてビルドしたカーネルを実機で動かして確かめています。どちらの変更も、上流にはまだ取り込まれていません。