GPSD架构介绍及交叉编译和使用
一、功能介紹
GPSD是一系列管理GPS設備和其他用于導航與精確計時的傳感器的工具,包括航海自動識別系統(marine AIS (Automatic Identification System))的無線電廣播設備和電子羅盤。其中最主要的程序是一個叫做gpsd的服務守護進程,它管理這這些傳感器,并且在TCP/IP端口生成JSON流報告。其他的程序包括用來展示代碼模型和各種診斷工具的客戶端。
特點:
自動探測并識別GPS協議,同時支持多個GPS設備,并且可以動態進行設備控制
支持PPS并且與NTPD結合,實現時間服務
統一生成JSON流報告給上層客戶端
支持DBUS,共享內存以及本地SOCKET等方式與客戶端通訊,最大支持64個
提供豐富的組件及工具用來調試及測試
二、組件介紹
Gpsprof: 一個為錯誤統計和設備超時產生報告的分析器
Gpsctl: 一個調整設備設置的公共程序
Gpsdecode: 一個把傳感器日志批量轉換成可讀的JSON的程序
gpsfake:一個能夠連接任意數目的活動傳感器日志的測試套件,可以重復運行有錯誤報告的傳感器日志來重新產生特定的問題
cgps: GPS結果以圖形化顯示
gpsmon:GPS結果以圖形化顯示
三、軟件結構
gpsd的內部構造分成四個部分:驅動(drivers)、包嗅探器(packet sniffer)、核心庫(core library)和多路復用器(multiplexer)
驅動:把數據包解析成時間-位置-速度或者狀態信息、更改其模式或者波特率、探測設備亞型等的方法。輔助方法能夠支持驅動程序的控制操作,比如改變設備的串行速度
數據包嗅探器: 負責從串行輸入數據流挖掘數據包
核心庫: 管理一個與傳感器設備的會話,它負責根據嗅探器返回的包類型把每一個GPS連接切換到正確的設備驅動上
多路復用器: 用來處理客戶端會話和設備分配,負責把報告傳遞給客戶端、接收客戶端命令、響應熱插拔通知
四、數據流視圖
?
一些特點:
核心程序及庫,不使用malloc
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 |
六、總結
GPSD處理協議以及轉換為json到輸出,耗時1ms左右
使用NMEA0183,主要耗時在 一次結果輸出的27條數據總接收時間
使用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架构介绍及交叉编译和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于GPS的1PPS时间同步功能探索与测
- 下一篇: rt-thread 自动初始化机制分析-