項目實戰-廣域網智能家居-把mosquitto移植到arm上

Mosquitto庫依賴libuuid和openssl庫,所以我們在交叉編譯Mosquitto之前需要先交叉編譯他所需要的依賴庫,這裏作者已經把需要的源碼都下載好了,大家可以在這個文檔的目錄下找到。不建議大家下載和我不一致的版本,可能會出問題。

mqtt源碼下載頁:

 

 

1. 交叉編譯uuid庫

    我們把uuid的源碼拷貝到Ubuntu,作者是拷貝拷貝到了/home/topeet/mqtt下面,如下圖所示:

輸入以下命令,解壓源碼並進入解壓生成的文件夾:

tar -vxf libuuid-1.0.3.tar.gz

如下圖所示:

然後我們在/opt/下創建一個名爲mosquitto-arm的文件夾,命令如下:

mkdir -p /opt/mosquitto-arm

如下圖所示:

配置源碼,我們在解壓生成的uuid庫的文件夾輸入以下命令:

./configure --prefix=/opt/mosquitto-arm/libuuid-1.0.3 CC=arm-none-linux-gnueabi-gcc --host=arm-linux

如下圖所示:

最後,編譯並安裝,命令如下:

make

make install

編譯並安裝成功後會在我們設置/opt/mosquitto-arm下得到一個libuuid的文件夾

2. 交叉編譯openssl庫

解壓壓縮包進進入解壓後的目錄

tar -vxf openssl-1.0.2g.tar.gz

cd openssl-1.0.2g

如下圖所示。作者是放在了/home/topeet/mqtt目錄下

配置編譯參數

setarch i386 ./config no-asm shared --prefix=/opt/mosquitto-arm/openssl/

setarch i386:聲明生成的是32位CPU,如果是64位CPU則去除該部分

 --prefix :指定make install後生成目錄的路徑,不修改此項則默認爲OPENSSLDIR目錄(/usr/local/ssl)。

shared :生成動態連接庫。

no-asm: 是在交叉編譯過程中不使用匯編代碼代碼加速編譯過程,原因是它的彙編代碼是對arm格式不支持的

如果Makefile中有 -m32和-m64 就刪掉 -m32和-m64,但是我的Makefile中沒有,就沒管這個。

如下圖所示:

修改openss文件夾下的Makefile裏面的編譯器參數如下

CC= arm-none-linux-gnueabi-gcc

AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r

RANLIB= arm-none-linux-gnueabi-ranlib

NM= arm-none-linux-gnueabi-nm

如下圖所示:

編譯並安裝

make

make install

編譯並安裝成功後會在我們設置/opt/mosquitto-arm下得到一個openssl的文件夾

3.交叉編譯mosquitto

解壓壓縮包進進入解壓後的目錄

tar -vxf mosquitto-1.5.tar.gz

cd mosquitto-1.5

如下圖所示。作者是放在了/home/topeet/mqtt目錄下

編譯源碼

make WITH_SRV=no CC=arm-none-linux-gnueabi-gcc  CXX=arm-none-linux-gnueabi-g++  CFLAGS="-I /opt/mosquitto-arm/openssl/include -I /opt/mosquitto-arm/libuuid-1.0.3/include -I /opt/mosquitto-arm/openssl/lib -I /opt/mosquit/to-arm/libuuid-1.0.3/lib" LDFLAGS="-L /opt/mosquitto-arm/openssl/lib -L /opt/mosquitto-arm/libuuid-1.0.3/lib -lssl -lcrypto -luuid"

注意,如果大家這裏安裝uuid和openssl的庫的時候路徑和我的不一致,要把-I和-L指定的庫和頭文件的路徑修改成自己對應安裝uuid和openssl庫的路徑,否則編譯不過去。

如下圖所示:

編譯成功如下圖所示:

安裝,命令如下

make DESTDIR=/opt/mosquitto-arm/mosquitto-1.5 install

編譯並安裝成功後會在我們設置/opt/mosquitto-arm下得到一個mosquitto-1.5的文件夾

至此,我們mosquitto就已經交叉編譯完成了

4.把mosquitto移植到開發板

在Ubuntu的/home/topeet/下創建一個mqtt-arm的文件夾,如下圖所示:

我們進入我們安裝的mosquitto-1.5目錄下,作者這裏是安裝在了/opt/mosquitto-arm下,如下圖所示:

我們把當前路徑下的/etc/mosquitto/下的mosquitto.conf.example文件拷貝到我們在/home/topeet/下創建一個mqtt-arm的文件夾,命令如下:

cp mosquitto.conf.example /home/topeet/mqtt-arm/

 如下圖所示

然後我們返回到mosquitto的安裝目錄,我們進到安裝目錄下mosquitto-1.5/usr/local/bin下面,如下圖所示:

我們把這個目錄下所有文件拷貝到我們在/home/topeet/下創建一個mqtt-arm的文件夾,命令如下:

cp ./*  /home/topeet/mqtt-arm/

如下圖所示:

然後我們返回到mosquitto的安裝目錄,我們進到安裝目錄下mosquitto-1.5/usr/local/sbin下面,如下圖所示:

我們把這個目錄下的mosquitto二進制文件拷貝到我們在/home/topeet/下創建一個mqtt-arm的文件夾,命令如下:

然後我們返回到mosquitto的安裝目錄,把libuuid-1.0.3  mosquitto-1.5  openssl這個三個文件夾全部拷貝到我們在/home/topeet/下創建一個mqtt-arm的文件夾,命令如下:

cp -rf libuuid-1.0.3/ mosquitto-1.5/ openssl/ /home/topeet/mqtt-arm

 如下圖所示:

然後我們返回到/home/topeet/下面,使用tar命令打包我們創建的mqtt-arm文件,命令如下:

tar -czf mqtt-arm.tar.gz mqtt-arm/

如下圖所示:

我們把這個壓縮包拷貝到開發板的根目錄,這裏以4412開發板爲例,其他開發板操作一致

我們解壓這個壓縮包,並進入到解壓生成的目錄,如下圖所示:

 

我們把開發板當前目錄下libuuid-1.0.3/ mosquitto-1.5/ openssl/三個文件下的lib下的庫全部放到開發板的/lib下面,命令如下:

 cp -rf libuuid-1.0.3/lib/* mosquitto-1.5/usr/local/lib/*  openssl/lib/*   /lib/    

如下圖所示:

我們把當前目錄下mosquitto.conf.example複製一個和他一模一樣名爲mosquitto.conf的文件放在/etc下面,命令如下:

cp mosquitto.conf.example   /etc/mosquitto.conf    

如下圖所示:

然後我們把剩下的幾個文件全部放在開發板的/bin目錄下,命令如下:

 mv mosquitto mosquitto_*  /bin   

如下圖所示:

然後我們返回到開發板的根目錄,刪掉我們 mqtt-arm.tar.gz的壓縮包和解壓生成的mqtt-arm文件夾就可以了。

5.測試是否移植成功

以開發板作爲服務器,Ubuntu開倆個終端作爲訂閱者和發佈者進行測試

1,我們打開/etc下面的mosquitto.conf文件, 修改裏面的第40行爲 user root 並取消註釋。如下圖所示:

2.使用以下命令啓動開發板的mosquitto服務

 mosquitto -d -c /etc/mosquitto.conf

如下圖所示:

查詢是否啓動成功,命令如下:

 ps -ef |grep  mosquitto

如果成功入下圖所示:

 

3.使用ping命令ping一下自己的Ubuntu,這裏一定要ping通,否則下面的步驟不成功,命令如下,IP爲自己Ubuntu的ip

ping 192.168.3.34 -c 3

成功ping通如下圖所示:

4.在文檔的第一步,我們就已經在Ubuntu上安裝了mosquitto,所示我們直接打開一個終端,訂閱主題,命令如下:

mosquitto_sub -h 192.168.3.28 -t "mqtt" -v

 其中參數-h是指定要連接的MQTT服務器,這裏的192.168.3.28爲開發板的IP,大家要根據自己的IP來設置,-t訂閱主題,此處爲mqtt,所以主題爲mqtt,-v打印更多的調試信息。

如下圖所示:

5.在Ubuntu上打開另一個終端(注意這裏又打開了一個終端),發佈主題,命令如下:

mosquitto_pub -h 192.168.3.28 -t "mqtt" -m "Hello MQTT"

其中參數-h是指定要連接的MQTT服務器,這裏的192.168.3.28爲開發板的IP,大家要根據自己的IP來設置-t訂閱主題,此處爲mqtt,-m指定消息內容,這裏發送的是

Hello MQTT

如下圖所示:

通信成功以後,我們會在另一個終端看到我們通過開發板作爲mqtt服務器轉發來的Hello MQTT

信息,如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章