日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPSD架构介绍及交叉编译和使用

發布時間:2024/10/12 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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架构介绍及交叉编译和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。