Openwrt从入门到放弃

我用Openwrt也有相当一段时间了,并且零零散散的写过不少东西,本文整合了以前几篇文章,算是一站式攻略。

关于OpenWrt

  • 全称:Open Wireless Router
  • 是一个Linux发行版
  • 能够跑在很多路由器上
  • 相比原厂固件,可以完全掌控路由器,自行安装软件包

入坑原因

我用的猫(modem)是TP-Link的TC-W7960,这个设备有点特殊,是猫(modem)和路由器一体的。但是这个猫的WIFI只有2.4GHz,不能跑满我的带宽,所以在2019年黑五另外买了TP-Link Archer A7 v5,税后价格是$35。在美国,这个价格买全新路由器感觉也还可以了,不过当然没有国内实惠。碰巧我有台激光打印机,想连接到路由器实现无线打印功能,但是TP-Link原厂固件没法实现这个需求。后来我发现了Openwrt这个东西,就打开了新世界的大门。

安装

首先,在[OpenWrt Wiki] Table of Hardware查看支持的路由器型号,然后进入对应型号的Wiki页面。下面以我的Archer A7 v5为例。

进入[OpenWrt Wiki] TP-Link Archer A7 v5之后,就能找到所有的相关信息了。基本上就两种安装方法,一种是直接在原厂固件的升级页面安装,另一种就是通过TFTP来安装。

注意:有些型号可能很难甚至无法恢复到原厂固件,所以刷机前三思而后行。

设置密码

有两种方式可以登录安装了OpenWrt的路由器,分别是命令行(ssh)和WebUI(LuCI)。值得注意的是,路由器默认没有密码,并且不会自动开启WIFI,所以这里需要接一根网线进行设置。

ssh

进去之后应该会看到类似下面这样的内容,然后要通过passwd命令设置密码。注意,这里密码在输入的时候是看不到的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> ssh root@192.168.1.1
BusyBox v1.30.1 () built-in shell (ash)

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 19.07.7, r11306-c4a6851c72
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------

LuCI

浏览器直接访问192.168.1.1,然后不需要输入密码,直接点登录,就进去了。接下来在 System(系统)> Administration(管理权)> Router Password(路由器密码)可以直接修改密码。

一般来说OpenWrt都是自带LuCI的,如果没有,可以用下面命令安装。

1
2
3
4
5
opkg update
opkg install luci
// 如果要安装中文语言包,还要额外运行下面命令
// 因为语言设置默认是auto,所以安装完语言包之后就会自动切换成中文
opkg install luci-i18n-base-zh-cn

开启WIFI

WIFI最好通过图形界面(LuCI)开启,相关设置在 Network(网络)> Wireless(无线)里头。

选择启用之后,记得进入 Edit(编辑)> Interface Configuration(接口配置)> Wireless Security(无线安全)来设置密码。

WIFI名在 Interface Configuration(接口配置)> General Setup(常规设置)> ESSID 修改。

opkg包管理

OpenWrt通过opkg来管理软件包,可以在LuCI的 System(系统)> Software 进行管理,或者直接使用命令行操作。

opkg命令行的用法可以参考[OpenWrt Wiki] Opkg package manager

基本用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 安装软件包
opkg update
opkg install <package>

// 卸载软件包
opkg remove <package>

// 查看全部软件包(可以自行用 grep / awk 进行筛选)
opkg list

// 查看已安装软件包
opkg list-installed

// 查看可升级软件包
opkg list-upgradable

个人建议能正常运作就不要瞎折腾。

安装打印服务

如果你有一台有线打印机,那么可以把打印机直接连接到路由器上,从而实现无线打印。

路由器端

先安装下面这几个模块

1
opkg install kmod-usb-printer p910nd luci-app-p910nd

然后把打印机用USB连到路由器上,输入dmesg | grep printer,如果返回类似下面这个就代表打印机被识别了。

1
[   12.358708] usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0062

确认打印机能够被识别后,记得重启路由器!

接下来登入LuCI,进入“服务” > “p910nd - Printer server”。

  • enable打勾
  • 如果默认的设备(/dev/usb/lp0)不对,可以自行修改(ls /dev/usb/lp*可以查看打印机是否被识别)
  • 接口保持“未指定”,无需修改
  • 端口也不需要改,就是默认的9100
  • Bidirectional mode打勾

到这里,路由器这边就配置完成了。

电脑端

Windows 10

  • 控制面板 > 硬件和声音 > 设备和打印机
  • 添加打印机
  • 点击“我需要的打印机不在列表中”
  • 选从TCP/IP添加
    • 这步之后会要求更多信息,选自定义
  • 添加标准TCP/IP端口(Standard TCP/IP Port)
    • 端口名随意(我写的打印机型号)
    • 打印机名或IP地址:192.168.1.1
    • 协议(Protocol):Raw
    • 端口(Port Number):9100
  • 安装打印机驱动

Linux

Linux则是通过CUPS配置,需要准备打印机的ppd文件,打印机地址是socket://192.168.1.1:9100

恢复出厂设置

注意:出厂设置指的是重置OpenWrt系统,并不能恢复原厂固件。

OpenWrt使用的是overlayfs,所有的修改都是在/overlay目录下,因此可以很容易的还原。直接运行firstboot就可以了。

跑完之后,就直接输入reboot,然后ssh就会断开,稍等片刻就可以尝试再次连接。因为恢复了出厂设置,所以登录密码也会被清除。

系统升级

升级OpenWrt是很容易的,可以通过ssh或者LuCI操作。

首先在对应设备的Wiki页面找到带有 sysupgrade 的升级包。

ssh

使用wget下载升级包,如下所示。

1
root@OpenWrt:~# wget http://downloads.openwrt.org/releases/19.07.1/targets/ath79/generic/openwrt-19.07.1-ath79-generic-tplink_archer-a7-v5-squashfs-sysupgrade.bin

然后就使用sysupgrade命令进行升级。

1
2
3
4
5
root@OpenWrt:~# sysupgrade -v openwrt-19.07.1-ath79-generic-tplink_archer-a7-v5-squashfs-sysupgrade.bin 
(篇幅所限,省略对本文无意义的输出内容。。。)
Commencing upgrade. Closing all shell sessions.
Connection to 192.168.1.1 closed by remote host.
Connection to 192.168.1.1 closed.

稍等片刻,就可以再次尝试登录OpenWrt了。

LuCI

在电脑上直接下载升级包,然后在 System(系统)> Backup / Flash Firmware(备份/升级)> Flash new firmware image(刷写新的固件)上传固件进行升级。

问题排查

出现问题之后千万不要慌,先看日志。

在 System(系统)菜单可以找到 System Log(系统日志)和 Kernel Log(内核日志)。如果发现了报错信息,可以复制出来上网搜下,大概率别人已经遇到过了。如果没找到相关问题,可以在OpenWrt论坛上面发帖求助。

似乎是这俩型号特有的问题,表现就是全部设备的WiFi被断开,然后过10秒左右自动恢复。完整日志如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.203769] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.306164] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.408586] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.510985] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.613385] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.715785] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.818187] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:51 2021 kern.warn kernel: [2750260.920592] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.022992] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.125391] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.227795] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.330184] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.432594] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.535001] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.637397] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.739808] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.842191] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:52 2021 kern.warn kernel: [2750261.944618] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.047010] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.149411] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.251815] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.354220] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.456724] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.559017] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.661421] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.763833] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:53 2021 kern.warn kernel: [2750262.866227] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750262.968634] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.071038] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.173435] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.185820] ath10k_pci 0000:00:00.0: Cannot communicate with firmware, previous wmi cmds: 36904:274997163 36954:274997100 36904:274997090 36904:274997088, jiffies: 274997408, attempting to fake crash and restart firmware, dev-flags: 0x42
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.208099] ath10k_pci 0000:00:00.0: failed to send wmi nop: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.214587] ath10k_pci 0000:00:00.0: could not request stats (type -268435456 ret -143 specifier 1)
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.224477] ath10k_pci 0000:00:00.0: failed to send pdev bss chan info request: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.234778] ath10k_pci 0000:00:00.0: failed to set beacon mode for vdev 0: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.242615] ath10k_pci 0000:00:00.0: failed to set dtim period for vdev 0: -143
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.250709] ath10k_pci 0000:00:00.0: firmware crashed! (guid 0b8c75c5-c47d-46de-8864-73c4d3092d00)
Sun Nov 28 13:53:54 2021 kern.info kernel: [2750263.260233] ath10k_pci 0000:00:00.0: qca988x hw2.0 target 0x4100016c chip_id 0x043202ff sub 0000:0000
Sun Nov 28 13:53:54 2021 kern.info kernel: [2750263.269947] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
Sun Nov 28 13:53:54 2021 kern.info kernel: [2750263.282073] ath10k_pci 0000:00:00.0: firmware ver 10.1-ct-8x-__fW-022-ecad3248 api 2 features wmi-10.x,has-wmi-mgmt-tx,mfp,txstatus-noack,wmi-10.x-CT,ratemask-CT,regdump-CT,txrate-CT,flush-all-CT,pingpong-CT,ch-regs-CT,nop-CT,set-special-CT,get-temp-CT,tx-rc-CT,cust-stats-CT,retry-gt2-CT,txrate2-CT,beacon-cb-CT,wmi-block-ack-CT crc32 3e4cf97f
Sun Nov 28 13:53:54 2021 kern.info kernel: [2750263.313602] ath10k_pci 0000:00:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08
Sun Nov 28 13:53:54 2021 kern.info kernel: [2750263.321340] ath10k_pci 0000:00:00.0: htt-ver 2.1 wmi-op 2 htt-op 2 cal file max-sta 128 raw 0 hwcrypto 1
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.331391] ath10k_pci 0000:00:00.0: firmware register dump:
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.337425] ath10k_pci 0000:00:00.0: [00]: 0x00940750 0x00400C00 0x00980000 0x009AF0DC
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.345787] ath10k_pci 0000:00:00.0: [04]: 0x009AF148 0x009AF264 0x00941B6C 0x00941B20
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.354139] ath10k_pci 0000:00:00.0: [08]: 0x00941B00 0x009423A4 0x009422DC 0x009422C4
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.362501] ath10k_pci 0000:00:00.0: [12]: 0x00941B90 0x009423F4 0x009423D4 0x009423DC
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.370866] ath10k_pci 0000:00:00.0: [16]: 0x009423E4 0x009423EC 0x00942888 0x00942520
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.379230] ath10k_pci 0000:00:00.0: [20]: 0x009424FC 0x0094241C 0x00942540 0x00942498
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.387588] ath10k_pci 0000:00:00.0: [24]: 0x00942450 0x0094250C 0x009424D0 0x00942750
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.395945] ath10k_pci 0000:00:00.0: [28]: 0x00942798 0x00942844 0x009428C4 0x00942594
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.404298] ath10k_pci 0000:00:00.0: [32]: 0x0094258C 0x00942C28 0x00942F4C 0x00942F7C
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.412658] ath10k_pci 0000:00:00.0: [36]: 0x00942F90 0x00942FE4 0x00942FF8 0x00943040
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.421016] ath10k_pci 0000:00:00.0: [40]: 0x0094077C 0x00940790 0x00943084 0x00942F00
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.429376] ath10k_pci 0000:00:00.0: [44]: 0x009AF290 0x00942A80 0x00942D40 0x00942D64
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.437735] ath10k_pci 0000:00:00.0: [48]: 0x00942D78 0x00942D9C 0x00957E18 0x00957E28
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.446094] ath10k_pci 0000:00:00.0: [52]: 0x00957E20 0x00940788 0x009430EC 0x00000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.454446] ath10k_pci 0000:00:00.0: [56]: 0x00000000 0x00000000 0x00000000 0x00000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.462804] ath10k_pci 0000:00:00.0: Copy Engine register dump:
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.469111] ath10k_pci 0000:00:00.0: [00]: 0x00057400 8 8 3 3
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.475952] ath10k_pci 0000:00:00.0: [01]: 0x00057800 31 31 65 66
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.482782] ath10k_pci 0000:00:00.0: [02]: 0x00057c00 0 0 111 0
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.489624] ath10k_pci 0000:00:00.0: [03]: 0x00058000 18 18 18 18
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.496462] ath10k_pci 0000:00:00.0: [04]: 0x00058400 6645 6645 36 252
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.503471] ath10k_pci 0000:00:00.0: [05]: 0x00058800 30 30 336 350
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.510317] ath10k_pci 0000:00:00.0: [06]: 0x00058c00 5 5 5 5
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.517161] ath10k_pci 0000:00:00.0: [07]: 0x00059000 0 0 0 0
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.524103] ath10k_pci 0000:00:00.0: debug log header, dbuf: 0x411aa8 dropped: 0
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.532082] ath10k_pci 0000:00:00.0: [0] next: 0x411ac0 buf: 0x40f90c sz: 1500 len: 480 count: 30 free: 0
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.542225] ath10k_pci 0000:00:00.0: ath10k_pci ATH10K_DBG_BUFFER:
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.548799] ath10k: [0000]: AA0BDC07 204CFC0B 08000000 0B000000 BE0BDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.558326] ath10k: [0008]: D30BDC07 204CFC0B 08000000 0B000000 E70BDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.567851] ath10k: [0016]: FC0BDC07 204CFC0B 08000000 0B000000 100CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.577378] ath10k: [0024]: 250CDC07 204CFC0B 08000000 0B000000 390CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.586897] ath10k: [0032]: 4E0CDC07 204CFC0B 08000000 0B000000 620CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.596424] ath10k: [0040]: 770CDC07 204CFC0B 08000000 0B000000 8B0CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.605949] ath10k: [0048]: A00CDC07 204CFC0B 08000000 0B000000 B40CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.615467] ath10k: [0056]: C90CDC07 204CFC0B 08000000 0B000000 DD0CDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.624988] ath10k: [0064]: F20CDC07 204CFC0B 08000000 0B000000 060DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.634513] ath10k: [0072]: 1B0DDC07 204CFC0B 08000000 0B000000 2F0DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.644038] ath10k: [0080]: 440DDC07 204CFC0B 08000000 0B000000 580DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.653562] ath10k: [0088]: 6D0DDC07 204CFC0B 08000000 0B000000 810DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.663086] ath10k: [0096]: 960DDC07 204CFC0B 08000000 0B000000 AA0DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.672612] ath10k: [0104]: BF0DDC07 204CFC0B 08000000 0B000000 D30DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.682135] ath10k: [0112]: E80DDC07 204CFC0B 08000000 0B000000 FC0DDC07 204CFC0B 08000000 0B000000
Sun Nov 28 13:53:54 2021 kern.err kernel: [2750263.691657] ath10k_pci 0000:00:00.0: ATH10K_END
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.696593] ath10k_pci 0000:00:00.0: [1] next: 0x411aa8 buf: 0x40fefc sz: 1500 len: 0 count: 0 free: 0
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.711174] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.719087] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.726943] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.734751] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.742611] ath10k_pci 0000:00:00.0: SWBA overrun on vdev 0, skipped old beacon
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.763620] ath10k_pci 0000:00:00.0: failed to set cts protection for vdev 0: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.771680] ath10k_pci 0000:00:00.0: failed to recalculate rts/cts prot for vdev 0: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.780252] ath10k_pci 0000:00:00.0: failed to set preamble for vdev 0: -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.787729] ath10k_pci 0000:00:00.0: failed to set mgmt tx rate -143
Sun Nov 28 13:53:54 2021 kern.warn kernel: [2750263.834240] ath10k_pci 0000:00:00.0: failed to transmit management frame via WMI: -143
Sun Nov 28 13:53:55 2021 kern.warn kernel: [2750263.940262] ath10k_pci 0000:00:00.0: removing peer, cleanup-all, deleting: peer faa4cef1 vdev: 0 addr: 3c:6a:a7:93:2a:c4
Sun Nov 28 13:53:55 2021 kern.warn kernel: [2750263.951823] ath10k_pci 0000:00:00.0: removing peer, cleanup-all, deleting: peer 2deeafc4 vdev: 0 addr: 74:e2:0c:ac:46:24
Sun Nov 28 13:53:55 2021 kern.warn kernel: [2750263.963357] ath10k_pci 0000:00:00.0: removing peer, cleanup-all, deleting: peer f35f1b0d vdev: 0 addr: 44:5e:cd:b1:9c:96
Sun Nov 28 13:53:55 2021 kern.warn kernel: [2750263.974856] ath10k_pci 0000:00:00.0: removing peer, cleanup-all, deleting: peer ac4a0710 vdev: 0 addr: fc:49:2d:40:62:11
Sun Nov 28 13:53:55 2021 kern.warn kernel: [2750263.986359] ath10k_pci 0000:00:00.0: removing peer, cleanup-all, deleting: peer aa7968b7 vdev: 0 addr: 98:da:c4:0a:7d:23
Sun Nov 28 13:53:55 2021 kern.info kernel: [2750264.160387] ieee80211 phy0: Hardware restart was requested
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.136442] ath10k_pci 0000:00:00.0: 10.1 wmi init: vdevs: 16 peers: 127 tid: 256
Sun Nov 28 13:53:56 2021 kern.info kernel: [2750265.154051] ath10k_pci 0000:00:00.0: wmi print 'P 128 V 8 T 410'
Sun Nov 28 13:53:56 2021 kern.info kernel: [2750265.160725] ath10k_pci 0000:00:00.0: wmi print 'msdu-desc: 1424 sw-crypt: 0 ct-sta: 0'
Sun Nov 28 13:53:56 2021 kern.info kernel: [2750265.169220] ath10k_pci 0000:00:00.0: wmi print 'alloc rem: 24984 iram: 38672'
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.237998] ath10k_pci 0000:00:00.0: pdev param 0 not supported by firmware
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.245750] ath10k_pci 0000:00:00.0: set-coverage-class, phyclk: 88 value: 0
Sun Nov 28 13:53:56 2021 kern.info kernel: [2750265.254112] ath10k_pci 0000:00:00.0: rts threshold -1
Sun Nov 28 13:53:56 2021 kern.err kernel: [2750265.271405] ath10k_pci 0000:00:00.0: Invalid state: 3 in ath10k_htt_tx_32, warning will not be repeated.
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.281432] ------------[ cut here ]------------
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.286475] WARNING: CPU: 0 PID: 15852 at target-mips_24kc_musl/linux-ath79_generic/ath10k-ct-regular/ath10k-ct-2021-09-22-e6a7d5b5/ath10k-5.10/htt_tx.c:1490 ieee80211_is_robust_mgmt_frame_tx+0xba8/0xc24 [ath10k_core]
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.306575] Modules linked in: ath9k ath9k_common pppoe ppp_async iptable_nat ath9k_hw ath10k_pci ath10k_core ath xt_state xt_nat xt_conntrack xt_REDIRECT xt_MASQUERADE xt_FLOWOFFLOAD xt_CT pppox ppp_generic nf_nat nf_flow_table_hw nf_flow_table nf_conntrack mac80211 ipt_REJECT cfg80211 xt_time xt_tcpudp xt_multiport xt_mark xt_mac xt_limit xt_comment xt_TCPMSS xt_LOG usblp slhc nf_reject_ipv4 nf_log_ipv4 nf_defrag_ipv6 nf_defrag_ipv4 iptable_mangle iptable_filter ip_tables hwmon crc_ccitt compat ledtrig_usbport nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 sha256_generic libsha256 seqiv jitterentropy_rng drbg hmac ghash_generic gf128mul gcm ctr cmac ccm fsl_mph_dr_of ehci_platform ehci_fsl ehci_hcd gpio_button_hotplug usbcore nls_base usb_common aead cryptomgr crypto_null crypto_hash
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.383875] CPU: 0 PID: 15852 Comm: kworker/0:2 Not tainted 5.4.155 #0
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.390926] Workqueue: events_freezable 0x86c00118
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.396068] Stack : 85869c80 877adcac 00000009 4000001e 86f48c30 800be140 80623e78 00000017
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.404879] 85869cbc 00000000 80616d54 85915b04 877adcac 00000001 85915ad8 95cb7e69
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.413696] 00000000 00000000 806d64a0 0000044d 00000000 00000000 20307838 36633030
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.422510] 0000044d 859159e3 ffffffff ffffffff 00000000 00000000 00000000 877adcac
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.431317] 00000009 4000001e 86f48c30 87ec6070 00000003 8032d470 00000000 80820000
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.440125] ...
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.442825] Call Trace:
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.445541] [<8006970c>] show_stack+0x30/0x100
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.450317] [<80084fe8>] __warn+0xc0/0x10c
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.454721] [<80085090>] warn_slowpath_fmt+0x5c/0xac
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.460096] [<877adcac>] ieee80211_is_robust_mgmt_frame_tx+0xba8/0xc24 [ath10k_core]
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.468301] [<87782308>] 0x87782308
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.472090] ---[ end trace 8d6ffe41140f20d1 ]---
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.477046] ath10k_pci 0000:00:00.0: failed to transmit packet, dropping: -19
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.484600] ath10k_pci 0000:00:00.0: failed to submit frame: -19
Sun Nov 28 13:53:56 2021 kern.warn kernel: [2750265.490992] ath10k_pci 0000:00:00.0: failed to push frame: -19
Sun Nov 28 13:53:56 2021 kern.info kernel: [2750265.497223] ath10k_pci 0000:00:00.0: device successfully recovered

很明显,固件崩溃了,然后自动重启,那具体的表现当然是设备掉线咯。这种问题,复制报错第一行内容,然后搜论坛,大概率有人踩过坑了~

果不其然,很快就找到了一些相关帖子:

看起来,这里有两种固件,一种是原厂的闭源驱动(Ath10k),另一种是Candela Technologies的改版驱动(Ath10k-ct)。然而不知道从什么时候开始,Openwrt就把默认的驱动从Ath10k换成了Ath10k-ct,然后一些型号就出了奇奇怪怪的毛病。所以把驱动手动换回去就完事了。。。

1
2
3
4
opkg update
opkg remove ath10k-firmware-qca988x-ct kmod-ath10k-ct
opkg install ath10k-firmware-qca988x kmod-ath10k
reboot

救砖

OpenWrt还是比较经得起折腾的,万一弄坏了,也还有救。不过如果变砖(无法进入系统),那就稍微有点麻烦了。

一般来说,bootloader不会被破坏,所以可以通过TFTP(Trivial File Transfer Protocol)来传输固件。关于TFTP的使用方法,可以看[OpenWrt Wiki] Setting up a TFTP server for TFTP Recovery/Install

TFTP服务端有很多,这里推荐几个:

  • Windows
    • Solarwinds TFTP server
    • Tftpd64 / Tftpd32
  • Linux
    • tftpd-hpa

Windows上的TFTP服务端操作比较友好,所以这里单独写下Linux上的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 修改配置文件来指定ip地址
sudo nano /etc/dhcpcd.conf

// 重启网卡
sudo ifconfig eth0 down
sudo ifconfig eth0 up

// 检查69端口(查看tftp server是否启动)
sudo netstat -tupena | grep :69

// 重启tftpd-hpa
sudo systemctl restart tftpd-hpa

// 修改tftpd-hpa配置
sudo nano /etc/default/tftpd-hpa

// 查看tftpd-hpa日志
tail -n 100 /var/log/syslog | grep tftpd

如果TFTP都救不回来,那基本只能拆机了。如果真走到这一步,除非你有成套的工具,否则还是建议直接买个新的好了。。。