其他问题

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


设备发烫严重怎么办?

先确认温度是否真的过高

执行以下命令获取设备当前温度:

qpi-config dump temperature

若温度超过80°C,需立即采取降温措施。

定位发热源

排查CPU:

# 查看CPU占用率
top -b -n 1 | head -20

# 查看各核心频率(确认是否持续保持在最高频率)
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

# 查看是否启用了performance调度器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

排查GPU:

cat /sys/class/kgsl/kgsl-3d0/gpu_busy_percentage 2>/dev/null
cat /sys/class/kgsl/kgsl-3d0/max_gpuclk 2>/dev/null

排查存储:

iostat -x 1 3   # 查看%util

软件层面降温措施

降低CPU频率(降频):

# 查看可用频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

# 设定最大频率(例如1.6 GHz)
echo 1651200 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

切换调度器为schedutil:

echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

降低GPU最高运行频率:

# 查看可用频率
cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies

# 设定最大频率(例如550 MHz)
echo 550000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq

检查是否存在异常进程:

ps aux --sort=-%cpu | head -10

物理散热措施

  • 确保开发板处于通风良好的环境中;

  • 部署外部主动散热模块,当设备温度超过设定阈值时,风扇将自动提高转速以强化散热。

某个库使用异常怎么办?

确认异常现象并定性

  • 链接错误:编译时出现 cannot find -lxxx,或运行时出现 cannot open shared object file

  • 运行时崩溃:抛出 undefined symbol: xxx或触发 Segmentation fault

  • 功能异常:库加载成功,但调用特定API时无响应或返回异常错误码。

检查库文件是否存在及其搜索路径

1. 查找库文件
find /usr/lib /usr/local/lib /lib -name "libxxx.so*"

# 2. 查看动态链接器是否认识该库
ldconfig -p | grep libxxx

# 3. 检查LD_LIBRARY_PATH是否包含该路径
echo $LD_LIBRARY_PATH

若库文件存在于非标准路径,需设置 LD_LIBRARY_PATH 环境变量,或在 /etc/ld.so.conf.d/ 目录中添加对应路径配置文件,并执行 ldconfig 命令以更新缓存。

检查依赖关系(解决“未定义符号”)

# 查看该库依赖哪些其他库(比ldd更安全,不会执行代码)
readelf -d /path/to/libxxx.so | grep NEEDED

# 检查某个符号是否存在于该库中
nm -D /path/to/libxxx.so | grep "  T " | grep symbol_name

# 或
readelf -s /path/to/libxxx.so | grep symbol_name

若符号未定义,通常表明库版本不匹配或存在缺失的依赖库;若符号存在但应用程序仍报错,则可能是链接顺序问题或ABI不一致所致。

检查库版本与ABI兼容性

# 查看库的实际版本字符串
strings /path/to/libxxx.so | grep -i version

# 查看库的SONAME(链接器使用的名字)
readelf -d /path/to/libxxx.so | grep SONAME

若应用程序编译时链接的是libxxx.so.1,但系统中仅存在libxxx.so.2,即使符号存在,也可能因ABI变化导致运行时崩溃。可通过创建软链接(ln -s libxxx.so.2 libxxx.so.1)进行临时解决,但长期建议重新编译应用程序或升级底层库。

运行时动态追踪(定位加载失败)

# 1. 查看动态链接器加载了哪些库(定位是否加载了错误的版本)
LD_DEBUG=libs ./your_app 2>&1 | grep libxxx

# 2. 使用strace追踪库文件打开过程
strace -e openat,open ./your_app 2>&1 | grep libxxx

# 3. 如果应用启动即崩溃,使用gdb查看崩溃点
gdb ./your_app
(gdb) run
(gdb) bt   # 崩溃时查看调用栈

如何更新第三方驱动?

  1. 获取官方SDK,下载方式请参考 镜像构建

  2. sources/quectel-src/kernel 目录下添加第三方驱动源码;

  3. sources/quectel-src/kernel/qcom-6.6/arch/arm64/boot/dts/qcom/qcs6490-idp-pi.dts 文件中添加对应外设的设备树节点;

  4. 执行编译、烧录及功能测试。

运行速度慢怎么办?

开发板运行性能低下,通常并非由单一因素导致,而是CPU调度、内存压力、存储I/O、温度降频、软件配置等多种因素交织作用的结果。

快速定位瓶颈

# 1. 系统整体负载(1/5/15 分钟)
uptime
# 如果load average长期 > CPU核心数(8 核 > 8.0),说明CPU不足

# 2. CPU使用率分布(用户态/系统态/软中断/空闲)
mpstat -P ALL 1 3

# 3. 内存与交换分区(是否用到了swap)
free -h
# 如果available < 10% 且 swap used > 0,说明内存不足

# 4. 存储I/O瓶颈(%util接近100% 说明磁盘是瓶颈)
iostat -x 1 3

# 5. 温度与降频(是否因过热降频)
qpi-config dump temperature
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

关键指标判定标准:

  • 温度 > 80°C:热节流导致降频

  • free -h 中available极少: 内存不足

根据瓶颈类型采取针对性优化措施

CPU 瓶颈(%us或%sy长期 > 60%)

  • 查找占用CPU资源最高的进程;

  • 降低相机等外设的负载;

  • 提升关键线程的实时优先级(如调整调度策略)。

内存瓶颈(available极低,且swap used大于0)

  • 查看内存占用排名前10的进程(Top 10);

  • 清理冗余的日志文件;

  • 检查是否存在DMA-BUF或ION内存泄漏。

存储I/O瓶颈(iostat中%util接近100%)

  • 查找写入I/O最多的进程;

  • 减少不必要的日志写入;

  • 检查是否存在进程频繁写入文件的情况。

热节流(温度过高导致降频)

  • 确认当前是否已触发降频机制;

  • 采取物理或软件层面的主动散热措施。

如何设置开机启动?

systemd是几乎所有主流发行版(包括Yocto构建的系统)的标准init系统。它提供了强大的依赖管理、自动重启、环境变量配置等功能。

创建服务单元文件

/etc/systemd/system/ 目录下创建.service文件,例如 my-camera.service

[Unit]
Description=My Camera Service
After=network.target   # 在网络启动后启动(按需调整)

[Service]
Type=simple            # 或forking, oneshot等
ExecStart=/usr/bin/my_script.sh
Restart=on-failure     # 自动重启
User=root              # 指定运行用户(通常为root)
WorkingDirectory=/opt/my_app

[Install]
WantedBy=multi-user.target   # 在系统进入多用户模式时启动

启用并启动服务

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用开机自启(创建符号链接)
sudo systemctl enable my-camera.service

# 立即启动(可选)
sudo systemctl start my-camera.service

# 查看状态
sudo systemctl status my-camera.service

如何安装第三方驱动?

  1. 获取驱动模块文件:获取第三方驱动源码,并在与开发板内核版本匹配的环境中进行交叉编译,生成 .ko 驱动模块文件;

  2. 传输驱动文件:将编译好的.ko文件通过scp、adb或U盘等方式传输至开发板。

  3. 加载与卸载驱动:
    执行 insmod 加载驱动:

insmod your_driver.ko

执行 rmmod 卸载驱动:

rmmod your_driver

查看已加载驱动:执行 lsmod 查看当前系统已加载的所有模块。

lsmod

未找到解决方案怎么办?

  1. 访问常见问题页面:

https://www.quectel.com.cn/faqs

  1. 前往技术论坛提问:

https://forumschinese.quectel.com/