labunix's blog

labunixのラボUnix

動くには動くけど、エラーログが結構でるので無線LANドライバを入れ替えてみる[未解決]

■動くには動くけど、エラーログが結構でるので無線LANドライバを入れ替えてみる[未解決]
※結果的に何も変わらなかった

 Debian bookwormで無線LANを使用する
 https://labunix.hateblo.jp/entry/20231021/1697881875

■対象はdebian bookworm 12.2

$ cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

$ lsb_release -d
No LSB modules are available.
Description:	Debian GNU/Linux 12 (bookworm)

$ dpkg -l | awk '$3 ~ /deb1[0-2]u/&&$2 ~ /^base/ && $1 ~ /ii/'
ii  base-files                            12.4+deb12u2                         amd64        Debian base system miscellaneous files

■通常はアーカイブエリアにあるnon-free-firmwareを使用する

 https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.ja.html#archive-areas

■2ヶ月前にいくつかのエラーが修正されていそうなところを見つけたので入れ替えてみる

 rtw8852b.c
 https://github.com/lwfinger/rtw89/commit/0437ffbfb9093a263817e56db7f1378ef508880a

■無線LANドライバの入れ替え
 「make」前には「rtw_8852be.ko」が存在しないので、既存との比較は「make」後

$ git clone https://github.com/lwfinger/rtw89.git
$ cd rtw89
$ grep 8852be Makefile 
obj-m += rtw_8852be.o
rtw_8852be-y := rtw8852be.o
	@$(KSRC)/scripts/sign-file sha256 MOK.priv MOK.der rtw_8852be.ko

$ make

$ cmp ~/temp/rtw89/rtw_8852be.ko /usr/lib/modules/6.1.0-13-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw_8852be.ko
/home/labunix/temp/rtw89/rtw_8852be.ko /usr/lib/modules/6.1.0-13-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw_8852be.ko 異なります: バイト 41、行 1

$ sudo make install 
make -C /lib/modules/6.1.0-13-amd64/build M=/home/labunix/temp/rtw89 modules
make[1]: ディレクトリ '/usr/src/linux-headers-6.1.0-13-amd64' に入ります
make[1]: ディレクトリ '/usr/src/linux-headers-6.1.0-13-amd64' から出ます
Install rtw89 SUCCESS

$ sudo modinfo rtw_8852be
filename:       /lib/modules/6.1.0-13-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw_8852be.ko
license:        Dual BSD/GPL
description:    Realtek 802.11ax wireless 8852BE driver
author:         Realtek Corporation
alias:          pci:v000010ECd0000B85Bsv*sd*bc*sc*i*
alias:          pci:v000010ECd0000B852sv*sd*bc*sc*i*
depends:        rtw89pci,rtw_8852b
retpoline:      Y
name:           rtw_8852be
vermagic:       6.1.0-13-amd64 SMP preempt mod_unload modversions 

■システムの再起動でKernelの読み直し

$ sudo shutdown -r now && exit

■結局変わらなかった、エラーの内容
 まあ、気持ち悪いけど動くからいいか。。

$ sudo awk '$5 ~ /rtw89_8852be/{if(/ERR/){a[substr($1,1,10)"E"]+=$1}else{a[substr($1,1,10)"I"]+=$1}}END{for(n in a){print n,a[n] | "sort -V -k 1"}}' /var/log/syslog{,.1}
2023-10-25E 4938143
2023-10-25I 3542273
2023-10-26E 3398640
2023-10-26I 2427600
2023-10-27E 1019592
2023-10-27I 728280
2023-10-28E 6004264
2023-10-28I 4288760
2023-10-29E 6004264
2023-10-29I 4288760

■kernelが以下の形式で出すエラー。最後の8方の16進数を4(0x含めて6文字)にまとめて集計してみる

$ sudo awk '/\[ERR\]fw PC = 0xb89f/{for(a=3;a<=NF;a++){printf "%s ",$a}}END{printf "\n"}' /var/log/syslog{,.1}
kernel: [153012.136396] rtw89_8852be 0000:03:00.0: [ERR]fw PC = 0xb89ff3e9 

$ echo -n "b89ff3e9" | wc -c
8

$ sudo awk '/\[ERR\]fw PC = 0x/{a[substr($NF,1,6)]+=1}END{for(n in a){print n,a[n] | "sort -V"}}' /var/log/syslog{,.1}
0xb89a 1410
0xb89b 2
0xb89f 1
0xb890 186
0xb892 136
0xb893 1092
0xb897 195
0xb898 5954
0xb899 8
0xbfc0 1

■以下は件数の違いがあるだけで、毎回出ているエラー

$ sudo awk -v hostname=$(hostname -s) \
    '($5 ~ /rtw89_8852be/&& $0 ~ /ERR/){gsub(hostname".*rtw89_8852be","",$0);a[substr($1,1,10)" "substr($0,35)]+=1}END{for(n in a){print n,a[n] | "sort -V"}}' /var/log/syslog{,.1} | \
  awk '{a=$0;gsub($1" ","",a);print "echo \042"a"\042 >> "$1}' | sort -V | sh

$ sdiff 2023-10-2{5,6} | grep -v "\[ERR\]"
$ sdiff 2023-10-2{7,8} | grep -v "\[ERR\]"
$ sdiff 2023-10-{29,30} | grep -v "\[ERR\]"
0000:03:00.0: R_AX_CMAC_ERR_IMR [0]=0x00000000 44	      |	0000:03:00.0: R_AX_CMAC_ERR_IMR [0]=0x00000000 30
0000:03:00.0: R_AX_CMAC_ERR_ISR [0]=0x00000000 44	      |	0000:03:00.0: R_AX_CMAC_ERR_ISR [0]=0x00000000 30
0000:03:00.0: R_AX_DBG_ERR_FLAG=0x00000000 44		      |	0000:03:00.0: R_AX_DBG_ERR_FLAG=0x00000000 30
0000:03:00.0: R_AX_DMAC_ERR_IMR=0x00000000 43		      |	0000:03:00.0: R_AX_DMAC_ERR_IMR=0x00000000 30
0000:03:00.0: R_AX_DMAC_ERR_ISR=0x00000040 43		      |	0000:03:00.0: R_AX_DMAC_ERR_ISR=0x00000040 30
0000:03:00.0: R_AX_PLE_ERR_FLAG_CFG=0x83190000 43	      |	0000:03:00.0: R_AX_PLE_ERR_FLAG_CFG=0x83190000 30
0000:03:00.0: R_AX_PLE_ERR_FLAG_ISR=0x02000000 43	      |	0000:03:00.0: R_AX_PLE_ERR_FLAG_ISR=0x02000000 30
0000:03:00.0: R_AX_PLE_ERR_IMR=0xffffffdf 43		      |	0000:03:00.0: R_AX_PLE_ERR_IMR=0xffffffdf 30
0000:03:00.0: R_AX_WDE_ERR_FLAG_CFG=0x00000000 43	      |	0000:03:00.0: R_AX_WDE_ERR_FLAG_CFG=0x00000000 30
0000:03:00.0: R_AX_WDE_ERR_IMR=0xffffffff 43		      |	0000:03:00.0: R_AX_WDE_ERR_IMR=0xffffffff 30
0000:03:00.0: R_AX_WDE_ERR_ISR=0x00000000 43		      |	0000:03:00.0: R_AX_WDE_ERR_ISR=0x00000000 30