一、功能介绍

GPSD是一系列管理GPS设备和其他用于导航与精确计时的传感器的工具,包括航海自动识别系统(marine AIS (Automatic Identification System))的无线电广播设备和电子罗盘。其中最主要的程序是一个叫做gpsd的服务守护进程,它管理这这些传感器,并且在TCP/IP端口生成JSON流报告。其他的程序包括用来展示代码模型和各种诊断工具的客户端。

特点:

  1. 自动探测并识别GPS协议,同时支持多个GPS设备,并且可以动态进行设备控制

  2. 支持PPS并且与NTPD结合,实现时间服务

  3. 统一生成JSON流报告给上层客户端

  4. 支持DBUS,共享内存以及本地SOCKET等方式与客户端通讯,最大支持64个

  5. 提供丰富的组件及工具用来调试及测试

二、组件介绍

  1. Gpsprof: 一个为错误统计和设备超时产生报告的分析器

  2. Gpsctl: 一个调整设备设置的公共程序

  3. Gpsdecode: 一个把传感器日志批量转换成可读的JSON的程序

  4. gpsfake:一个能够连接任意数目的活动传感器日志的测试套件,可以重复运行有错误报告的传感器日志来重新产生特定的问题

  5. cgps: GPS结果以图形化显示

  6. gpsmon:GPS结果以图形化显示

三、软件结构

  1. gpsd的内部构造分成四个部分:驱动(drivers)、包嗅探器(packet sniffer)、核心库(core library)和多路复用器(multiplexer)

  2. 驱动:把数据包解析成时间-位置-速度或者状态信息、更改其模式或者波特率、探测设备亚型等的方法。辅助方法能够支持驱动程序的控制操作,比如改变设备的串行速度

  3. 数据包嗅探器: 负责从串行输入数据流挖掘数据包

  4. 核心库: 管理一个与传感器设备的会话,它负责根据嗅探器返回的包类型把每一个GPS连接切换到正确的设备驱动上

  5. 多路复用器: 用来处理客户端会话和设备分配,负责把报告传递给客户端、接收客户端命令、响应热插拔通知

四、数据流视图

一些特点:

  1. 核心程序及库,不使用malloc

  2. Json解析不使用malloc,不支持null对象以及数组必须定长

五、性能测试

cpu: imx8

gps: ublox F9P

系统:Linux

Ublox支持GPS+BD+Galileo+GLONASS,最高460800波特率,支持10HZ,8HZ选择

协议格式

波特率

频率

一次输出包条数

GPSD处理时间(从串口接收到JSON输出)

NMEA0183

230400

10HZ

27,耗时50ms

50ms

Ublox 二进制协议

230400

10HZ

2(间隔10ms)

1ms

六、总结

  1. GPSD处理协议以及转换为json到输出,耗时1ms左右

  2. 使用NMEA0183,主要耗时在 一次结果输出的27条数据总接收时间

  3. 使用ublox私有协议,每次只有2条数据,其间隔10ms,性能很高

七、GPSD配置

gpsd默认使用scons编译,主要配置文件为Sconstruct

选项配置集中在boolopts,包括驱动列表,时间服务,外部库依赖,通讯方式等等

boolopts = (# GPS protocols("ashtech",       False,  "Ashtech support"),("earthmate",     False,  "DeLorme EarthMate Zodiac support"),("evermore",      False,  "EverMore binary support"),("fury",          False,  "Jackson Labs Fury and Firefly support"),("fv18",          False,  "San Jose Navigation FV-18 support"),("garmin",        False,  "Garmin kernel driver support"),("garmintxt",     False,  "Garmin Simple Text support"),("geostar",       False,  "Geostar Protocol support"),("greis",         False,  "Javad GREIS support"),("itrax",         False,  "iTrax hardware support"),("mtk3301",       False,  "MTK-3301 support"),("navcom",        False,  "Navcom NCT support"),("nmea0183",      True,  "NMEA0183 support"),
....# Time service("ntpshm",        True,  "NTP time hinting via shared memory"),("ntp",           True,  "NTP time hinting support"),("oscillator",    True,  "Disciplined oscillator support"),("pps",           True,  "PPS time syncing support"),# Export methods("dbus_export",   False,  "enable DBUS export support"),("shm_export",    True,  "export via shared memory"),("socket_export", True,  "data export over sockets"),}

串口配置,连接客户端个数,python环境 和 交叉编译相关:

其中sysroot,target指定为交叉编译路径和名称

nonboolopts = (("fixed_port_speed", '230400',             "fixed serial port speed"),("fixed_stop_bits",  '1',             "fixed serial port stop bits"),("gpsd_group",       def_group,     "privilege revocation group"),("gpsd_user",        "nobody",      "privilege revocation user",),("max_clients",      '64',          "maximum allowed clients"),("max_devices",      '4',           "maximum allowed devices"),("prefix",           "/media/gwind/gcode/opensource/gpsd-3.19/out",  "installation directory prefix"),("python_coverage",  "coverage run", "coverage command for Python progs"),("python_libdir",    "",            "Python module directory prefix"),("qt_versioned",     "",            "version for versioned Qt"),("sysroot",          "/opt/fsl-imx-wayland/4.14-sumo/sysroots/aarch64-poky-linux","cross-development system root"),("target",           "aarch64-poky-linux",   "cross-development target"),("target_python",    "python",      "target Python version as command"),
)

关于库,主要有两个:

libgpsd.a,主要是gpsd服务,gpsctl,gpsmon工具使用,包含功能更强大,可直接调用更底层功能

libgps.so,  对外提供的接口,通过unix sock,共享内存以及dbus等方式,主要有相关工具集使用,比如cgps,gpspipe等

八、使用

gpsd 运行, -N 前台运行,-D 指定log等级,-n 不等待客户端连接

服务运行之后,客户端可直接使用,默认都是链接的静态库,没有环境依赖

如cgps:

gpsmon:

GPSD架构介绍及交叉编译和使用相关推荐

  1. Pixhawk系统架构介绍

    前段时间导师叫我做扑翼无人机,工程上需要实现的,能够通过程控飞起来,感觉难度挺大.先从研究PX4开始,打算一步步理解透整个PX4的框架,机型的适配.旋翼.固定翼的姿态控制,新机型的添加等等.不知道能不 ...

  2. MindSpore Lite整体架构介绍

    MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: • 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindS ...

  3. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...

  4. 微服务架构介绍和RPC框架对比

    微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...

  5. 伍哥原创之豆荚商城商品搜索架构介绍

    为什么80%的码农都做不了架构师?>>>    豆荚商城(www.dou55.com)商品搜索架构介绍 1,需求分析 伍哥所在的豆荚商城是一个家电行业的B2C网上零售平台.作为这样一 ...

  6. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5

    扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...

  7. Kafka系列一之架构介绍和安装

    Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...

  8. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  9. 互联网直播云计算架构介绍

    互联网直播云计算架构介绍 原文:互联网直播云计算架构介绍 思想 拆分 URL分层 模块化 云服务结构 ECS 云计算的优势 -------------------------------------- ...

最新文章

  1. 我愿意参加计算机俱乐部的英文,如果你是一英语俱乐部的负责人你会组织什么活动...
  2. rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
  3. yii表单ajax验证,yii2 modal弹窗之ActiveForm ajax表单异步验证
  4. C语言实例第1期:十进制数转换二进制数
  5. 相机参数设置程序_自定义拍摄模式怎么设置?教你学会相机设置。
  6. java 打包zip下载_java web 将文件打包成 .zip后 肿么自动弹出下载框提示并下载?
  7. [react] 有在项目中使用过Antd吗?说说它的好处
  8. 项目开发--高级功能汇总
  9. LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)
  10. vue-cli打包后的思索--代码优化
  11. 华为云推UGO:一手抓结构迁移,一手抓SQL转换
  12. svn:Cannot negotiate authentication mechanism
  13. opencv 识别长方形_利用opencv识别并提取图片中的矩形
  14. iRecognizer号码扫描开发实录
  15. 用java代码模拟鼠标双击事件
  16. 利用InVEST模型的生境质量模块计算生境质量
  17. pdf 分形 张济忠_分形理论及其研究方法.pdf
  18. 程序员的超大文件下载方法
  19. 删库是不可能删库的,这辈子是不可能删库的
  20. windows的ping测试脚本

热门文章

  1. MongoDB索引实战技巧
  2. jQuery入口函数的四种写法【1分钟掌握】
  3. Java 的 IO 很复杂?用思路带领你去battle他!
  4. linux deepin/ubuntu安装flameshot火焰截图
  5. 【收藏】GeoMesa-HBase原理篇——写入过程
  6. Linux xsync分发脚本完整内容
  7. Spring Boot 2.X 使用@Cacheable时注意事项
  8. Mybatis注解实现一对多关联映射(@Many)
  9. Mybatis中的resultType与resultMap区别
  10. Centos7入侵分析:分析SSH登录日志