ネットワーク

【無線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をインストール(失敗)

①ath10kのファームウェアをダウンロード

前にダウンロードしたQCA9377ファームウェアの内容を確認。当時could not fetch firmware file ‘ath10k/QCA9377/hw1.0/firmware-5.bin‘: -2というエラーが出ていたのを思い出しました。binと書いてあるのがファームと思われます。

QCA9377
hw1.0
CNSS.TF.1.0
notice.txt_CNSS.TF.1.0-00267-QCATFSWPZ-1
WLAN.TF.1.0
.priority
firmware-5.bin_WLAN.TF.1.0-00002-QCATFSWPZ-5
firmware-5.bin_WLAN.TF.1.0-00023-QCATFSWPZ-1
notice.txt_WLAN.TF.1.0-00002-QCATFSWPZ-5
notice.txt_WLAN.TF.1.0-00023-QCATFSWPZ-1
WLAN.TF.2.1
.priority
firmware-6.bin_WLAN.TF.2.1-00014-QCARMSWP-1
firmware-6.bin_WLAN.TF.2.1-00016-QCARMSWP-1
firmware-6.bin_WLAN.TF.2.1-00021-QCARMSWP-1
notice.txt_WLAN.TF.2.1-00014-QCARMSWP-1
notice.txt_WLAN.TF.2.1-00016-QCARMSWP-1
notice.txt_WLAN.TF.2.1-00021-QCARMSWP-1
board-2.bin
board.bin
untested
notice.txt_WLAN.TF.1.1.1-00061-QCATFSWPZ-1.txt

念のため/lib/firmware/を確認。ath10kというディレクトリはありません。

# ls /lib/firmware
TIInit_7.2.31.bts wl127x-fw-4-mr.bin wl128x-fw-4-plt.bin
ti-connectivity wl127x-fw-4-plt.bin wl128x-fw-4-sr.bin
vpu wl127x-fw-4-sr.bin wl128x-fw-5-mr.bin
wl1251-fw.bin wl127x-fw-5-mr.bin wl128x-fw-5-plt.bin
wl1251-nvs.bin wl127x-fw-5-plt.bin wl128x-fw-5-sr.bin
wl1271-fw-2.bin wl127x-fw-5-sr.bin wl128x-fw-ap.bin
wl1271-fw-ap.bin wl127x-fw-plt-3.bin wl128x-fw-plt-3.bin
wl1271-fw.bin wl127x-nvs.bin wl128x-fw.bin
wl1271-nvs.bin wl128x-fw-3.bin wl128x-nvs.bin
wl127x-fw-3.bin wl128x-fw-4-mr.bin wl12xx-nvs.bin

というわけで、ath10kというディレクトリを作り、ファームが格納されたディレクトリ(QCA9377)を/lib/firmwareにコピー。/lib/firmware/ath10k/QCA9377/hw1.0/WLAN.TF.1.0/firmware-5.bin_WLAN.TF.1.0-00002-QCATFSWPZ-5を/lib/firmware/ath10k/QCA9377/hw1.0/firmware-5.binにコピー(firmware-5.binは***00002***と***00023***の2種類ありますが、バージョンが低そうな***00022***を選びました)

# mkdir /lib/firmware/ath10k
# cp -r ~/QCA9377 /lib/firmware/ath10k
# cd /lib/firmware/ath10k/QCA9377/hw1.0
# cp WLAN.TF.1.0/firmware-5.bin_WLAN.TF.1.0-00002-QCATFSWPZ-5 /lib/firmware/ath10k/QCA9377/hw1.0/firmware-5.bin
# ls -la
drwxr-x— 6 root root 1024 Nov 7 12:08 .
drwxr-x— 3 root root 1024 Nov 6 10:03 ..
drwxr-x— 2 root root 1024 Nov 6 10:07 CNSS.TF.1.0
drwxr-x— 2 root root 1024 Nov 6 10:08 WLAN.TF.1.0
drwxr-x— 2 root root 1024 Nov 6 10:06 WLAN.TF.2.1
-rwxr-x— 1 root root 304308 Nov 6 10:03 board-2.bin
-rwxr-x— 1 root root 8124 Nov 6 10:03 board.bin
-rwxr-x— 1 root root 783336 Nov 7 12:08 firmware-5.bin
drwxr-x— 2 root root 1024 Nov 6 10:03 untested

ホームディレクトリに戻りlsmod。前回エラーが発生したときにリブートしてるのでath10kドライバは綺麗に消えています。

# cd
# lsmod
Module Size Used by
ov5640_camera_mipi 53356 0
mxc_v4l2_capture 24972 1 ov5640_camera_mipi
ipu_bg_overlay_sdc 4175 1 mxc_v4l2_capture
ipu_still 1719 1 mxc_v4l2_capture
ipu_prp_enc 4791 1 mxc_v4l2_capture
ipu_csi_enc 2969 1 mxc_v4l2_capture
adv7180_tvin 8323 0
ipu_fg_overlay_sdc 5059 1 mxc_v4l2_capture
v4l2_int_device 1796 3 ov5640_camera_mipi,adv7180_tvin,mxc_v4l2_capture
snd_soc_fsl_asrc 23760 0

再びインストール。ファームは見つかったみたいですが、微妙なメッセージ***(0140 -> 0142)が出た上でファームウェアロードに失敗というメッセージ。うーん…。

# insmod compat.ko
Loading modules backported from Linux version v4.4.2-0-g1cb8570
Backport generated by backports.git v4.4.2-1-0-gbec4037
# insmod cfg80211.ko
# insmod mac80211.ko
# insmod ath.ko
# insmod ath10k_core.ko
# insmod ath10k_pci.ko
PCI: enabling device 0000:01:00.0 (0140 -> 0142)
ath10k_pci 0000:01:00.0: pci irq msi interrupts 1 irq_mode 0 reset_mode 0
root@nitrogen6x:~# ath10k_pci 0000:01:00.0: failed to receive control response completion, polling..
ath10k_pci 0000:01:00.0: ctl_resp never came in (-110)
ath10k_pci 0000:01:00.0: failed to connect to HTC: -110
ath10k_pci 0000:01:00.0: could not init core (-110)
ath10k_pci 0000:01:00.0: could not probe fw (-110)

ath10kドライバのインストール状態を見てみます。インストール自体はされていますがath10k_pci.koはファームロードに失敗しているからゾンビ状態です。

# lsmod
Module Size Used by
ath10k_pci 31020 0
ath10k_core 248318 1 ath10k_pci
ath 17622 1 ath10k_core
mac80211 363953 1 ath10k_core
cfg80211 213383 3 ath,mac80211,ath10k_core
compat 14986 4 cfg80211,mac80211,ath10k_pci,ath10k_core
ov5640_camera_mipi 53356 0
mxc_v4l2_capture 24972 1 ov5640_camera_mipi
ipu_bg_overlay_sdc 4175 1 mxc_v4l2_capture
ipu_still 1719 1 mxc_v4l2_capture
ipu_prp_enc 4791 1 mxc_v4l2_capture
ipu_csi_enc 2969 1 mxc_v4l2_capture
adv7180_tvin 8323 0
ipu_fg_overlay_sdc 5059 1 mxc_v4l2_capture
v4l2_int_device 1796 3 ov5640_camera_mipi,adv7180_tvin,mxc_v4l2_capture
snd_soc_fsl_asrc 23760 0

ゾンビ状態のath10k_pciをアンインストール(rmmod)し、2つあったfirmware-5.binのうち、新しいバージョン***00023***にします。そして再びホームディレクトリのath10k_pci.koをインストール。微妙なメッセージ***(0140 -> 0142)は出なくなったのですが、そのあとは前回と全く同じエラー。

# rmmod ath10k_pci
# cd /lib/firmware/ath10k/QCA9377/hw1.0/WLAN.TF.1.0
# cp firmware-5.bin_WLAN.TF.1.0-00023-QCATFSWPZ-1 ../firmware-5.bin
# cd
# insmod ath10k_pci.ko
ath10k_pci 0000:01:00.0: pci irq msi interrupts 1 irq_mode 0 reset_mode 0
root@nitrogen6x:~# ath10k_pci 0000:01:00.0: failed to receive control response completion, polling..
ath10k_pci 0000:01:00.0: ctl_resp never came in (-110)
ath10k_pci 0000:01:00.0: failed to connect to HTC: -110
ath10k_pci 0000:01:00.0: could not init core (-110)
ath10k_pci 0000:01:00.0: could not probe fw (-110)

dmesgをfirmwareでgrep。ath10kは出てきません。

# dmesg | grep firmware
imx-sdma 20ec000.sdma: loaded firmware 3.1
usbserial: USB Serial support registered for Keyspan – (without firmware)
egalax_ts 2-0004: Failed to read firmware version
ili210x_i2c 2-0041: Failed to get firmware version, err: -5

lspci -kをやったところ、以前は出てこなかったドライバ名称が出てきました。

# lspci -k
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
Kernel driver in use: pcieport
01:00.0 Network controller: Qualcomm Atheros Device 0042 (rev 31)
Subsystem: AzureWave Device 2a51
        Kernel driver in use: ath10k_pci

pci irq msi interrupts 1 irq_mode 0 reset_mode 0でgoogle検索。ubuntu14.04 – 私のWiFiは機能していませんがヒットしましたが、なんか違う感じ。

続いてath10k_pci 0000:01:00.0: failed to receive control response completion, polling..でgoogle検索。Qualcomm QCA6174 – Ubuntu Forumsがヒットしましたが、これも違う感じ。

うーん…。困りました。

②なぜファームダウンロードに失敗するのか

エラー発生状況を振り返ります。まず”failed to receive control response completion, polling..”に着目した。

# insmod compat.ko
Loading modules backported from Linux version v4.4.2-0-g1cb8570
Backport generated by backports.git v4.4.2-1-0-gbec4037
# insmod cfg80211.ko
# insmod mac80211.ko
# insmod ath.ko
# insmod ath10k_core.ko
# insmod ath10k_pci.ko
ath10k_pci 0000:01:00.0: pci irq msi interrupts 1 irq_mode 0 reset_mode 0
root@nitrogen6x:~# ath10k_pci 0000:01:00.0: failed to receive control response completion, polling..
ath10k_pci 0000:01:00.0: ctl_resp never came in (-110)
ath10k_pci 0000:01:00.0: failed to connect to HTC: -110
ath10k_pci 0000:01:00.0: could not init core (-110)
ath10k_pci 0000:01:00.0: could not probe fw (-110)

”failed to receive control response completion, polling..”でgrepしてみたらhtc.cがヒットしたのでviで開きます。

$ cd /home/pavement1234/backports/backports-4.4.2-1/drivers/net/wireless/ath/ath10k
$ grep “failed to receive control response completion, polling..” *.c
htc.c: ath10k_warn(ar, “failed to receive control response completion, polling..\n”);
$ vi htc.c

該当の文字列が定義されている関数を抜き出しました。エラー要因についてworkaroundが書いてあります。

Googleで和訳してみました。KVM PCIパススルーにすると割込みが伝播されないことがある。みたいな話ですかね。ところでKVM PCIパススルーって何でしょう?

Workaround In some cases the PCI HIF doesn’t receive interrupt for the control response message even if the buffer was completed. It is suspected iomap writes unmasking PCI CE irqs aren’t propagated properly in KVM PCI-passthrough sometimes.

(Google和訳)
【回避策】場合によっては、バッファが完了しても、PCI HIFは制御応答メッセージの割り込みを受信しません。 iomapの書き込みマスク解除PCI CE irqがKVM PCIパススルーで適切に伝播されないことがあると思われます。

KVM PCIパススルーでGoogle検索してみたら、めずらしく日本語サイトがヒット。KVM PCIパススルー (PCI PassThrough)を読みました。仮想PCにPCIを見せる技術であるのはわかるのですが、結局KVMって何?

Google検索したらKVMとはKernel-based Virtual Machineであることが判明。Kernel-based Virtual Machineを読むと、どうも仮想OS的な話みたいですが、今回実機で動かしてるから仮想化は関係ない気がします。

次にタイムアウトを発生させているwait_for_completion_timeoutをgrepしてみましたが呼び出ししかない…。カーネルAPIですね。

$ grep “wait_for_completion_timeout” *.c
ath10k_core.mod.c: { 0x7cf9099, __VMLINUX_SYMBOL_STR(wait_for_completion_timeout) },
core.c: time_left = wait_for_completion_timeout(&ar->target_suspend, 1 * HZ);
debug.c: wait_for_completion_timeout(&ar->debug.fw_stats_complete,
debug.c: time_left = wait_for_completion_timeout(&ar->debug.tpc_complete,
htc.c: time_left = wait_for_completion_timeout(&htc->ctl_resp,
htc.c: wait_for_completion_timeout(&htc->ctl_resp,
htc.c: time_left = wait_for_completion_timeout(&htc->ctl_resp,
htt.c: status = wait_for_completion_timeout(&htt->target_version_received,
mac.c: time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
mac.c: time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
mac.c: wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
mac.c: ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
mac.c: ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
mac.c: ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
thermal.c: time_left = wait_for_completion_timeout(&ar->thermal.wmi_sync,
wmi.c: time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
wmi.c: time_left = wait_for_completion_timeout(&ar->wmi.unified_ready,
wow.c: ret = wait_for_completion_timeout(&ar->target_suspend, 3 * HZ);
wow.c: ret = wait_for_completion_timeout(&ar->wow.wakeup_completed, 3 * HZ);

wait_for_completion_timeoutkernel/sched/completion.cに定義されてる様子。

wait_for_completion_timeoutの中でwait_for_commonが呼ばれてます。

wait_for_commonの中で __wait_for_commonが呼ばれてます。

__wait_for_commonの中でdo_wait_for_commonが呼ばれてます。

do_wait_for_commonはこんな感じ。ウェイト処理ということですね。

次にタイムアウトが発生している関数。ath10k_htc_wait_targetを呼び出してる箇所を調べてみます。core.cで呼ばれてるのでviで開きました。

$ grep “ath10k_htc_wait_target” *.c
core.c: status = ath10k_htc_wait_target(&ar->htc);
htc.c:int ath10k_htc_wait_target(struct ath10k_htc *htc)
$ vi core.c

ath10k_htc_wait_targetが呼ばれている関数を抜き出しましたath10k_htc_wait_targetath10k_hif_startの処理結果を待つ関数のようです。

次にath10k_hif_startをgrepしました(最初*.cで検索したらヒットしないので*.hで検索したらヒット)。hif.hにインライン定義されている様子なのでviで開きます。

$ grep “ath10k_hif_start” *.h
hif.h:static inline int ath10k_hif_start(struct ath10k *ar)
$ vi hif.h

ath10k_hif_startの定義箇所を抜き出しました。startが呼ばれてます。

startでgrep。たくさん出てきましたがpci.cath10k_pci_hif_startがビンゴでしょう。

$ grep “start” *.c
(省略)
pci.c: .start = ath10k_pci_hif_start,
(省略)

ath10k_pci_hif_startを抜き出しました。ath10k_pci_rx_postが呼ばれてます。

ath10k_pci_rx_postからath10k_pci_rx_post_pipeが呼ばれてます。

ath10k_pci_rx_post_pipeから__ath10k_pci_rx_post_bufが呼ばれてます。

__ath10k_pci_rx_post_bufではdev_alloc_skbでskb(ソケットバッファ)を作り、dma_map_singleでDMA領域を獲得(参考:Linuxネットワークドライバの開発)して、__ath10k_ce_rx_post_bufを呼び、dma_unmap_singleでDMA領域を解放してます。

__ath10k_ce_rx_post_bufをgrepしました。ce.cがヒットしたのでviで開きます。

$ grep “__ath10k_ce_rx_post_buf” *.c
ce.c:int __ath10k_ce_rx_post_buf(struct ath10k_ce_pipe *pipe, void *ctx, u32 paddr)
ce.c: ret = __ath10k_ce_rx_post_buf(pipe, ctx, paddr);
pci.c: ret = __ath10k_ce_rx_post_buf(ce_pipe, skb, paddr);
pci.c: ret = __ath10k_ce_rx_post_buf(ce_diag, NULL, ce_data);
pci.c: ret = __ath10k_ce_rx_post_buf(ce_diag, NULL, address);
$ vi ce.c

__ath10k_ce_rx_post_bufを抜き出します。__ath10k_ce_rx_post_bufからath10k_ce_dest_ring_write_index_setが呼ばれてます。

ath10k_ce_dest_ring_write_index_setからath10k_pci_write32が呼ばれてます。

ath10k_pci_write32をgrep。たくさんヒットしますがpci.cに定義されてるようです。pci.cをviで開きます。

$ grep “ath10k_pci_write32” *.c
(省略)
pci.c:void ath10k_pci_write32(struct ath10k *ar, u32 offset, u32 value)
(省略)
$ vi pci.c

ath10k_pci_write32ではath10k_pci_wakeでPCI起床しiowrite32を実行しath10k_pci_sleepでPCI休眠させます。ここが末端でしょう。

さて、いろいろ見てみた結果、PCIe経由で無線チップにデータを書き込みしたものの、チップから応答がなくて止まっちゃったみたいな感じです。

③一旦立ち止まる

backportsでやったことを整理してみます(詳細は上を参照)。

①backportsのソースコード(backports-5.2.8-1)をダウンロードした(成功
②LinuxPCでbackports-5.2.8-1のmake menuconfigを実行しカーネルコンフィグを変更した(成功
③LinuxPCでbackports-5.2.8-1のmakeを実行しドライバを生成した(成功
※但し、ath10kドライバがビルドされなかった。
④LinuxPCでbackports-5.2.8-1のmake defconfig-ath10kを実行しath10kがターゲットに含まれるようにしてmakeを実行しドライバを生成した(成功
※ath10kドライバがビルドされるようになった。但し、ath10kドライバがPCに挿さらないため動作確認はせず。
⑤Yoctoの環境変数を読み込み、クロスコンパイラでbackportss-5.2.8-1のmakeを実行しドライバを生成した(失敗
※backportsはYoctoの環境変数ではなくCROSS_COMPILE、ARCH、KLIB、KLIB_BUILDを指定することを推奨している。
⑥CROSS_COMPILE、ARCH、KLIB、KLIB_BUILDを設定して、クロスコンパイラでbackports-5.2.8-1のmakeを実行しドライバを生成した(成功
※当初、KLIB、KLIB?BUILDの設定をミスっていたが正しい設定を見つけた。
※但し、ath10kドライバがビルドされなかった。
⑦CROSS_COMPILE、ARCH、KLIB、KLIB_BUILDを設定して、クロスコンパイラでbackports-5.2.8-1のmake defconfig-ath10kを行うことでath10kドライバをビルドできるようにした(成功
※試行錯誤したところ、backports-4.4.2-1以下のバージョンにすることでBD-SABRE-LITE向けカーネル3.14のath10kドライバがビルドできることを確認した。
※ath10kドライバがビルドされるようになり、実機にインストールした。
⑧実機にath10kドライバをインストールした(失敗
※ath10k_pci.koをインストールするときにQCA9377ファーム読み込みでエラー発生(ファイルがない)。
⑨実機にath10kファームをインストールしてath10kドライバをインストールした(失敗
※ath10k_pci.koをインストールするときにQCA9377ファーム読み込みでエラー発生(ファイルはあるがモジュールから応答が来ない)。

④デバイスを変えてみる

以下、【右】がQCA9377(miniPCIe)ですがドライバ・ファームインストールしたときにモジュールが応答を返してくれません。そのため【中】のQCA6174(M.2)を【左】のM.2からminiPCIeに変換するアダプタにつなぎ、BD-SABRE-LITEに接続しました。

BD-SABRE-LITEを起動し、lspciを見てみます。ハードウェアは認識した様子。

# lspci -k
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
Kernel driver in use: pcieport
01:00.0 Network controller: Qualcomm Atheros Device 003e (rev 32)
Subsystem: Lenovo Device 0827

ドライバたちをインストール。QCA6174のファームがないと言ってます。インストールしてないから当たり前ですね。

# insmod ./compat.ko
Loading modules backported from Linux version v4.4.2-0-g1cb8570
Backport generated by backports.git v4.4.2-1-0-gbec4037
# insmod ./cfg80211.ko
# insmod ./mac80211.ko
# insmod ./ath.ko
# insmod ./ath10k_core.ko
# insmod ./ath10k_pci.ko
ath10k_pci 0000:01:00.0: pci irq msi interrupts 1 irq_mode 0 reset_mode 0
# ath10k_pci 0000:01:00.0: could not fetch firmware file ‘ath10k/QCA6174/hw3.0/firmware-5.bin’: -2
ath10k_pci 0000:01:00.0: could not fetch firmware file ‘ath10k/QCA6174/hw3.0/firmware-4.bin’: -2
ath10k_pci 0000:01:00.0: could not fetch firmware file ‘ath10k/QCA6174/hw3.0/firmware-3.bin’: -2
ath10k_pci 0000:01:00.0: could not fetch firmware file ‘ath10k/QCA6174/hw3.0/firmware-2.bin’: -2
ath10k_pci 0000:01:00.0: could not fetch firmware (-2)
ath10k_pci 0000:01:00.0: could not fetch firmware files (-2)
ath10k_pci 0000:01:00.0: could not probe fw (-2)

全ドライバをアンインストールしておきます。

# rmmod ath10k_pci
# rmmod ath10k_core
# rmmod ath
# rmmod mac80211
# rmmod cfg80211
# rmmod compat

QCA6174のファームをSD-SABRE-LITEの/lib/firmware/ath10k/QCA6174にコピー。QCA6174に何が入ってるか見てみました。予想通りhw3.0/firmware-5.binがありません。

# cd /lib/firmware/ath10k/QCA6174/hw3.0
# ls -la
drwxr-x— 8 root root 1024 Nov 7 13:31 .
drwxr-x— 4 root root 1024 Nov 7 13:25 ..
drwxr-x— 2 root root 1024 Nov 7 13:25 4.4
drwxr-x— 2 root root 4096 Nov 7 13:25 4.4.1
drwxr-x— 2 root root 1024 Nov 7 13:25 4.4.1.c1
drwxr-x— 2 root root 1024 Nov 7 13:25 4.4.1.c2
drwxr-x— 2 root root 1024 Nov 7 13:25 4.4.1.c3
-rwxr-x— 1 root root 567608 Nov 7 13:25 board-2.bin
-rwxr-x— 1 root root 8124 Nov 7 13:25 board.bin
-rwxr-x— 1 root root 733784 Nov 7 13:25 firmware-4.bin_WLAN.RM.2.0-00180-QCARMSWPZ-1
-rwxr-x— 1 root root 79801 Nov 7 13:25 notice.txt_WLAN.RM.2.0-00180-QCARMSWPZ-1
drwxr-x— 2 root root 1024 Nov 7 13:25 sdio-4.4.1

ファームがどこにあるか見てみました。No5のファームは1つだけです。

/lib/firmware/ath10k/QCA6174/hw2.1./firmware-5.bin_SW_RM.1.1.1-00157-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4/firmware-6.bin_WLAN.RM.4.4-00022-QCARMSWPZ-2
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00008-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00014-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00026-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00051-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00058-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00065-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00079-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00102-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00110-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00119-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00124-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00128-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00132-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00140-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00031-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00035-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00037-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00038-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00041-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00042-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00045-QCARMSWP-3
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00049-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c2/firmware-6.bin_RM.4.4.1.c2-00041-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c2/firmware-6.bin_RM.4.4.1.c2-00057-QCARMSWP-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_RM.4.4.1.c3-00013-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00030
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00031
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00035
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00037-
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00038
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00049-
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00050
/lib/firmware/ath10k/QCA6174/hw3.0/4.4.1.c3/firmware-6.bin_WLAN.RM.4.4.1.c3-00058

/lib/firmware/ath10k/QCA6174/hw3.0/firmware-4.bin_WLAN.RM.2.0-00180-QCARMSWPZ-1
/lib/firmware/ath10k/QCA6174/hw3.0/sdio-4.4.1/firmware-sdio-6.bin_WLAN.RMH.4.4.1-00011-QCARMSWP-2
/lib/firmware/ath10k/QCA6174/hw3.0/sdio-4.4.1/firmware-sdio-6.bin_WLAN.RMH.4.4.1-00017-QCARMSWPZ-2

一致したファームを/lib/firmware/ath10k/QCA6174/hw3.0/firmware-5.binに配置して、再度ドライバをインストール。またもやタイムアウトエラー(firmware-6.binとかfirmware-4.binをfirmware-5.binに書き換えてやってみましたが結果変わらず。

# insmod ./compat.ko
Loading modules backported from Linux version v4.4.2-0-g1cb8570
Backport generated by backports.git v4.4.2-1-0-gbec4037
# insmod ./cfg80211.ko
# insmod ./mac80211.ko
# insmod ./ath.ko
# insmod ./ath10k_core.ko
# insmod ./ath10k_pci.ko
ath10k_pci 0000:01:00.0: pci irq msi interrupts 1 irq_mode 0 reset_mode 0
# # ath10k_pci 0000:01:00.0: failed to receive control response completion, polling..
ath10k_pci 0000:01:00.0: ctl_resp never came in (-110)
ath10k_pci 0000:01:00.0: failed to connect to HTC: -110
ath10k_pci 0000:01:00.0: could not init core (-110)
ath10k_pci 0000:01:00.0: could not probe fw (-110)

う~ん。HWを変えてもダメってことはLinuxカーネル(PCIeのMSI、MSI-X割込み?)、backportsドライバあたりをもう一度疑わなくてはならないのでしょうか。

まとめ

中途半端で申し訳ないのですがこのまま進めても解決しなさそうなので、一旦手詰まりということで検討STOPします。

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

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