1. 程式人生 > 其它 >mosquitto庫(MQTT)移植到ARM

mosquitto庫(MQTT)移植到ARM

MQTT介紹

MQTT(訊息佇列遙測傳輸)是ISO 標準(ISO/IEC PRF 20922)下基於釋出/訂閱正規化的訊息協議。它工作在 TCP/IP協議族上,是為硬體效能低下的遠端裝置以及網路狀況糟糕的情況下而設計的釋出/訂閱型訊息協議,為此,它需要一個訊息中介軟體 。

MQTT是一個基於客戶端-伺服器的訊息釋出/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療裝置、智慧家居、及一些小型化裝置中已廣泛使用。

MQTT協議是為大量計算能力有限,且工作在低頻寬、不可靠的網路的遠端感測器和控制裝置通訊而設計的協議,它具有以下主要的幾項特性:

1、使用釋出/訂閱訊息模式,提供一對多的訊息釋出,解除應用程式耦合;
2、對負載內容遮蔽的訊息傳輸;
3、使用 TCP/IP 提供網路連線;
4、有三種訊息釋出服務質量:
  “至多一次”,訊息釋出完全依賴底層 TCP/IP 網路。會發生訊息丟失或重複。這一級別可用於如下情況,環境感測器資料,丟失一次讀記錄無所謂,因為不久後還會有第二次傳送。
  “至少一次”,確保訊息到達,但訊息重複可能會發生。
  “只有一次”,確保訊息到達一次。這一級別可用於如下情況,在計費系統中,訊息重複或丟失會導致不正確的結果。
5、小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網路流量;
6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制
(以上摘自百度百科)

移植mosquitto庫用於ARM開發板連線平臺伺服器,上傳資料。移植的mosquitto是1.6.9版本,該版本支援5.0、3.1.1、3.1版本MQTT協議。移植mosquitto庫前,先準備好ARM交叉工具鏈,下載mosquitto原始碼、uuid原始碼、openssl原始碼,mosquitto編庫依賴uuid、openssl庫。
mosquitto原始碼下載地址:https://mosquitto.org/files/source/
openssl原始碼下載地址:https://www.openssl.org/source/
uuid原始碼下載地址:https://sourceforge.net/projects/libuuid/

[email protected]:~/workspace/allwinner/A40i/download# ls
mosquitto-1.6.9.tar.gz  openssl-1.1.1h.tar.gz  libuuid-1.0.3.tar.gz  

編譯安裝

1.openssl
SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供祕密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通訊的保密性和可靠性,可在伺服器端和使用者端同時實現支援。已經成為Internet上保密通訊的工業標準。

 2006  tar zxvf openssl-1.1.1h.tar.gz 
 2018  cd openssl-1.1.1h/
 2035  ./config CC=arm-linux-gnueabihf-gcc  no-asm shared --prefix=/home/ybtxr/install/openssl-1.1.1g-arm openssldir=/home/ybtxr/install/openssl-1.1.1g-arm/ssl 
 2036  vi Makefile 
 2037  make -j8
 2041  make install

–prefix :指定 make install 後生成目錄的路徑,不修改此項則預設為 OPENSSLDIR
目錄(/usr/local/ssl)。
shared :生成動態連線庫。
no-asm: 是在交叉編譯過程中不使用匯編程式碼程式碼加速編譯過程,原因是它的彙編程式碼是對 arm 格式不支援的
如果 Makefile 中有 -m32 和-m64 就刪掉 -m32 和-m64

2.移植uuid庫
UUID是Universally Unique Identifier的縮寫,它是在一定的範圍內唯一的機器生成的識別符號,使用RFC規範
UUID 是一個128bit的數字,也可以表現為32個16進位制的字元,中間用”-”分割

3F2504E0-4F89-11D3-9A0C-0305E82C3301

其中的字母是16進製表示,大小寫無關。

  • 時間戳+UUID版本號,分三段佔16個字元(60bit+4bit),
  • Clock Sequence號與保留欄位,佔4個字元(13bit+3bit),
  • 節點標識佔12個字元(48bit),
 2049  tar zxvf libuuid-1.0.3.tar.gz 
 2050  cd  libuuid-1.0.3/
 2052  ./configure --prefix=/home/ybtxr/install/libuuid-1.0.3-arm CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf
 2053  make -j8
 2054  make install

3.移植Mosquitto庫

 2076  tar zxvf mosquitto-1.6.9.tar.gz 
 2077  cd  mosquitto-1.6.9/
 2078  ls
 2079  make WITH_SRVSRV=no CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ CFLAGS="-I /home/ybtxr/install/openssl-1.1.1g-arm/include -I /home/ybtxr/install/libuuid-1.0.3-arm/include -I/home/ybtxr/install/openssl-1.1.1g-arm/lib -I/home/ybtxr/install/libuuid-1.0.3-arm/lib"  LDFLAGS="-L /home/ybtxr/install/openssl-1.1.1g-arm/lib -L/home/ybtxr/install/libuuid-1.0.3-arm/lib -lssl -lcrypto -luuid"
 2080  make DESTDIR=/home/ybtxr/install/mosquitto1.6.9-arm install

至此,所有庫移植完成

在這裡插入圖片描述

將libuuid-1.0.3-arm、openssl-1.1.1g-arm、mosquitto1.6.9-arm資料夾複製到工程中,就可以使用了。libuuid-1.0.3-arm、openssl-1.1.1g-arm中包含有靜態庫與動態庫,但mosquitto1.6.9-arm中只有動態庫。