前回、BD-SABRE-LITEの標準カーネル3.14にath10kのQCA9377が含まれていないことが判明。今回、新しいカーネルからサポートされた機能を古いカーネルに移植するbackportsを見てみようと思う。

【関連記事】
【組込ボードで無線LAN】②(無線LANカードN-6300を組込ボードに接続するには?)
【組込ボードで無線LAN】⑧(iwのビルド:後編-1)【組込ボードで無線LAN】⑰(QCA9377-5を挿してみた)
  • backportを調べてみる
backportsを見た。Documentationを読んで、Releasesからソースコードをダウンロードしてみようと思う。
1


①Documentationを読んでみる
まずOverviewを読んでみる。
2

気になった点を抜粋した。なんとなくわかったような気になった。おそらく今回はパッケージリリースモードで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パッケージを用意します。
パッケージリリースモードの説明を読んでみる。
3

気になるところを抜粋した。
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をダウンロードする。

4

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
/* SPDX-License-Identifier: ISC */
/*
 * Copyright (c) 2005-2011 Atheros Communications Inc.
 * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
 * Copyright (c) 2018 The Linux Foundation. All rights reserved.
 */

#ifndef _HW_H_
#define _HW_H_

#include "targaddrs.h"

enum ath10k_bus {
        ATH10K_BUS_PCI,
        ATH10K_BUS_AHB,
        ATH10K_BUS_SDIO,
        ATH10K_BUS_USB,
        ATH10K_BUS_SNOC,
};

#define ATH10K_FW_DIR                   "ath10k"

#define QCA988X_2_0_DEVICE_ID_UBNT   (0x11ac)
#define QCA988X_2_0_DEVICE_ID   (0x003c)
#define QCA6164_2_1_DEVICE_ID   (0x0041)
#define QCA6174_2_1_DEVICE_ID   (0x003e)
#define QCA99X0_2_0_DEVICE_ID   (0x0040)
#define QCA9888_2_0_DEVICE_ID   (0x0056)
#define QCA9984_1_0_DEVICE_ID   (0x0046)
#define QCA9377_1_0_DEVICE_ID   (0x0042)
#define QCA9887_1_0_DEVICE_ID   (0x0050)

/* QCA988X 1.0 definitions (unsupported) */
#define QCA988X_HW_1_0_CHIP_ID_REV      0x0

/* QCA988X 2.0 definitions */
#define QCA988X_HW_2_0_VERSION          0x4100016c
#define QCA988X_HW_2_0_CHIP_ID_REV      0x2
#define QCA988X_HW_2_0_FW_DIR           ATH10K_FW_DIR "/QCA988X/hw2.0"
#define QCA988X_HW_2_0_BOARD_DATA_FILE  "board.bin"
#define QCA988X_HW_2_0_PATCH_LOAD_ADDR  0x1234

/* QCA9887 1.0 definitions */
#define QCA9887_HW_1_0_VERSION          0x4100016d
#define QCA9887_HW_1_0_CHIP_ID_REV      0
#define QCA9887_HW_1_0_FW_DIR           ATH10K_FW_DIR "/QCA9887/hw1.0"
#define QCA9887_HW_1_0_BOARD_DATA_FILE  "board.bin"
#define QCA9887_HW_1_0_PATCH_LOAD_ADDR  0x1234


/* QCA6174 target BMI version signatures */
#define QCA6174_HW_1_0_VERSION          0x05000000
#define QCA6174_HW_1_1_VERSION          0x05000001
#define QCA6174_HW_1_3_VERSION          0x05000003
#define QCA6174_HW_2_1_VERSION          0x05010000
#define QCA6174_HW_3_0_VERSION          0x05020000
#define QCA6174_HW_3_2_VERSION          0x05030000

/* QCA9377 target BMI version signatures */
#define QCA9377_HW_1_0_DEV_VERSION      0x05020000
#define QCA9377_HW_1_1_DEV_VERSION      0x05020001


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

続く

IMG_1221


スポンサードリンク