# 其他问题 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 设备发烫严重怎么办? ## 先确认温度是否真的过高 执行以下命令获取设备当前温度: ```bash qpi-config dump temperature ``` 若温度超过80°C,需立即采取降温措施。 ## 定位发热源 排查CPU: ```markdown # 查看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: ```bash cat /sys/class/kgsl/kgsl-3d0/gpu_busy_percentage 2>/dev/null cat /sys/class/kgsl/kgsl-3d0/max_gpuclk 2>/dev/null ``` 排查存储: ```bash iostat -x 1 3 # 查看%util ``` ## 软件层面降温措施 降低CPU频率(降频): ```markdown # 查看可用频率 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: ```bash echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ``` 降低GPU最高运行频率: ```markdown # 查看可用频率 cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies # 设定最大频率(例如550 MHz) echo 550000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq ``` 检查是否存在异常进程: ```bash ps aux --sort=-%cpu | head -10 ``` ## 物理散热措施 - 确保开发板处于通风良好的环境中; - 部署外部主动散热模块,当设备温度超过设定阈值时,风扇将自动提高转速以强化散热。 # 某个库使用异常怎么办? ## 确认异常现象并定性 - 链接错误:编译时出现 *cannot find -lxxx*,或运行时出现 *cannot open shared object file*; - 运行时崩溃:抛出 *undefined symbol*: xxx或触发 *Segmentation fault*; - 功能异常:库加载成功,但调用特定API时无响应或返回异常错误码。 ## 检查库文件是否存在及其搜索路径 ```bash 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** 命令以更新缓存。 ## 检查依赖关系(解决“未定义符号”) ```bash # 查看该库依赖哪些其他库(比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兼容性 ```bash # 查看库的实际版本字符串 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)进行临时解决,但长期建议重新编译应用程序或升级底层库。 ## 运行时动态追踪(定位加载失败) ```bash # 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,下载方式请参考 [镜像构建](<../../操作系统/Yocto Linux/镜像构建/镜像构建.md>)。 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、温度降频、软件配置等多种因素交织作用的结果。 ## 快速定位瓶颈 ```markdown # 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 ``` 关键指标判定标准: - %us高:CPU计算密集型任务; - %sy高: 系统调用或驱动开销大(如软中断属于此类); - %wa高:存储I/O瓶颈; - %si高:软中断过多(如BLOCK softirq属于此类) - 温度 > 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*: ```python [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 # 在系统进入多用户模式时启动 ``` ## 启用并启动服务 ```bash # 重新加载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** 加载驱动: ```bash insmod your_driver.ko ``` 执行 **rmmod** 卸载驱动: ```bash rmmod your_driver ``` 查看已加载驱动:执行 **lsmod** 查看当前系统已加载的所有模块。 ```plaintext lsmod ``` # 未找到解决方案怎么办? 1. 访问常见问题页面: https://www.quectel.com.cn/faqs 2. 前往技术论坛提问: https://forumschinese.quectel.com/