Linux 测开:日志分析 + 定位 Bug

目录

🌼一,前言

[🎂二,系统调试 + 网络配置](#🎂二,系统调试 + 网络配置)

[1. Linux 端串口调试](#1. Linux 端串口调试)

[1.1 内核日志级别](#1.1 内核日志级别)

[1.2 文件系统挂载](#1.2 文件系统挂载)

[1.3 编辑文件](#1.3 编辑文件)

[1.4 网络接口配置](#1.4 网络接口配置)

[2. RTOS 端串口调试](#2. RTOS 端串口调试)

[2.1 WiFi 自动关闭](#2.1 WiFi 自动关闭)

[2.2 系统配置](#2.2 系统配置)

[3. WiFi 网络调试](#3. WiFi 网络调试)

[3.1 WPA 客户端命令](#3.1 WPA 客户端命令)

[3.2 WPS 配置](#3.2 WPS 配置)

[4. 手机 ADB 调试](#4. 手机 ADB 调试)

[4.1 ADB 基础操作](#4.1 ADB 基础操作)

[4.2 日志抓取](#4.2 日志抓取)

[4.3 连接信息](#4.3 连接信息)

[5. WiFi 四次握手](#5. WiFi 四次握手)

[5.1 四次握手](#5.1 四次握手)

[5.2 类比 TCP 三次握手](#5.2 类比 TCP 三次握手)

专业解释

通俗解释

补充理解

[5.3 抓包命令](#5.3 抓包命令)

[6. WiFi 连接信息](#6. WiFi 连接信息)

[6.1 案例解析](#6.1 案例解析)

[6.2 常见状态](#6.2 常见状态)

[6.3 工作模式](#6.3 工作模式)

[7. OTA 命令](#7. OTA 命令)

[7.1 OTA 升级版本](#7.1 OTA 升级版本)

[🌹三,Linux 串口日志分析](#🌹三,Linux 串口日志分析)

[1. 日志格式](#1. 日志格式)

[2. 专业名词](#2. 专业名词)

[3. 日志分析技巧](#3. 日志分析技巧)

[4. 常用命令](#4. 常用命令)

[🌙四,WiFi 日志典型场景](#🌙四,WiFi 日志典型场景)

[1. 正常连接](#1. 正常连接)

[2. 断开 / 认证失败](#2. 断开 / 认证失败)

[3. 异常 / 驱动问题](#3. 异常 / 驱动问题)

[4. 应用层交互](#4. 应用层交互)

[5. 认证和四次握手](#5. 认证和四次握手)

[6. DHCP / ARP / 网络层](#6. DHCP / ARP / 网络层)

[7. 网络层断开](#7. 网络层断开)


🌼一,前言

WiFi 连接状态👇,Cursor + Mermaid 生成


以下内容均常用 Linux 命令,以及蓝牙协议栈的通用报文格式

数据均为虚构

++不涉及生产实践++
以下命令,以及日志分析 + 定位 Bug,怎么才能快速掌握

① 多用 man 命令,man dmesg,man ifconfig...

② 多用 --help 命令,wpa_cli --help,adb --help

③ 多看日志,多查关键字,不懂的名词,优先 Cursor,其次百度 + 文档

④ 不懂就问
知识概览

  • 正常流程:WiFi 四次握手,DHCP,ARP,PING 都完整,说明各层无异常
  • 断开 / 认证失败:关注认证过程,加密算法,驱动兼容性
  • 异常 / 驱动层:关注驱动错误码,硬件支持,参数配置
  • 应用层交互:关注服务状态,数据包序号,连接状态
  • 日志分析:关注时间,模块,关键字,状态码,返回值

🎂二,系统调试 + 网络配置

1. Linux 端串口调试

内核日志级别,文件系统挂载,编辑文件,网络接口配置

1.1 内核日志级别

bash 复制代码
echo 8 >/proc/sys/kernel/printk
  • 设置内核日志的打印级别,8 表示允许所有级别的内核消息输出到串口(包括 debug)
  • 8 是日志级别,0-8,数字越大日志越多
  • 这个命令每次重启都要执行,因为 /proc 是内存文件系统,重启后会恢复默认

1.2 文件系统挂载

bash 复制代码
mount -o rw,remount /
  • 将根文件系统重新挂载为可写,便于修改系统文件
  • 挂载概念:
    挂载(mount)是将存储设备(硬盘分区,U盘,网络文件系统)关联到 Linux 文件系统目录树的过程,让用户可以通过目录路径访问该设备的文件,给存储设备一个访问入口
  • 参数解释:
    -o 指定挂载选项
    rw 读写方式挂载
    remount 重新挂载现有文件系统
    / 根目录路径
bash 复制代码
mount -o rw,remount /     # 重新挂载根目录为可写
mount -o remount,ro /     # 重新挂载为只读
mount | grep ' / '        # 查看根目录挂载状态
mount -o rw,remount /usr  # 重新挂载 /usr 为可写
mount -t tmpfs tmpfs /tmp # 挂载临时文件系统
umount /mnt/usb           # 卸载挂载点

1.3 编辑文件

vi 编辑文件,修改启动流程或配置文件

bash 复制代码
vi /usr/local/share/script/ap_start_fast.sh     # 使用vi编辑器
nano /usr/local/share/script/ap_start_fast.sh   # 使用nano编辑器
cat /usr/local/share/script/ap_start_fast.sh    # 查看脚本内容
chmod +x /usr/local/share/script/ap_start_fast.sh  # 给脚本执行权限
ls -l /usr/local/share/script/               # 查看脚本目录

1.4 网络接口配置

ifconfig 查看所有网络接口,确认某个接口是否存在,如 p2p-wlan0-0

bash 复制代码
ifconfig                              # 查看所有网络接口
ip addr                               # 现代Linux推荐的网络查看命令
ifconfig wlan0                        # 查看指定接口wlan0
ifconfig wlan0 up                     # 启用wlan0接口
ifconfig wlan0 down                   # 禁用wlan0接口
ifconfig wlan0 192.168.1.100          # 设置IP地址
ifconfig wlan0 netmask 255.255.255.0  # 设置子网掩码

2. RTOS 端串口调试

bash 复制代码
aip config base id autostdn_set 0
  • 关闭自动 standby 省电功能,防止 WiFi 长时间误操作被自动关闭
  • 参数:
  • aip:应用程序接口(Application Interface Program)命令
  • config:配置子命令
  • base:基础配置模块
  • id:标识符参数
  • autostdn_set:自动待机设置选项
  • 0:关闭(1为开启)
bash 复制代码
aip config base id autostdn_set 0     # 关闭自动待机
aip config base id autostdn_set 1     # 开启自动待机
aip config base id sleep_set 0        # 关闭睡眠模式
aip config base id sleep_set 1        # 开启睡眠模式
aip config base id power_mode 0       # 设置电源模式为性能模式
aip config base id power_mode 1       # 设置电源模式为节能模式
aip config base id get_autostdn       # 查看当前自动待机设置

2.1 WiFi 自动关闭

bash 复制代码
aip common set_wifi_autoclose_time 99999
  • 设置 WiFi 自动关闭时间 99999 秒
  • 参数解释
  • aip:应用程序接口命令
  • common:通用配置模块
  • set_wifi_autoclose_time:设置WiFi自动关闭时间选项
  • 99999:时间值(秒),设置为极大值表示不自动关闭
bash 复制代码
aip common set_wifi_autoclose_time 99999  # 设置为不自动关闭
aip common set_wifi_autoclose_time 60     # 设置60秒后自动关闭
aip common set_wifi_autoclose_time 0      # 立即关闭WiFi
aip common get_wifi_autoclose_time        # 查看当前设置
aip common wifi_status                    # 查看WiFi状态
aip common wifi_restart                   # 重启WiFi
aip common wifi_enable 1                  # 启用WiFi
aip common wifi_enable 0                  # 禁用WiFi

2.2 系统配置

参数解释①

bash 复制代码
device_name_set:设置设备名称
factory_reset:恢复出厂设置标志
reboot_set:重启设备标志
dhcp_enable:启用DHCP客户端
static_ip_set:设置静态IP地址
gateway_set:设置默认网关
dns_set:设置DNS服务器

代码①

bash 复制代码
aip config base id device_name_set "MyDevice"    # 设置设备名称为MyDevice
aip config base id factory_reset 1               # 恢复出厂设置(1=执行)
aip config base id reboot_set 1                  # 重启设备(1=执行)
aip config net id dhcp_enable 1                  # 启用DHCP(1=启用,0=禁用)
aip config net id static_ip_set 192.168.1.100    # 设置静态IP地址
aip config net id gateway_set 192.168.1.1        # 设置网关地址
aip config net id dns_set 8.8.8.8                # 设置DNS服务器
aip status get_all                                # 获取所有状态信息
aip config base id get_device_name               # 获取设备名称
aip config net id get_dhcp_status                # 获取DHCP状态

参数解释②

bash 复制代码
log_level_set:设置日志级别(0-7)
debug_enable:启用调试模式
memory_info:查看内存信息
thread_list:列出线程信息

代码②

bash 复制代码
aip debug log_level_set 7                        # 设置最高日志级别
aip debug debug_enable 1                         # 启用调试模式
aip system memory_info                           # 查看内存使用情况
aip system thread_list                           # 列出所有线程
aip system cpu_usage                             # 查看CPU使用率
aip system uptime                                # 查看系统运行时间
aip config base id led_control 1                 # 控制LED灯(1=开,0=关)
aip config base id gpio_set 12 1                 # 设置GPIO12为高电平

3. WiFi 网络调试

WPA 客户端命令 + WPS 设置

3.1 WPA 客户端命令

bash 复制代码
wpa_cli status
  • 查看 WiFi 连接状态和配置信息,这是 WiFi 无线网络相关的命令,用于管理 WPA / WPA2 无线网络连接

  • 以下都是 WiFi 的连接参数,非蓝牙相关的

  • 参数解释:

    wpa_cli:WPA(WiFi Protected Access)客户端命令行工具

bash 复制代码
wpa_cli status                        # 查看WiFi连接状态
wpa_cli scan                          # 扫描可用WiFi网络
wpa_cli scan_results                  # 显示扫描结果
wpa_cli list_networks                 # 列出配置的网络
wpa_cli add_network                   # 添加新网络配置
wpa_cli remove_network 0              # 删除网络配置(0为网络ID)
wpa_cli enable_network 0              # 启用网络配置
wpa_cli disable_network 0             # 禁用网络配置

3.2 WPS 配置

bash 复制代码
wpa_cli status wps
  • wpa_cli 工具查看 WPS 状态,用于 WiFi 直连(P2P)调试
  • AP:
    Access Point(接入点),是无线网络核心设备,能发射无线信号,供手机、电脑等设备连接并接入互联网,常见如无线路由器
bash 复制代码
wpa_cli status wps                    # 查看WPS状态
wpa_cli wps_pin any                   # 生成WPS PIN码用于任意AP
wpa_cli wps_pbc                       # 启动WPS按钮配置
wpa_cli wps_cancel                    # 取消WPS配置

4. 手机 ADB 调试

4.1 ADB 基础操作

  • ADB(Android Debug Bridge)是安卓调试桥,用于与安卓设备通信、抓取日志、安装应用

参数解释:

  • devices:列出连接的设备
  • shell:进入设备shell环境
  • logcat:查看系统日志
  • install:安装APK应用
  • uninstall:卸载应用
  • push:上传文件到设备
  • pull:从设备下载文件
bash 复制代码
adb devices                           # 列出已连接的安卓设备
adb devices -l                        # 详细列出设备信息(-l=long format)
adb shell                             # 进入设备shell命令行
adb shell ls /system/bin              # 在设备上执行ls命令
adb install app.apk                   # 安装APK文件到设备
adb install -r app.apk                # 重新安装APK(-r=replace)
adb uninstall com.example.app         # 卸载指定包名的应用
adb push local.txt /sdcard/           # 上传文件到设备
adb pull /sdcard/file.txt ./          # 从设备下载文件
adb reboot                            # 重启设备
adb reboot bootloader                 # 重启到bootloader模式
adb reboot recovery                   # 重启到recovery模式

4.2 日志抓取

bash 复制代码
adb logcat > samsung.log
  • 抓取安卓系统日志到本地文件

参数解释

  • logcat:查看系统日志命令
  • >:重定向输出到文件
  • -b:指定日志缓冲区
  • -v:指定日志格式
  • -s:过滤指定标签
  • -c:清空日志缓冲区
bash 复制代码
adb logcat > samsung.log              # 抓取所有日志到文件
adb logcat | grep wifi                # 过滤包含wifi的日志
adb logcat -b radio                   # 查看无线电日志(-b=buffer)
adb logcat -b system                  # 查看系统日志
adb logcat -b main                    # 查看主日志
adb logcat -b events                  # 查看事件日志
adb logcat -v time                    # 显示时间格式(-v=verbose)
adb logcat -v threadtime              # 显示线程时间格式
adb logcat -s WifiManager             # 只显示WifiManager标签(-s=silent)
adb logcat -c                         # 清空日志缓冲区(-c=clear)
adb logcat -d > log.txt               # 导出当前日志到文件(-d=dump)
adb logcat ActivityManager:I *:S     # 显示ActivityManager Info级别日志

4.3 连接信息

bash 复制代码
adb shell dumpsys wifi                # 查看WiFi系统信息
adb shell dumpsys bluetooth           # 查看蓝牙系统信息
adb shell dumpsys connectivity        # 查看网络连接信息
adb shell dumpsys telephony.registry  # 查看电话服务信息
adb shell netstat -an                 # 查看网络连接状态
adb shell ping google.com             # 在设备上ping测试
adb shell ifconfig                    # 查看网络接口配置

5. WiFi 四次握手

四次握手 + 抓包命令

5.1 四次握手

  • 定义:WPA / WPA2 安全协议的加密连接,包含 4 个 EAPOL(Extensible Authentication Protocol over LAN)数据包交换
  • 握手过程:
    M1(Message 1):AP发送ANonce(Authenticator Nonce)给客户端
    M2(Message 2):客户端发送SNonce(Supplicant Nonce)和MIC给AP
    M3(Message 3):AP发送GTK(Group Temporal Key)和MIC给客户端
    M4(Message 4):客户端确认收到GTK,发送确认包给AP

参数解释

  • ANonce/SNonce:随机数,用于生成PTK(Pairwise Transient Key)
  • MIC:消息完整性检查码,验证数据完整性
  • GTK:组临时密钥,用于组播/广播数据加密
  • PTK:配对临时密钥,用于单播数据加密

5.2 类比 TCP 三次握手

TCP 三次握手(SYN,SYN-ACK,ACK)为了让通信双方都确认彼此的存在和通信能力,建立可靠的连接

WPA / WPA2 的四次握手,则为了让无线客户端和 AP(无线路由器)安全地协商出加密密钥,保证后续数据传输的安全性

专业解释

M1:AP向Supplicant发送ANonce

  • AP(Access Point):无线接入点,通常为无线路由器,负责管理无线网络和客户端的接入。
  • ANonce(Authenticator Nonce):由AP生成的一次性随机数,用于密钥协商,保证每次握手的唯一性和安全性,防止重放攻击。
  • Nonce:Number used once,只用一次的随机数,常用于安全协议中防止重放攻击。
  • EAPOL(Extensible Authentication Protocol over LAN):局域网可扩展认证协议,WPA/WPA2四次握手就是通过EAPOL数据包完成的。

M2:Supplicant生成SNonce,基于PMK、ANonce、SNonce和双方MAC地址计算PTK,将SNonce和MIC发送给AP

  • SNonce(Supplicant Nonce):由客户端生成的一次性随机数,与ANonce共同参与密钥生成,确保每次握手密钥唯一。
  • PMK(Pairwise Master Key):配对主密钥,由预共享密钥(PSK,WiFi密码)或802.1X认证过程生成,是后续密钥派生的基础。
  • PTK(Pairwise Transient Key):配对临时密钥,由PMK、ANonce、SNonce、AP和客户端的MAC地址共同计算,用于加密AP与客户端之间的单播数据。
  • MIC(Message Integrity Code):消息完整性校验码,基于PTK生成,用于校验EAPOL消息在传输过程中是否被篡改,确保数据完整性。

M3:AP验证MIC,生成GTK,使用PTK加密后连同新MIC一同发送给Supplicant

  • GTK(Group Temporal Key):组临时密钥,由AP生成,用于加密AP发给所有客户端的组播和广播数据,保证同一AP下所有设备能安全收发组播/广播数据。
  • 组播/广播:组播是AP向一组特定客户端发送数据,广播是AP向所有客户端发送数据,GTK保证这些数据的加密安全。
  • PTK、MIC:同上,继续用于加密和校验。

M4:Supplicant验证MIC,确认GTK无误,发送EAPOL-Key确认帧,四次握手完成,PTK/GTK生效

  • 确认包:客户端发给AP的EAPOL消息,确认已收到GTK和所有密钥,握手流程正式结束,双方可以进行加密通信。
  • 加密通信:后续所有数据传输都将使用协商出的PTK(单播)和GTK(组播/广播)进行加密,确保无线链路的机密性和完整性。
通俗解释
  1. M1:无线路由器(AP)先给客户端发一个独特的"谜题"(随机数),为后续安全通信做准备。
  2. M2:客户端收到谜题后,自己也生成一个谜题,并用双方的谜题和密码算出密钥,把自己的谜题和一个校验码发回给AP。
  3. M3:AP验证客户端的校验码没问题后,生成一个"群密钥",发给客户端,并带上新的校验码。
  4. M4:客户端确认收到群密钥和校验码无误,回复AP,双方正式建立安全加密通信。
补充理解

① 本质:四次握手的目的不是 "连接" 本身,而是 "协商密钥"

TCP 三次握手是为了建立可靠连接,WiFi 四次握手是为了让双方都能独立计算出相同的加密密钥(PTK / GTK),保证数据安全

② 四次握手一步都不能丢:任何一步丢包或校验失败,都会导致连接失败

比如,WiFi 密码对了,但是连不上,可能是握手包丢失,被干扰,或密钥计算不一致

③ 密钥和随机数:

Ⅰ 每次握手都会用新的随机数,即使同一设备反复连接,密钥也会变,防止被重放攻击

Ⅱ 密码泄露风险:如果 PSK(WiFi 密码)被破解,四次握手协商出的密钥也会被推算出
④ 常见问题:

Ⅰ 抓包分析

抓取 EPOAL 包,看到四次握手全过程,是定位 WiFi 连接的关键

Ⅱ 驱动 / 固件兼容性

可能导致无法连接或频繁掉线

Ⅲ AP 配置问题

配置了不兼容的加密方式(如 WPA / WPA2 混用),也会握手失败

Ⅳ 信号干扰

无线信号弱,或干扰大,或距离较远,可能连不上,或连上无网络
⑤ 蓝牙 / WiFi 区别

蓝牙配对 --> 身份认证和密钥交换

WiFi 四次握手 --> 基于已有的身份(密码+证书),协商会话密钥

⑥ 排查建议

Ⅰ优先抓包看 EPOAL 流程,四次握手是否完整,每一步是否有响应

Ⅱ 握手包中的 随机数 和 MIC,如果校验失败,排查密码,WiFi 驱动,AP 配置

5.3 抓包命令

tcpdump:Linux 命令行抓包工具

参数解释

  • -i:指定网络接口(interface)
  • -w:写入文件(write to file)
  • wlan0:无线网络接口名称
  • wifi.pcap:保存的抓包文件名
  • wlan0mon:监控模式的无线接口

代码

bash 复制代码
tcpdump -i wlan0 -w wifi.pcap         # 在wlan0接口抓包保存到wifi.pcap
tcpdump -i wlan0 -w wifi.pcap host 192.168.1.1  # 只抓指定主机的包
tcpdump -i any -w all.pcap            # 在所有接口抓包

6. WiFi 连接信息

案例解析,创建连接状态,工作模式

6.1 案例解析

bash 复制代码
bssid=xx:xx:xx:xx:xx:xx           # 连接 AP(Access Point) 的 MAC 地址
freq=5180                        # 5G WiFi 工作频率
ssid=XXXXXXX                     # WiFi 网络名称(Service Set Identifier)
id=0                             # wpa_supplicant 中网络配置ID
passphrase=xxxxxxx               # WiFi 密码
mode=P2P GO                      # 工作模式:P2P Group Owner(WiFi 直连群主)
pairwise_cipher=CCMP             # 单播加密算法(AES-CCMP)
group_cipher=CCMP                # 组播加密算法(AES-CCMP)
key_mgmt=WPA2-PSK                # 密钥管理方式(WPA2预共享密钥)
wpa_state=COMPLETED              # WPA连接状态,COMPLETED表示已成功连接
ip_address=192.168.xx.xx         # 本机分配的IP地址
p2p_device_address=xx:xx:xx:xx:xx:xx # P2P设备地址(用于WiFi直连)
address=xx:xx:xx:xx:xx:xx        # 本机WiFi接口MAC地址
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 设备唯一标识符

6.2 常见状态

  • wpa_state常见状态
    • DISCONNECTED:未连接到任何网络
    • INTERFACE_DISABLED:网络接口已禁用
    • INACTIVE:接口激活但未连接
    • SCANNING:正在扫描可用网络
    • AUTHENTICATING:正在进行身份认证
    • ASSOCIATING:正在关联到AP
    • ASSOCIATED:已关联但未完成认证
    • 4WAY_HANDSHAKE:正在进行4次握手认证
    • GROUP_HANDSHAKE:正在进行组密钥协商
    • COMPLETED:连接完成,可以进行数据传输

6.3 工作模式

mode 字段含义:

  • station:客户端模式,连接到 AP
  • AP:接入点模式,作为热点
  • P2P GO:P2P群主模式,WiFi直连中的主设备
  • P2P Client:P2P客户端模式,WiFi直连中的从设备

7. OTA 命令

OTA 定义:OTA(Over-The-Air)通过无线网络(WiFi / 4G)进行设备固件升级的技术,不需要物理连接(串口烧录),即可远程更新设备版本

7.1 OTA 升级版本

bash 复制代码
aip config ota_version_check_skip_set 1
  • 跳过 OTA 版本检查,用于开发 / 调试阶段,允许安装任意版本固件
  • 应用场景:用于嵌入式设备,loT设备的固件升级,通过 WiFi 下载并安装新版本
bash 复制代码
aip config ota_version_check_skip_set 1  # 跳过版本检查
aip config ota_version_check_skip_set 0  # 启用版本检查
aip config ota_auto_update_enable 1      # 启用自动OTA更新
aip config ota_auto_update_enable 0      # 禁用自动OTA更新
aip config ota_server_url_set "http://update.example.com"  # 设置OTA服务器URL
aip config ota_check_interval_set 3600   # 设置检查间隔(秒)
aip ota check_update                     # 手动检查更新
aip ota start_update                     # 开始OTA更新
aip ota get_progress                     # 获取更新进度
aip ota cancel_update                    # 取消更新

🌹三,Linux 串口日志分析

日志格式,专业名词,日志分析技巧,常用命令

1. 日志格式

bash 复制代码
2077/07/07-17:77:77 <14>Jan  1 00:00:11 zhazhahuiAIP[103]: msghandler msg_code 23333 finish, rval is 0

# 时间戳
# 日志级别 14(syslog优先级, 14=info)
# 日期
# 进程名和 PID:zhazhahuiAIP[103]
# 内容:msghandler msg_code 23333 finish, rval is 0


# syslog 级别
# <0>:emerg
# <1>:alert
# <2>:crit
# <3>:err
# <4>:warning
# <5>:notice
# <6>:info
# <7>:debug
# <14>:info

2. 专业名词

cpp 复制代码
| 关键字/组合                  | 代表层/模块     | 说明/常见问题                                 |
|-----------------------------|----------------|---------------------------------------
| msghandler                  | 应用/中间件     | 消息处理,通常是应用层或中间件的消息分发      |
| send Ctrl event             | 应用/控制       | 控制事件发送,可能是状态切换、命令下发        |
| OPEN_AP                     | 网络/驱动       | 打开AP热点,WiFi相关                         |
| thread create               | 系统/多线程     | 线程创建,涉及RTOS或Linux线程                |
| ALL Init DONE               | 系统/应用       | 初始化完成                                   |
| Ins_Wifi_Event_Init         | 网络/驱动       | WiFi事件初始化                               |
| smf create thread           | 应用/状态机     | 状态机线程创建                               |
| ins_smf_wifi start          | 应用/网络       | WiFi状态机服务启动                           |
| gpio                        | 硬件/驱动       | GPIO操作,物理层                             |
| FrameShare                  | 应用/多媒体     | 帧共享,通常是视频/图像流处理                |
| Net Fifo start stream       | 网络/应用       | 网络流启动,数据传输                         |
| get wifi mac                | 网络/驱动       | 获取WiFi MAC地址                             |
| popen cmd                   | 系统/应用       | 执行shell命令                                |
| msg_code                    | 应用/协议       | 消息码,通常用于区分不同的消息类型           |
| rval is 0                   | 应用/协议       | 返回值,0为成功,非0为失败                   |
| COMPLETED                   | 网络/协议       | WiFi连接完成                                 |
| ASSOCIATING                 | 网络/协议       | WiFi正在关联                                 |
| DISCONNECTED                | 网络/协议       | WiFi断开                                     |
| pairwise_cipher             | 网络/安全       | 加密方式                                     |
| key_mgmt                    | 网络/安全       | 密钥管理方式                                 |
| ota_version_check_skip      | 应用/OTA        | OTA升级相关                                  |
| autostdn_set                | 系统/省电       | 自动待机设置                                 |
| set_wifi_autoclose_time     | 网络/省电       | WiFi自动关闭时间                             |
| wpa_state                   | 网络/协议       | WPA状态                                      |
| p2p_device_address          | 网络/协议       | P2P设备地址                                  |
| bssid                       | 网络/协议       | 连接的AP的MAC                                |
| ssid                        | 网络/协议       | WiFi名称                                     |
| ip_address                  | 网络/协议       | 本机IP                                       |
| uuid                        | 应用/唯一标识   | 设备唯一标识                                 |
| InsMw_FrameShare_All_Mmap   | 应用/多媒体     | 多媒体帧共享内存映射                         |
| SMF Create ret              | 应用/状态机     | 状态机创建返回值                             |
| Ins_Wifi_Dev_Event_Init     | 网络/驱动       | WiFi设备事件初始化                           |
| send size                   | 应用/协议       | 发送消息大小                                 |
| Ctrl event                  | 应用/控制       | 控制事件                                     |
| device status get           | 应用/设备管理   | 获取设备状态                                 |
| Init RPC                    | 应用/远程过程调用| 初始化远程过程调用                           |
| Stream Init                 | 应用/多媒体     | 流初始化                                     |
| start stream                | 应用/多媒体     | 启动流                                       |
| Ins_smf                     | 应用/状态机     | 状态机相关                                   |
| Server_Smf_Wifi             | 应用/网络       | WiFi服务状态机                               |
| thread_smf create done      | 应用/状态机     | 状态机线程创建完成                           |
| popen                       | 系统/应用       | 执行外部命令                                 |
| wl country                  | 网络/驱动       | 设置/获取WiFi国家码                          |
| gpio xx sw out1             | 硬件/驱动       | 设置GPIO为输出                               |
| rval                        | 应用/协议       | 返回值                                       |
| msg send                    | 应用/协议       | 消息发送                                     |
| recv msg_code               | 应用/协议       | 接收消息                                     |
| finish                      | 应用/协议       | 完成某个操作                                 |
| status get                  | 应用/协议       | 获取状态                                     |
| Init DONE                   | 系统/应用       | 初始化完成                                   |
| create success              | 系统/应用       | 创建成功                                     |
| start                       | 系统/应用       | 启动                                         |
| done                        | 系统/应用       | 完成                                      

3. 日志分析技巧

  • 看时间戳:定位问题发生的时间段。
  • 看进程名:区分是应用、驱动还是系统日志。
  • 看关键字 :如 errorfailtimeoutdisconnectinitstartdone
  • 看返回值rval is 0 表示成功,非0通常是错误码。
  • 看状态码 :如 wpa_state=COMPLETED 表示WiFi已连接。
  • 看消息流转 :如 recv msg_code -> msg_code finish,表示消息处理流程。

4. 常用命令

bash 复制代码
dmesg | grep error                              # 查看内核日志中error,排查驱动或硬件故障
journalctl -xe                                 # 查看详细系统日志,定位服务和系统异常
cat /var/log/messages                          # 查看系统消息日志,追踪系统和服务状态
cat /var/log/syslog                            # 查看系统日志,含内核和服务详细记录
iwconfig                                       # 显示或配置无线网卡参数,如信号强度
iw dev                                         # 列出所有无线设备及其当前状态
iwlist wlan0 scan                              # 扫描wlan0接口周围的WiFi热点
ps aux | grep wpa_supplicant                   # 查找wpa_supplicant进程,判断WiFi认证
systemctl status network                       # 查看网络服务状态,判断网络配置情况
systemctl restart network                      # 重启网络服务,使配置变更生效
ping 192.168.1.1                               # 向指定IP发送ICMP包,测试网络连通性
route -n                                       # 显示路由表,分析数据包转发路径
arp -a                                         # 查看ARP缓存,显示IP与MAC映射
netstat -an                                    # 显示所有网络连接和监听端口
ss -tuln                                       # 显示所有TCP/UDP监听端口,效率高
lsmod                                          # 列出已加载的内核模块,排查驱动
modprobe wl                                    # 加载wl模块(如无线驱动),自动依赖
rmmod wl                                       # 卸载wl模块,释放内核资源
insmod wl.ko                                   # 手动插入wl.ko模块文件到内核
cat /proc/net/dev                              # 查看各网络接口的数据流量统计
cat /proc/cpuinfo                              # 显示CPU详细信息,包括型号和核心数
cat /proc/meminfo                              # 显示内存使用详情,包括总量和可用
top                                            # 实时显示进程和系统资源占用情况
htop                                           # 交互式进程监控工具,比top更直观
free -h                                        # 以人类可读方式显示内存使用情况
df -h                                          # 以人类可读方式显示磁盘分区用量
du -sh *                                       # 显示当前目录下每个文件夹的总大小
lsusb                                          # 列出所有USB设备,排查外设连接
lspci                                          # 列出所有PCI设备,查看硬件信息
uname -a                                       # 显示内核版本、主机名、系统架构等
uptime                                         # 显示系统运行时长和负载信息
date                                           # 显示或设置系统日期和时间
hwclock                                        # 查看或设置硬件时钟(BIOS时钟)
crontab -l                                     # 列出当前用户的定时任务
tail -f /var/log/messages                      # 实时跟踪系统消息日志的新增内容
grep -i fail /var/log/messages                 # 查找日志中包含fail的行,定位失败
cat /etc/network/interfaces                    # 查看网络接口配置文件(Debian系)
nmcli device status                            # 查看NetworkManager管理的设备状态
nmcli connection show                          # 查看所有已配置的网络连接
ifup wlan0                                     # 启动wlan0无线接口
ifdown wlan0                                   # 关闭wlan0无线接口
systemctl status wpa_supplicant                # 查看wpa_supplicant服务状态
killall wpa_supplicant                         # 杀死所有wpa_supplicant进程
reboot                                         # 立即重启系统
shutdown -h now                                # 立即关机,安全关闭系统
ls -l /dev/tty*                                # 列出所有串口设备,便于串口调试
minicom -D /dev/ttyUSB0                        # 用minicom连接串口,嵌入式调试
screen /dev/ttyUSB0 115200                     # 用screen连接串口,波特率115200
cat /proc/interrupts                           # 查看系统中断分配和使用情况
cat /proc/partitions                           # 查看磁盘分区信息
lsblk                                          # 列出所有块设备及其挂载关系
blkid                                          # 显示分区UUID等信息,便于磁盘识别
fdisk -l                                       # 显示所有磁盘及分区详细信息
mount                                          # 显示当前挂载点或挂载新设备
umount /dev/sda1                               # 卸载/dev/sda1分区,安全移除设备
cat /etc/fstab                                 # 查看系统自动挂载配置文件
ls /sys/class/net/                             # 列出所有网络接口名称
ethtool eth0                                   # 查看或设置eth0网卡参数
iw phy                                         # 查看无线物理层信息,如频段信道
iw reg get                                     # 查看当前无线国家码设置
find / -name "supplicant_*.txt" 2>/dev/null    # 全盘查找supplicant_*.txt文件,忽略无权限
adb devices                                    # 列出已连接的安卓设备
adb logcat > samsung.log                       # 抓取安卓系统日志到samsung.log
tcpdump -i wlan0 -w wifi.pcap                  # 在wlan0接口抓包并保存为wifi.pcap
aip config base id autostdn_set 0              # 关闭自动待机,防止WiFi断开
aip common set_wifi_autoclose_time 99999       # 设置WiFi不自动关闭
aip config ota_version_check_skip_set 1        # 跳过OTA版本检查,允许任意固件升级

常用参数补充

bash 复制代码
netstat 常用参数
-a   # 显示所有连接和监听端口(包括TCP和UDP)
-n   # 以数字形式显示地址和端口号,不进行DNS解析
-t   # 仅显示TCP协议的连接
-u   # 仅显示UDP协议的连接
-l   # 仅显示处于监听状态的服务端口
-p   # 显示进程标识符和程序名称(需root权限)
-r   # 显示路由表
-s   # 显示网络统计信息
-e   # 显示扩展信息(如UID、inode等)

top 常用参数
-d <秒>   # 指定刷新间隔时间(秒)
-p <PID>   # 仅监控指定进程ID
-n <次数>   # 刷新指定次数后退出
-u <用户名>  # 仅显示指定用户的进程
-c       # 显示进程完整命令行
-H       # 显示线程级别信息
交互命令(运行时):
M   # 以内存使用排序
P   # 以CPU使用排序
k   # 杀死进程
q   # 退出top

tail 常用参数
-n <行数>   # 显示最后N行内容(如-n 100)
-f       # 持续输出文件新增内容(常用于日志监控)
-F       # 类似-f,但文件被重命名或替换后自动跟踪
-c <字节数>  # 显示最后N个字节
--pid=<PID>  # 与-f配合,进程结束时自动退出

cat 常用参数
-n   # 显示所有行号
-b   # 显示非空行行号
-s   # 压缩连续的空白行为一行
-A   # 显示所有不可见字符(等价于-vET)
-E   # 在每行结尾显示$
-T   # 将Tab字符显示为^I
-v   # 显示不可打印字符(不包括Tab和换行)

ls 常用参数
-l   # 以长格式显示,包含权限、所有者、大小、时间等
-a   # 显示所有文件,包括以.开头的隐藏文件
-h   # 以人类可读方式显示文件大小(配合-l)
-R   # 递归显示子目录内容
-S   # 按文件大小排序
-t   # 按修改时间排序
-r   # 反向排序
-d   # 仅显示目录本身,而非其内容
-i   # 显示文件的inode号
-F   # 在文件名后追加类型标识符(如/表示目录)

grep 常用参数
-i   # 忽略大小写匹配
-v   # 反向匹配,显示不包含模式的行
-r 或 -R # 递归搜索子目录
-n   # 显示匹配行的行号
-A <N>  # 匹配行后显示N行内容
-B <N>  # 匹配行前显示N行内容
-C <N>  # 匹配行前后各显示N行内容
-E   # 使用扩展正则表达式
-w   # 匹配整个单词
-l   # 只显示匹配的文件名
-c   # 只输出匹配行的计数

🌙四,WiFi 日志典型场景

正常连接,认证失败断开,异常连接,应用层交互

1. 正常连接

bash 复制代码
[dhd] [p2p-wlan0-0] wl_ext_iapsta_link: connected device 12:34:56:78:9a:bc
[dhd] [p2p-wlan0-0] wl_notify_connect_status_ap : new sta event for 12:34:56:78:9a:bc
802_1X EAPOL Packet, 4-way handshake, M1 (TX) : (aa:bb:cc:dd:ee:ff)
(12:34:56:78:9a:bc) TX_PKTHASH:0x0 TX_PKT_FATE:N/A
4-way handshake, M2 [RX] :
4-way handshake, M3 [TX]
4-way handshake, M4 [RX] :
wl_add_keyext : key index (0) for 12:34:56:78:9a:bc
DHCP DISCOVER (REQUEST]
OFFER[
[TX]: 192.168.1.1(aa:bb:cc:dd:ee:ff) -> 192.168.1.2(12:34:56:78:9a:bc)
ACK[
[TX]:192.168.1.1(aa:bb:cc:dd:ee:ff) ->192.168.1.2(12:34:56:78:9a:bc)
ARP REQUEST
ARP RESPONSE
PING REQUEST

结果

  • 设备 12:34:56:78:9a:bc 连接成功,完成四次握手(M1~M4),加密密钥下发正常。
  • DHCP流程完整,分配到IP,ARP和PING均正常,说明链路、网络、传输、应用层都通畅。

流程

  1. dhd 驱动检测到 p2p-wlan-0 接口有新设备(12:34:56:78:9a:bc)连接,说明物理链路和驱动层正常
  2. 通过 EAPOL 协议完成 WPA2 四次握手(M1 ~ M4),双方协商出加密密钥,保证后续数据安全
  3. 驱动下发密钥(wl_add_keyext),为数据加密准备
  4. 客户端发起 DHCP 请求,服务器分配 IP,并通过 OFFER 和 ACK 确认
  5. 通过 ARP 协议解析 IP 和 MAC 关系,PING 测试网络连通性,确保链路,网络,传输,应用层都正常

解释

  • [dhd]:表示日志来自"Dongle Host Driver",这是博通(Broadcom)等WiFi芯片常见的无线网卡驱动模块,负责主机与WiFi芯片之间的数据通信。
  • [p2p-wlan0-0] :网络接口名。wlan0是无线网卡的标准接口名,p2p-wlan0-0表示WiFi直连(P2P, Peer-to-Peer)模式下的虚拟接口,常用于WiFi直连或热点功能。
  • wl_ext_iapsta_link :驱动或中间件中的函数/模块名,wl代表wireless,iapsta可能指"infrastructure AP/STA",即基础设施模式下的AP/STA,link表示连接相关处理。
  • connected device 12:34:56:78:9a:bc:有设备(MAC地址为12:34:56:78:9a:bc)成功连接到本机AP或P2P群主。
  • wl_notify_connect_status_ap:驱动/中间件函数,通知AP(接入点)有新的连接事件。
  • sta event:sta是station的缩写,指WiFi客户端设备。
  • 802_1X EAPOL Packet, 4-way handshake, M1 (TX):正在发送WPA/WPA2四次握手的第1步(M1),EAPOL是认证协议数据包,M1~M4是握手的四个阶段。
  • TX /RX:TX为发送(Transmit),RX为接收(Receive)。
  • TX_PKTHASH/TX_PKT_FATE:数据包的哈希和命运(如是否成功发送),一般用于调试。
  • wl_add_keyext:驱动层函数,添加加密密钥(key),用于后续数据加密。
  • key index (0):密钥索引号,0通常为主密钥。
  • DHCP DISCOVER (REQUEST]:DHCP(动态主机配置协议)发现请求,客户端向网络请求分配IP地址。
  • OFFER /ACK:DHCP服务器响应,OFFER为提供IP,ACK为确认分配。
  • [TX]: 192.168.1.1(aa:bb:cc:dd:ee:ff) -> 192.168.1.2(12:34:56:78:9a:bc):表示IP为192.168.1.1、MAC为aa:bb:cc:dd:ee:ff的设备向192.168.1.2、MAC为12:34:56:78:9a:bc的设备发送数据。
  • ARP REQUEST/RESPONSE:ARP(地址解析协议)请求/响应,用于解析IP和MAC的对应关系。
  • PING REQUEST:网络连通性测试,发送ICMP包检测目标是否可达。

2. 断开 / 认证失败

bash 复制代码
wl_ext_iapsta_link: disconnected device ab:cd:ef:12:34:56, WLC_E_DEAUTH_IND(6), reason=3
wl_notify_connect_status_ap : event WLC_E_DEAUTH_IND(6) status 0 reason
wl_notify_connect_status_ap : del sta event for ab:cd:ef:12:34:56
wl_cfg80211_del_station : Disconnect STA : ab:cd:ef:12:34:56 scb_val.val 3
CFG80211-ERROR) wl_cfg80211_change_station : WLC_SCB_AUTHORIZE sta_flags_mask not set
CFG80211-ERROR) wl_cfg80211_get_key : Invalid algo (0x44)

流程

  1. 设备 ab:cd:ef:12:34:56 断开,原因码 3(认证失败 或 被踢下线)
  2. 日志显示认证 / 加密过程有问题,可能是密码错误,加密算法不匹配,或驱动异常

解释

  • WLC_E_DEAUTH_IND(6):WiFi驱动/协议栈中的"Deauthentication Indication",即"去认证"事件,6为事件码,表示设备被断开连接。
  • reason=3:断开原因码,3通常表示认证失败(AUTH_FAIL)或被AP主动踢下线(DEAUTH)。
  • wl_cfg80211_del_station:驱动层函数,删除已断开的客户端(STA)。
  • CFG80211-ERROR:cfg80211是Linux内核中WiFi配置和管理的子系统,出现ERROR表示驱动或协议栈出错。
  • WLC_SCB_AUTHORIZE sta_flags_mask not set:认证标志未设置,说明认证流程未完成。
  • Invalid algo (0x44):加密算法不支持或配置错误。

3. 异常 / 驱动问题

bash 复制代码
CFG80211-ERROR) wl_cfg80211_set_suspend_bcn_li_dtim : set bcnto_dly failed -7
wl_cfg80211_set_suspend_ben_li_dtim : bcn_li_dtim:0 lpas:0 bcn_to_dly:0
CFG80211-ERROR) wl_cfg80211_get_key : Invalid algo (0x44)

流程

  1. 驱动设置 beacon 参数失败,或加密算法不支持,需检查硬件兼容性和加密配置

解释

  • set bcnto_dly failed -7:设置beacon参数失败,-7为错误码,可能是硬件不支持或参数非法。
  • beacon:WiFi信标帧,AP定期发送,用于网络同步和发现。
  • Invalid algo:加密算法不支持,需检查AP和STA加密配置。

4. 应用层交互

bash 复制代码
[wsisrv 0 adopted] (1)
on = 0
[Rx]
SEQNUM=1
lws_gate_accepts: on

流程

  1. 应用层服务(WebSocket / HTTP)已启动并正常收发数据,数据包序号递增,说明应用层通信正常

解释

  • wsisrv:WebSocket / HTTP 服务进程或线程名,负责应用层通信
  • SEQNUM=1:应用层数据包序号,正常递增说明数据畅通
  • lws_gate_accepts: on:WebSocket 服务已接受连接

5. 认证和四次握手

bash 复制代码
[p2p-wlan0-0] 802_1X EAPOL Packet, 4-way handshake, M1 [TX] : (aa:bb:cc:dd:ee:ff)
(ab:cd:ef:12:34:56) TX_PKTHASH:0x0 TX_PKT_FATE:N/A
4-way handshake, M2 (RX) :
4-way handshake, M3 [TX] :
4-way handshake, M4 [RX] :

流程

  1. WPA2 四次握手完整,认证和密钥协商正常。若中间断开或无 M4,说明认证未完成,需查密码,加密方式,驱动兼容性

解释

  • 802_1X EAPOL Packet:基于IEEE 802.1X标准的认证协议数据包,EAPOL用于WiFi安全认证。
  • 4-way handshake, M1~M4:WPA/WPA2安全协议的四次握手过程,M1~M4为四个阶段,确保密钥协商和数据加密安全。
  • TX/RX:发送/接收。

6. DHCP / ARP / 网络层

bash 复制代码
DHCP DISCOVER (REQUEST]
OFFER
REPLY
[TX]:192.168.1.1(aa:bb:cc:dd:ee:ff) ->192.168.1.3(ab:cd:ef:12:34:56)
ARP REQUEST
ARP RESPONSE
PING REQUEST

流程

  1. DHCP 流程完整,设备获得 IP 地址,ARP 和 PING 都有响应,说明链路层,网络层,传输层都畅通

解释

  • DHCP DISCOVER/OFFER/REPLY:DHCP协议的发现、提供、应答过程,客户端通过DHCP获得IP地址。
  • ARP REQUEST/RESPONSE:地址解析协议,用于解析IP和MAC的对应关系。
  • PING REQUEST:ICMP协议测试网络连通性。

7. 网络层断开

bash 复制代码
ARP REQUEST
[TX] 192.168.1.1(aa:bb:cc:dd:ee:ff) -> 192.168.1.3(00:00:00:00:00:00)

流程

  1. 目标设备已断开或未分配 IP,导致 ARP 无法解析 MAC 地址

解释

  • 目标MAC为全0:ARP未能解析,通常是对端已断开或未分配IP
相关推荐
卡卡_R-Python43 分钟前
C++编程基础
c++
灵哎惹,凌沃敏1 小时前
C语言/Keil的register修饰符
c语言·开发语言
皮蛋sol周1 小时前
嵌入式学习C语言(八)二维数组及排序算法
c语言·学习·算法·排序算法
Jiangnan_Cai1 小时前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
森焱森1 小时前
单片机中 main() 函数无 while 循环的后果及应对策略
c语言·单片机·算法·架构·无人机
Azxcc02 小时前
C++迭代器失效
开发语言·c++
Two_brushes.2 小时前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW0208142 小时前
【Linux】系统引导修复
linux·运维·服务器
七七七七072 小时前
C++类对象多态基础语法【超详细】
开发语言·c++