banner
NEWS LETTER

嵌入式 Linux 系列 07:调试工具和问题定位方法

Scroll down

嵌入式开发真正拉开差距的地方,是定位问题的能力。一个问题发生后,能不能快速判断属于启动、文件系统、网络、应用、驱动还是硬件,直接决定修复效率。

一、先分类问题

不要一上来就改代码。先判断问题类型:

  • 启动问题。
  • rootfs 问题。
  • 应用崩溃。
  • 内存泄漏。
  • CPU 占用高。
  • 网络不通。
  • 外设不工作。
  • 配置丢失。
  • OTA 失败。

不同问题对应不同入口。

二、启动问题

工具:

  • 串口日志。
  • U-Boot 命令行。
  • kernel command line。
  • dmesg。

重点看:

1
2
3
4
5
U-Boot 是否启动
Kernel 是否加载
Device Tree 是否匹配
RootFS 是否挂载
init 是否执行

如果没有串口日志,启动问题基本很难定位。

三、应用崩溃

先看退出码和日志:

1
2
echo $?
dmesg | tail

如果有 core dump:

1
2
gdb ./device_agent core
bt

交叉环境可以用:

1
gdb-multiarch ./device_agent core

没有 core 时,可以先用 strace

1
strace -f -o app.strace /usr/bin/device_agent

它能看到系统调用失败原因。

四、网络问题

常用命令:

1
2
3
4
5
ip addr
ip route
ping 192.168.1.1
nslookup example.com
tcpdump -i eth0

MQTT 连不上时,按顺序查:

  1. 本机 IP 是否正常。
  2. 默认路由是否存在。
  3. DNS 是否可用。
  4. broker 地址和端口是否可达。
  5. TLS 证书时间是否有效。
  6. 账号密码是否正确。
  7. topic 权限是否正确。

不要只看应用日志,抓包往往更直接。

五、内存和 CPU

查看进程:

1
2
3
top
ps
cat /proc/meminfo

查看某个进程:

1
2
cat /proc/<pid>/status
cat /proc/<pid>/maps

CPU 高时,用 strace -p 看是否卡在某类系统调用:

1
strace -p <pid>

如果系统支持 perf,可以进一步分析热点。

六、外设问题

先看内核日志:

1
2
dmesg | grep -i error
dmesg | grep -i i2c

再看 sysfs:

1
2
ls /sys/class
ls /sys/bus

I2C:

1
2
i2cdetect -y 1
i2cget -y 1 0x48 0x00

GPIO:

1
ls /sys/class/gpio

外设问题要同时查软件和硬件:设备树、驱动、引脚复用、电源、时钟、复位脚都可能有问题。

七、配置丢失

重点看:

1
2
3
4
mount
cat /proc/mounts
ls -l /data/config
sync

常见原因:

  • 配置写到了 tmpfs。
  • 写到了只读 rootfs。
  • 写入后没有 fsync。
  • 异常断电时文件被截断。
  • OTA 清空了 data 分区。

配置持久化要设计,不要靠运气。

八、整理排查记录

每次定位问题建议记录:

  • 现象。
  • 复现步骤。
  • 设备版本。
  • 日志片段。
  • 初步判断。
  • 验证过程。
  • 根因。
  • 修复方式。

这些记录会变成团队的排查手册。

其他文章
目录导航 置顶
  1. 1. 一、先分类问题
  2. 2. 二、启动问题
  3. 3. 三、应用崩溃
  4. 4. 四、网络问题
  5. 5. 五、内存和 CPU
  6. 6. 六、外设问题
  7. 7. 七、配置丢失
  8. 8. 八、整理排查记录
请输入关键词进行搜索