ネットワーク

【無線LAN】組み込みボードで無線LANを動かしてみた(QCA9377失敗編)④backportを見てみる

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

【無線LAN】組み込みボードで無線LANを動かしてみた(Intel N6300編)を実験したところ、Intel N6300はAPモードになれないことが判明。

そこでクアルコムアセロス社のQCA9377というAPモード対応デバイスを挿してみることにした。

先に結果を書きますが、いろいろやった結果、手詰まりになりました(QCA9377の認識に失敗します。STAすら動いてません)。

最後にも書きましたが、どこかで仕切り直したいです。そのときに今回の失敗事例が役にたつと思うので、記録しておきました。

中途半端で申し訳ありません。

こんな悩みを解決します。

今回やることは1つ。

  1. backportを見てみる

バージョン情報

Linux Kernel 3.14

Linux Kernel 5.2.8(Backport)

backportを見てみる

新しいカーネルでサポートされた機能を古いカーネルに移植するbackportsを見てみます。

①backportを調べてみる

backportsを見ました。Documentationを読んで、Releasesからソースコードをダウンロードしてみようと思います。

①Documentationを読んでみる

Overviewを読んでみます。

気になった点を抜粋。なんとなくわかったような気になりました。おそらく今回はパッケージリリースモードでOKな気がします。

The Backports Project aims to backport current Linux upstream device drivers for use with older kernels. The objective (1) is to provide a central mechanism for backporting the device drivers of any subsystem, thereby enabling (2) both users and developers to always focus on upstream Linux kernel development.
(Google和訳)
バックポートプロジェクトは、古いカーネルで使用するために、現在のLinuxアップストリームデバイスドライバーをバックポートすることを目的としています。目的(1)は、サブシステムのデバイスドライバーをバックポートするための中心的なメカニズムを提供し、それによって(2)ユーザーと開発者の両方が常に上流のLinuxカーネル開発に集中できるようにすることです。

 

Every backports release has been test compiled for usage against all supported kernels. The oldest release is (currently) 3.0.
(Google和訳)
すべてのバックポートリリースは、サポートされているすべてのカーネルに対して使用するためにテストコンパイルされています。最も古いリリースは(現在)3.0です。

 

Backports provides users with a choice of two workflows:
1. kernel integration mode (documentation)
future kernel source tree and older kernel source tree must be present
on the same machine at the same time
backports suite integrates the subsystems/drivers of the future kernel directly
into the older kernel
2.package releases mode (documentation)
future kernel source tree and older kernel source tree do not need to be present
on the same machine at the same time
on machine hosting future kernel source tree, backport package is generated
on machine hosting older kernel, backport package is built out-of-tree
against older kernel
backport package is loosely akin to a patch file
(Google和訳)
バックポートは、ユーザーに次の2つのワークフローの選択肢を提供します。
1.カーネル統合モード(ドキュメント)
将来のカーネルソースツリーと古いカーネルソースツリーが
同時に同じマシンに存在する必要があります
バックポートスイートは、将来のカーネルのサブシステム/ドライバーを
古いカーネルに直接統合します
2.パッケージリリースモード(ドキュメント)
将来のカーネルソースツリーと古いカーネルソースツリーは、
同じマシン上に同時に存在する必要はありません
将来のカーネルソースツリーをホストするマシンで、
バックポートパッケージが生成されます
古いカーネルをホストしているマシンでは、バックポートパッケージは
古いカーネルに対してツリー外に構築されます
バックポートパッケージは、パッチファイルに大まかに似ています

 

Backported Subsystems
Device drivers are available for the following subsystems:
Ethernet
Wireless
Bluetooth
NFC
ieee802154
Media
Regulator
(Google和訳)
バックポートされたサブシステム
デバイスドライバーは、次のサブシステムで使用できます。
イーサネット
無線
ブルートゥース
NFC
ieee802154
メディア
レギュレーター

 

Backported Drivers
Whether or not a device driver is available from a subsytem will depend on whether or not a developer decided to backport it and if the device driver is backported down to the kernel you are on. If you see the driver on make menuconfig it means you can use it. An alternative is to look at the git tree dependencies file. Note that the dependencies does not exist on a final release, it only exists on the development git tree and the one linked here is the one on the master branch — you should look at the release branches for their respective dependencies file if using an older release. Someone is welcome to come up with a fancy page that provides the device driver <–> kernel dependency map page. If a device driver is available on make menuconfig but is not listed on the dependencies file it means it is available for usage on all supported kernel.
Users should just install what they know they need, if not sure don’t enable a driver. Typically Linux distributions would use the backports project and build modules for you and you’d have a backports package available for your distribution.
(Google和訳)
バックポートされたドライバー
サブシステムからデバイスドライバーを使用できるかどうかは、開発者がそれをバックポートすることを決定したかどうか、およびデバイスドライバーが使用中のカーネルにバックポートされるかどうかによって異なります。 make menuconfigにドライバーが表示されている場合、それを使用できることを意味します。別の方法は、gitツリー依存関係ファイルを確認することです。依存関係は最終リリースには存在せず、開発gitツリーにのみ存在し、ここにリンクされているのはmasterブランチにあることに注意してください。リリース。誰かが、デバイスドライバーの<->カーネル依存マップページを提供する派手なページを作成することを歓迎します。 make menuconfigでデバイスドライバーが使用できるが、依存関係ファイルにリストされていない場合、サポートされているすべてのカーネルで使用できることを意味します。
わからない場合は、ドライバーを有効にしないでください。通常、Linuxディストリビューションはbackportsプロジェクトを使用してモジュールをビルドし、ディストリビューションで利用可能なbackportsパッケージを用意します。

パッケージリリースモードの説明を読んでみます

気になるところを抜粋。

Cross compiling
To cross compile:
set -a
CROSS_COMPILE=${CROSS_COMPILE}
ARCH=${TARGET_CPU}
KLIB_BUILD=${DEV_PATH}/${LINUX_DIR}
KLIB=${TARGET_ROOT_ON_HOST}
set +a
make oldconfig # menuconfig worked here too
make
make install
(Google和訳)
クロスコンパイル
クロスコンパイルするには:
セット-a
CROSS_COMPILE = $ {CROSS_COMPILE}
ARCH = $ {TARGET_CPU}
KLIB_BUILD = $ {DEV_PATH} / $ {LINUX_DIR}
KLIB = $ {TARGET_ROOT_ON_HOST}
セット+ a
ここでもoldconfig#menuconfigが機能しました
作る
インストールする

②Releasesからソースコードをダウンロード

Releasesを開きます。とにかく新しいやつを試したいのですが一番上のbackports-5.3-rc4-1.tar.xzはrcがついてるので正式リリースではありません。次に新しいbackports-5.2.8-1.tar.xzをダウンロードしました。

backports-5.2.8-1.tar.xzをダウンロードして解凍。中身はこんな構成になってます。

$ mkdir ~/backports
$ wget https://cdn.kernel.org/pub/linux/kernel/projects/backports/stable/v5.2.8/backports-5.2.8-1.tar.xz
$ tar xvf backports-5.2.8-1.tar.xz
$ ls ~/backports/backports-5.2.8-1
COPYING LICENSES backport-include local-symbols
Documentation MAINTAINERS compat net
Kconfig Makefile defconfigs scripts
Kconfig.local Makefile.build drivers versions
Kconfig.package.hacks Makefile.kernel include
Kconfig.sources Makefile.real kconf

compatを覗いてみました。とりあえず分かったのは、backports-5.2はカーネル5.2向けドライバをカーネル3.10~カーネル5.2までの任意のカーネルバージョン向けにビルドできるということ。つまりカーネル5.2向けドライバをカーネル3.14向けにビルドできると理解しました。

$ ls ~/backports/backports-5.2.8-1/compat/
Kconfig backport-4.2.c compat-3.6.c
Makefile backport-4.3.c compat-3.7.c
backport-3.10.c backport-4.4.c compat-3.8.c
backport-3.11.c backport-4.5.c compat-3.9.c
backport-3.12.c backport-4.6.c drivers-base-devcoredump.c
backport-3.13.c backport-4.7.c hid-ids.h
backport-3.14.c backport-4.8.c lib-asn1_decoder.c
backport-3.15.c backport-5.2.c lib-bucket_locks.c
backport-3.17.c backport-genetlink.c lib-math-cordic.c
backport-3.18.c backports.h lib-oid_registry.c
backport-3.19.c build_OID_registry lib-refcount.c
backport-3.2.c compat-3.0.c lib-rhashtable.c
backport-4.0.c compat-3.1.c main.c
backport-4.1.c compat-3.3.c memneq.c
backport-4.10.c compat-3.4.c user_namespace.c
backport-4.18.c compat-3.5.c verification

念のためath10kのhw.hを確認。ちゃんとQCA9377が存在します。

$ vi ./backports/backports-5.2.8-1/drivers/net/wireless/ath/ath10k/hw.h

まとめ

次回、backports-5.2.8-1をBD-SABRE-LITEのカーネル3.14向けにビルドします。

 

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。