当前位置: 首页 > news >正文

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

目录

🌼一,前言

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

1. Linux 端串口调试

1.1 内核日志级别

1.2 文件系统挂载

1.3 编辑文件

1.4 网络接口配置

2. RTOS 端串口调试

2.1 WiFi 自动关闭

2.2 系统配置

3. WiFi 网络调试

3.1 WPA 客户端命令

3.2 WPS 配置

4. 手机 ADB 调试

4.1 ADB 基础操作 

4.2 日志抓取

4.3 连接信息

5. WiFi 四次握手

5.1 四次握手

5.2 类比 TCP 三次握手

专业解释

通俗解释

补充理解

5.3 抓包命令

6. WiFi 连接信息

6.1 案例解析

6.2 常见状态

6.3 工作模式

7. OTA 命令

7.1 OTA 升级版本

🌹三,Linux 串口日志分析

1. 日志格式

2. 专业名词

3. 日志分析技巧

4. 常用命令

🌙四,WiFi 日志典型场景

1. 正常连接

2. 断开 / 认证失败

3. 异常 / 驱动问题

4. 应用层交互

5. 认证和四次握手

6. DHCP / ARP / 网络层

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 内核日志级别

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

1.2 文件系统挂载

mount -o rw,remount /
  • 将根文件系统重新挂载为可写,便于修改系统文件
  • 挂载概念:
    挂载(mount)是将存储设备(硬盘分区,U盘,网络文件系统)关联到 Linux 文件系统目录树的过程,让用户可以通过目录路径访问该设备的文件,给存储设备一个访问入口
  • 参数解释:
    -o  指定挂载选项
    rw  读写方式挂载
    remount  重新挂载现有文件系统
    /  根目录路径
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 编辑文件,修改启动流程或配置文件

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

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 端串口调试

aip config base id autostdn_set 0
  • 关闭自动 standby 省电功能,防止 WiFi 长时间误操作被自动关闭
  • 参数:
  • aip:应用程序接口(Application Interface Program)命令
  • config:配置子命令
  • base:基础配置模块
  • id:标识符参数
  • autostdn_set:自动待机设置选项
  • 0:关闭(1为开启)
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 自动关闭

aip common set_wifi_autoclose_time 99999
  • 设置 WiFi 自动关闭时间 99999 秒
  • 参数解释
  • aip:应用程序接口命令
  • common:通用配置模块
  • set_wifi_autoclose_time:设置WiFi自动关闭时间选项
  • 99999:时间值(秒),设置为极大值表示不自动关闭
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 系统配置

参数解释①

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

代码①

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状态

参数解释②

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

代码②

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 客户端命令

wpa_cli status
  • 查看 WiFi 连接状态和配置信息,这是 WiFi 无线网络相关的命令,用于管理 WPA / WPA2 无线网络连接
  • 以下都是 WiFi 的连接参数,非蓝牙相关的
  • 参数解释:

    wpa_cli:WPA(WiFi Protected Access)客户端命令行工具
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 配置

wpa_cli status wps
  • wpa_cli 工具查看 WPS 状态,用于 WiFi 直连(P2P)调试
  • AP:
    Access Point(接入点),是无线网络核心设备,能发射无线信号,供手机、电脑等设备连接并接入互联网,常见如无线路由器
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:从设备下载文件
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 日志抓取

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

参数解释

  • logcat:查看系统日志命令
  • >:重定向输出到文件
  • -b:指定日志缓冲区
  • -v:指定日志格式
  • -s:过滤指定标签
  • -c:清空日志缓冲区
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 连接信息

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:监控模式的无线接口

代码

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 案例解析

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 升级版本

aip config ota_version_check_skip_set 1
  • 跳过 OTA 版本检查,用于开发 / 调试阶段,允许安装任意版本固件
  • 应用场景:用于嵌入式设备,loT设备的固件升级,通过 WiFi 下载并安装新版本
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. 日志格式

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. 专业名词

| 关键字/组合                  | 代表层/模块     | 说明/常见问题                                 |
|-----------------------------|----------------|---------------------------------------
| 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. 常用命令

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版本检查,允许任意固件升级

常用参数补充

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   # 退出toptail 常用参数
-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. 正常连接

[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. 断开 / 认证失败

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. 异常 / 驱动问题

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. 应用层交互

[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. 认证和四次握手

[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 / 网络层

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. 网络层断开

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
http://www.dtcms.com/a/271278.html

相关文章:

  • Paimon 原子提交实现
  • 【Linux】Rocky Linux 安装 Docker 与 Docker-Compose
  • AI智能选股,DeepSeek智能分析股票测试
  • 搭建一款结合传统黄历功能的日历小程序
  • C++最小生成树算法详解
  • 人机协同的关键枢纽:软件工程3.0中对象模型与模型驱动的融合路径
  • Vue 3 中父子组件双向绑定的 4 种方式
  • 如何将 AWS EBS 卷从 gp2 批量迁移到 gp3:完整指南
  • 基于Spring Boot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
  • [Pytest][Part 4]多种测试运行方式
  • docker部署华为高斯数据库opengauss(arm版本)
  • 1.1 ARMv8/ARMv9安全扩展
  • 解决SQL Server SQL语句性能问题(9)——SQL语句改写(6)
  • 【PDF提取内容改名】批量提取pdf多个指定区域内容到excel表格的操作步骤和方法
  • NLP革命二十年:从规则驱动到深度学习的跃迁
  • Spring Boot 项目中多数据源配置使用场景
  • 美股异动|机器人概念表现活跃,微美全息(WIMI.US)瞄准高增长赛道涨超14%
  • 丰田将协作机器人与现有设备相结合,以实现超高负载能力和安全性
  • 焊接机器人智能节气装置
  • Deepoc具身智能大模型:物流机器人的神经中枢如何重塑现代供应链
  • Android ttyS2无法打开该如何配置 + ttyS0和ttyS1可以
  • 板凳-------Mysql cookbook学习 (十一--------6)
  • Android 12 - 部分相机横屏显示方案
  • Docker高级管理--容器通信技术与数据持久化
  • 记录跟随recyclerview滑动的指示器
  • 智能避让+自动换针:三坐标让汽车检具测量安全又高效
  • 小鹏汽车6月交付车辆34,611辆,同比增长224%
  • 实现子系统深度融合,IBMS系统消除信息孤岛释放价值潜力
  • 云成本优化的核心原则与框架
  • React 编译器与性能优化:告别手动 Memoization