news 2026/4/23 22:53:25

保姆级教程:在Ubuntu上为AM5728开发板交叉编译GPSD 3.18(附libusb/ncurses依赖库完整配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu上为AM5728开发板交叉编译GPSD 3.18(附libusb/ncurses依赖库完整配置)

AM5728开发板GPSD 3.18交叉编译实战:从依赖库配置到避坑指南

在嵌入式Linux开发中,GPSD作为一款开源的GPS数据解析服务,能够将原始GPS数据转换为标准格式,为定位应用提供统一接口。然而在为AM5728这类ARM架构开发板进行交叉编译时,依赖库的配置往往成为拦路虎。本文将手把手带你完成GPSD 3.18的完整编译过程,特别针对libusb和ncurses等依赖库的"坑点"提供解决方案。

1. 环境准备与工具链配置

1.1 基础开发环境搭建

在Ubuntu 20.04 LTS系统上,首先需要安装必要的编译工具和交叉编译器:

sudo apt update sudo apt install -y build-essential python2.7

对于AM5728开发板,推荐使用TI官方提供的SDK中的工具链。如果使用系统自带工具链,安装命令如下:

sudo apt install -y gcc-arm-linux-gnueabihf

验证工具链是否安装成功:

arm-linux-gnueabihf-gcc --version

1.2 Scons构建工具安装

GPSD使用Scons作为构建系统,安装命令如下:

sudo apt install -y scons

注意:虽然GPSD 3.18官方文档推荐使用Python 2.7,但新版本已支持Python 3。如果遇到兼容性问题,可以通过以下命令安装Python 2.7:

sudo apt install -y python2.7 python-is-python2

2. 依赖库的交叉编译实战

2.1 libusb编译与配置

libusb是USB设备通信的基础库,编译时需要特别注意平台兼容性问题:

  1. 下载并解压libusb源码:
wget https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.22/libusb-1.0.22.tar.bz2 tar -xjf libusb-1.0.22.tar.bz2 cd libusb-1.0.22
  1. 配置编译选项:
./configure CC=arm-linux-gnueabihf-gcc \ --host=arm-linux \ --prefix=$PWD/arm_install \ --disable-udev

关键参数说明:

参数作用必要性
--host指定目标平台必须
--prefix设置安装目录推荐
--disable-udev避免udev依赖可选
  1. 编译并安装:
make -j$(nproc) make install

编译完成后,将生成的库文件复制到GPSD源码目录:

cp -r arm_install/lib/* /path/to/gpsd-3.18/

2.2 ncurses库的"tic/toe"陷阱解决

ncurses库的交叉编译过程中会遇到tic/toe工具的平台兼容问题,这是最常见的坑点之一。

  1. 下载并解压ncurses源码:
wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz tar -xzf ncurses-6.1.tar.gz cd ncurses-6.1
  1. 配置编译环境:
./configure CC=arm-linux-gnueabihf-gcc \ --host=arm-linux \ --prefix=$PWD/arm_install \ --with-shared
  1. 遇到tic工具错误的解决方案:

当执行make install时,会报错提示tic工具无法执行。这是因为生成的tic是ARM架构的,无法在x86主机上运行。解决方法如下:

# 查找系统自带的x86版本tic find /usr -name "tic" # 复制到ncurses源码目录 cp /usr/bin/tic ./progs/ cp /usr/bin/toe ./progs/ cp /usr/bin/infocmp ./progs/
  1. 完成编译安装:
make -j$(nproc) make install
  1. 处理libtinfo软链接:
cd arm_install/lib ln -s libncurses.so.6 libtinfo.so.6 ln -s libtinfo.so.6 libtinfo.so

3. GPSD核心编译与配置

3.1 源码准备与配置

  1. 下载GPSD 3.18源码:
wget http://download-mirror.savannah.gnu.org/releases/gpsd/gpsd-3.18.tar.gz tar -xzf gpsd-3.18.tar.gz cd gpsd-3.18
  1. 创建scons缓存配置文件:
cat > .scons-option-cache <<EOF libgpsmm = False python = False prefix = '/usr/local/gpsd' target = 'arm-linux-gnueabihf' EOF

3.2 编译选项详解

GPSD提供了丰富的编译选项,根据实际需求进行配置:

scons timeservice=yes \ # 启用时间服务 nmea0183=yes \ # 支持NMEA 0183协议 fixed_port_speed=9600 \ # 设置默认串口波特率 fixed_stop_bits=1 # 设置停止位

常用选项说明:

  • dbus:是否启用DBus支持
  • bluez:蓝牙GPS设备支持
  • qt:Qt绑定支持
  • strip:是否剥离调试符号

3.3 编译与安装

  1. 执行编译:
scons -j$(nproc)
  1. 运行测试(可选):
scons check
  1. 安装到目标目录:
scons install
  1. 如果需要USB热插拔支持:
scons udev-install

4. 开发板部署与验证

4.1 文件系统准备

将编译生成的文件部署到开发板需要以下步骤:

  1. 复制可执行文件:
scp /usr/local/gpsd/sbin/gpsd root@开发板IP:/usr/sbin/
  1. 复制依赖库:
scp /usr/local/gpsd/lib/libgps.so.23 root@开发板IP:/usr/lib/
  1. 创建必要的设备节点:
mknod /dev/gps0 c 240 0

4.2 配置文件调整

GPSD的配置文件通常位于/etc/default/gpsd,基本配置如下:

START_DAEMON="true" GPSD_OPTIONS="-n" DEVICES="/dev/ttyS2" USBAUTO="true"

4.3 常见问题排查

  1. 库版本不兼容
# 查看缺失的库 ldd /usr/sbin/gpsd # 解决方案 scp /path/to/missing/lib root@开发板IP:/usr/lib/
  1. 权限问题
# 确保用户有访问设备的权限 chmod 666 /dev/ttyS2
  1. 启动失败
# 查看详细日志 gpsd -N -D3 /dev/ttyS2

5. 高级配置与优化

5.1 与NTPD的时间同步配置

要启用GPSD的时间服务功能,需要在编译时开启timeservice选项,并在开发板上配置:

# ntp.conf配置 server 127.127.28.0 minpoll 4 maxpoll 4 fudge 127.127.28.0 time1 0.420 refid GPS

5.2 性能优化参数

在资源受限的嵌入式系统中,可以通过以下参数优化GPSD性能:

scons dbus=no \ # 禁用DBus bluez=no \ # 禁用蓝牙 qt=no \ # 禁用Qt strip=yes # 剥离调试符号

5.3 自定义输出格式

GPSD支持多种输出格式,可以通过cgps或gpsmon工具查看:

# JSON格式输出 gpsd -N -D2 -F /var/run/gpsd.sock

在实际项目中,GPSD的稳定运行往往需要结合硬件特性进行调整。例如在AM5728平台上,UART接口的时钟配置会影响GPS数据的接收稳定性。建议在系统启动脚本中加入以下命令:

# 设置UART时钟 devmem2 0x48020000 w 0x00000030 devmem2 0x48020070 w 0x00000000
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 22:50:48

用LVGL给STM32F103野火指南者做个简易仪表盘:从移植到UI实战

用LVGL给STM32F103野火指南者打造工业级仪表盘&#xff1a;从移植到动态数据可视化实战 当一块2.4英寸的LCD屏幕遇上STM32F103&#xff0c;再注入LVGL的图形灵魂&#xff0c;这个看似普通的开发板就能变身为智能家居中控或工业仪表。去年为某环保设备厂商开发气体监测终端时&am…

作者头像 李华
网站建设 2026/4/23 22:49:45

在RK3399上,用Qt+FFmpeg+MPP+RGA硬解RTSP流,我踩过的那些坑和填坑指南

在RK3399上构建QtFFmpegMPPRGA硬解RTSP流的避坑实战指南 当我在RK3399平台上尝试构建一个基于Qt的RTSP流媒体播放器时&#xff0c;最初以为这只是一个简单的库集成工作。然而&#xff0c;从FFmpeg的交叉编译到MPP解码器的内存泄漏&#xff0c;再到RGA格式转换的绿屏问题&#x…

作者头像 李华
网站建设 2026/4/23 22:49:41

Win11下VSCode+WSL2开发环境配置全攻略(含Ubuntu22.04安装避坑指南)

Win11下VSCode与WSL2开发环境高效配置指南 最近两年&#xff0c;越来越多的开发者开始将主力开发环境迁移到WSL2上。作为一个长期在Windows和Linux双系统间切换的老用户&#xff0c;我深刻理解这种开发方式带来的便利——既能享受Windows的办公生态&#xff0c;又能获得接近原生…

作者头像 李华