# 其他问题 ***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 ``` ## 物理散热措施 - 确保Quectel Pi H1处于通风良好的环境中; - 部署外部主动散热模块,当设备温度超过设定阈值时,风扇将自动提高转速以强化散热。 # 某个库使用异常怎么办? ## 确认异常现象并定性 - 链接错误:编译时出现 *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不兼容仍可能导致应用程序在运行时崩溃。确认两个库版本的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. 编译系统镜像并将其烧录至Quectel Pi H1,然后进行驱动功能测试。 # 运行速度慢怎么办? Quectel Pi H1运行性能低下,通常并非由单一因素导致,而是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. 获取驱动模块文件:获取第三方驱动源码,并在与Quectel Pi H1内核版本匹配的环境中进行交叉编译,生成.ko驱动模块文件; 2. 传输驱动文件:将编译好的.ko文件通过scp、adb或U盘等方式传输至Quectel Pi H1。 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/