骁龙高级版
高通骁龙飞行器 已停用(已被取代,但 PX4 尚不支持更新版本)。本文档是为现有用户提供的,但将在未来版本中删除。
本页收集了一些有用的命令和说明,在使用 Snapdragon 平台时可能会派上用场。
连接至 Snapdragon
通过 FTDI
套件附带的分线板上有三个针脚,用于连接控制台。将捆绑的 FTDI 电缆连接到提供的针座上,然后将分线板连接到扩展连接器上。
在 Linux 上,使用以下命令打开控制台
屏幕 /dev/ttyUSB0 115200
将 USB0 改为任意位置。检查 /dev/
或 /dev/serial/by-id
.
通过 ADB(安卓调试桥)
通过 USB2.0 连接 Snapdragon 并使用电源模块为其供电。当 Snapdragon 运行时,LED 指示灯将以蓝色缓慢闪烁(呼吸)。
确保可以使用 adb:
adb 设备
如果看不到设备,很可能是 USB 设备权限问题。请按照以下说明操作
要获取外壳,请执行下列操作
adb shell
DSP 调试监控器/控制台
当您通过 USB 与 Snapdragon 板连接时,您可以访问 DSP 上的 PX4 shell (POSIX)。与 DSP 端(QuRT)的交互通过 qshell
posix 应用程序及其 QuRT 配套程序。
通过 USB 连接 Snapdragon 后,打开 mini-dm 查看 DSP 的输出:
${HEXAGON_SDK_ROOT}/tools/debug/mini-dm/Linux_Debug/mini-dm
另外,特别是在 Mac 上,您还可以使用 纳米-dm.
在 linaro 端运行主程序:
CD /home/linaro ./px4 -s px4.config
现在,您可以通过 linaro shell 使用 DSP 上加载的所有应用程序,语法如下:
pxh> qshell 指挥部 [参数 ...]
例如,查看可用的 QuRT 应用程序:
pxh> qshell list_tasks
执行命令的输出结果显示在 minidm 上。
串行端口
目前 QURT 并不支持所有 POSIX 调用。因此,需要定制一些 ioctl。
设置和使用 UART 的应用程序接口在 dspal.
Wi-Fi 设置
这些是为高级开发人员编写的说明。
连接到 Linux shell(请参阅 控制台说明).
接入点模式
如果您想让 Snapdragon 成为 Wifi 接入点(AP 模式),请编辑该文件: /etc/hostapd.conf 并设置:
ssid=EnterYourSSID wpa_passphrase=EnterYourPassphrase
密码必须至少包含 8 个字符
然后配置 AP 模式:
/usr/local/qr-linux/wificonfig.sh -s softap reboot
车站模式
如果您希望骁龙连接到现有的无线网络,请编辑该文件: /etc/wpa_supplicant/wpa_supplicant.conf 并添加网络设置:
network={ ssid="我现有的网络 ssid" psk="我现有的密码" }
然后配置站模式:
/usr/local/qr-linux/wificonfig.sh -s station reboot
使用 Snapdragon Flight 上的摄像头
Snapdragon Flight 板有一个向下的灰度摄像头和一个向前的 RGB 摄像头,前者可用于基于光流的位置稳定。摄像头 snap_cam repo 提供了一种方法来运行和串流不同的摄像头,并计算光流。
除了摄像头,光流还需要一个向下的距离传感器。这里将讨论 TeraRanger One 的使用。
光流
光流由应用处理器计算,并通过 MAVLink 发送至 PX4。克隆和编译 snap_cam repo 中的说明。
以根用户身份运行光流应用程序(每秒 90 帧,自动曝光):
./optical_flow -f 90 -a
光流应用程序需要 PX4 发送 IMU MAVLink 信息。您可能需要向 PX4 添加一个额外的 MAVLink 实例,方法是将以下内容添加到您的 mainapp.config:
mavlink start -u 14557 -r 1000000 -t 127.0.0.1 -o 14558 mavlink stream -u 14557 -s HIGHRES_IMU -r 250
TeraRanger One 设置
要将 TeraRanger One (TROne) 与 Snapdragon Flight 连接,必须使用 TROne I2C 适配器。供应商必须为 TROne 更新 I2C 固件。
TROne 通过定制的 DF13 4 对 6 针电缆连接到 Snapdragon Flight。我们建议使用 J15 连接器(USB 旁边),因为所有其他连接器都已在使用(遥控、电调、GPS)。接线如下:
4 针 | <->; | 6 针 |
---|---|---|
1 | 1 | |
2 | 6 | |
3 | 4 | |
4 | 5 |
TROne 必须由 10 - 20V 电压供电。
QGroundControl 中的摄像机流
观看任一摄像机的实时流媒体 qcamvid
可以使用。在 Snapdragon Flight 上运行以下命令,以 720p 分辨率流式传输 hires 摄像机 10 分钟。
qcamvid -c hires -r 720p -s -t 600
使用 qcamvid -h
查看所有选项。
要在 QGroundControl 中观看直播流,必须使用 gstreamer(请参阅 这里).
安装并连接到 Snapdragon Flight'network 后,必须在以下页面进行更改 QGroundControl.
访问输入/输出数据
可使用名为 DSPAL 的类似 POSIX 的应用程序接口,通过在 aDSP 上运行的代码访问低级总线数据。
该应用程序接口的头文件保存在 github 并在每个头文件中使用 Doxygen 格式的文档进行注释。下文提供了所支持的 API 的说明以及指向适用头文件的链接。
应用程序接口概述
- 序列号
- I2C:
- SPI:
- GPIO
- 计时器 qurt_timer.h
- 电源控制: HAP_power.h
源代码示例
验证每个 DSPAL 函数的单元测试代码也是如何调用这些函数的良好范例。
该代码也在 github
设置串行数据速率
串行 API 不符合通过 tcsetattr()
功能。IOCTL 代码将被替代使用,并在上面链接的头文件中进行了说明。
计时器
更高级的 aDSP 操作的附加功能可通过前缀"...... "获得。 qurt_
.例如,计时器功能可通过 qurt_timer
前缀,并在 qurt_timer.h 头文件。 海克斯康 SDK.
设置功率级别
使用 Hexagon SDK 提供的 HAP 功能,可以设置 aDSP 的功率级别。这通常会减少 I/O 延迟。有关这些 API 的更多信息,请参见 HAP_power.h 头文件。 海克斯康 SDK.
故障排除
adb 不工作
- 检查 权限
- 确保使用的是正常工作的微型 USB 电缆。
- 试试 USB 2.0 端口。
- 试试电脑的前后端口。
USB 权限
创建新的权限文件
sudo -i gedit /etc/udev/rules.d/51-android.rules
粘贴此内容,使大多数已知设备都能进行 ADB 访问:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666", GROUP="plugdev";SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666", GROUP=";plugdev" SUBSYSTEM===="usb", ATTRS{idVendor}===="413c", MODE="0666", GROUP="plugdev" SUBSYSTEM===="usb", ATTRS{idVendor}===="0489", MODE="0666";, GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666";, GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE=";0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="2116";, MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}==";17ef", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}==";22b8", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="2080", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="2257", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="1d4d", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}===="04da", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}===="05c6", MODE="0666", GROUP="plugdev" SUBSYSTEM==";usb", ATTRS{idVendor}=="1f53", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666", GROUP="plugdev" SUBSYSTEM==";usb", ATTRS{idVendor}=="04dd", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666", GROUP="plugdev";SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666", GROUP="plugdev";
为文件设置正确的权限:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
重启守护进程
sudo udevadm control --reload-rules sudo service udev restart sudo udevadm trigger
如果还是不行,请检查 StackOverflow 上的这个答案.
电路板无法启动/启动循环/损坏
如果您仍然可以使用串行控制台连接到电路板,并得到类似这样的提示:
root@linaro-developer:~#
输入以下内容即可进入 fastboot(启动加载程序)模式
重新启动
如果无法使用串行控制台,可以尝试连接 Micro USB 电缆,然后输入:
adb wait-for-device && adb reboot bootloader
然后对电路板进行电源循环。如果幸运的话 adb 设法短暂连接,并将电路板送入 fastboot。
要检查是否处于 fastboot 模式,请使用:
fastboot 设备
成功进入快速启动模式后,您可以尝试 更新安卓/Linux 映像.
如果您碰巧有 P2 板您可以启动骁龙,同时短接写有 J3 的位置旁边的两个引脚(在电路板边缘的角孔和 MicroSD 卡插槽之间的两个矩形引脚),将骁龙重置为恢复映像。
如果一切都失败了,你可能需要向 intrinsyc 求助。
设备无剩余空间
有时 使 Atlflight_eagle_default 上传
上传失败:
未能将 'px4' 复制到 '/home/linaro/px4':设备上没有剩余空间
如果 ramdump 填满磁盘,就会出现这种情况。清理方法如下
rm -rf /var/log/ramdump/*
此外,日志可能已经占满了空间。要删除它们,请执行
rm -rf /root/log/*
未定义 PLT 符号
_FDtest
如果在尝试启动 px4 程序时在 mini-dm 上看到以下输出,则表示需要 更新 ADSP 固件:
[08500/03] 05:10.960 HAP:45:undefined PLT symbol _FDtest (689) /libpx4muorb_skel.so 0303 symbol.c
其他东西
如果您更改了源代码,大概是添加了功能,您会看到 未定义 PLT 符号 ...
则表示链接失败。
- 函数的声明和定义是否一一对应?
- 您的代码是否真的被编译了?模块是否在 cmake 配置
- 添加的)文件是否包含在
CMakeLists.txt
? - 尝试将其添加到 POSIX 编译中,然后运行编译。POSIX 链接器会在编译/链接时通知您链接错误。
krait 更新参数 XXX 启动失败
ERROR [platforms__posix__px4_layer] krait update param 297 失败 ERROR [platforms__posix__px4_layer] krait update param 646 失败 px4 启动。ERROR [muorb] Initialize 调用 uorb fastrpc initalize 方法错误。ERROR [muorb] ERROR:FastRpcWrapper 未初始化
如果在启动 px4 时遇到类似上述的错误,请尝试
- 升级 Linux 映像
- 和 更新 ADSP 固件.另外,请尝试在本地 Linux 而不是虚拟机上执行此操作。已经有 报告 在虚拟机中使用时似乎无法正常工作。
- 则 重建 px4 软件首先完全删除现有固件 repo,然后重新克隆它 如这里所述
- 最后 重建并重新运行
- 的可执行位
/usr/local/qr-linux/q6-admin.sh
已设定:adb shell chmod +x /usr/local/qr-linux/q6-admin.sh
ADSP 重新启动
如果 mini-dm 控制台突然显示大量 INIT 输出,说明 ADSP 端已经崩溃。其原因并不明显,例如可能是某些分段故障、空指针异常等。
mini-dm 控制台输出通常如下所示:
[08500/02] 20:32.332 进程传感器启动,ID=1 0130 main.c [08500/02] 20:32.337 mmpm_register:用于 USM ADSP 内核 12 的 MMPM 客户端 0117 UltrasoundStreamMgr_Mmpm.cpp [08500/02] 20:32.338 ADSP License DB: 已存储 ID 为 164678 的许可证验证函数。0280 adsp_license_db.cpp [08500/02] 20:32.338 AvsCoreSvc:StartSvcHandler 进入 0518 AdspCoreSvc.cpp [08500/02] 20:32.338 AdspCoreSvc:启动成功 0534 AdspCoreSvc.cpp [08500/02] 20:32.342 DSPS INIT 0191 sns_init_dsps.c [08500/02] 20:32.342 INIT DONE 0224 sns_init_dsps.0224 sns_init_dsps.c [08500/02] 20:32.342 Sensors Init : waiting(1) 0160 sns_init_dsps.c [08500/02] 20:32.342 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.342 THRD CREATE: Thread=0x39 Name(Hex)= 53, 4e, 53, 5f, 53, 4d, 47, 52 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x38 Name(Hex)= 53, 4e, 53, 5f, 53, 41, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x37 Name(Hex)= 53, 4e, 53, 5f, 53, 43, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x35 Name(Hex)= 53, 4e, 53, 5f, 50, 4d, 0, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x34 Name(Hex)= 53, 4e, 53, 5f, 53, 53, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x33 Name(Hex)= 53, 4e, 53, 5f, 44, 45, 42, 55 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 Sensors Init : ///////////init once completed/////////// 0169 sns_init_dsps.c [08500/02] 20:32.342 loading BLSP configuration 0189 blsp_config.c [08500/02] 20:32.343 Sensors DIAG F3 Trace Buffer Initialized 0260 sns_init_dsps.c [08500/02] 20:32.345 INIT DONE 0224 sns_init_dsps.c [00053/03] 20:32.345 不支持的算法服务 id 0953 sns_scm_ext.c [08500/02] 20:32.346 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.347 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.347 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.546 HAP:159:unable to open the specified file path 0167 file.c [08500/04] 20:32.546 打开 /usr/share/data/adsp/blsp.config 失败 0204 blsp_config.c [08500/04] 20:32.546 QDSP6 Main.c: blsp_config_load() 失败 0261 main.c [08500/02] 20:32.546 Loaded default UART-BAM mapping 0035 blsp_config.c [08500/02] 20:32.546 UART tty-1: BAM-9 0043 blsp_config.c [08500/02] 20:32.546 UART tty-2: BAM-6 0043 blsp_config.c [08500/02] 20:32.546 UART tty-3: BAM-8 0043 blsp_config.c [08500/02] 20:32.546 UART tty-4: BAM-2 0043 blsp_config.c [08500/02] 20:32.546 UART tty-5: BAM N/A 0048 blsp_config.c [08500/02] 20:32.546 UART tty-6: BAM N/A 0048 blsp_config.c [08500/02] 20:32.547 HAP:111:cannot find /oemconfig.so 0141 load.c [08500/03] 20:32.547 HAP:4211::error: -1: 0 == dynconfig_init(&conf, "security") 0696 sigverify.c [08500/02] 20:32.548 HAP:76:cannot find /voiceproc_tx.so 0141 load.c [08500/02] 20:32.550 HAP:76:cannot find /voiceproc_rx.so 0141 load.c
我的是 P1 还是 P2 电路板?
Snapdragon 上的丝网印刷内容如下
1DN14-25- H9550-P1 REV A 高通公司
如果您看到 H9550这意味着你有一块 P2 电路板!
请忽略上面写的 -P1。
据推测,P1 板没有出厂分区/映像,因此无法恢复到出厂状态。