Mosquitto庫依賴libuuid和openssl庫,所以我們在交叉編譯Mosquitto之前需要先交叉編譯他所需要的依賴庫,這里作者已經(jīng)把需要的源碼都下載好了,大家可以在這個文檔的目錄下找到。不建議大家下載和我不一致的版本,可能會出問題。 mqtt源碼下載頁: 1. 交叉編譯uuid庫 我們把uuid的源碼拷貝到Ubuntu,作者是拷貝拷貝到了/home/topeet/mqtt下面,如下圖所示: 輸入以下命令,解壓源碼并進入解壓生成的文件夾: tar -vxf libuuid-1.0.3.tar.gz 如下圖所示: 然后我們在/opt/下創(chuàng)建一個名為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目錄下 配置編譯參數(shù) 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 :生成動態(tài)連接庫。 no-asm: 是在交叉編譯過程中不使用匯編代碼代碼加速編譯過程,原因是它的匯編代碼是對arm格式不支持的 如果Makefile中有 -m32和-m64 就刪掉 -m32和-m64,但是我的Makefile中沒有,就沒管這個。 如下圖所示: 修改openss文件夾下的Makefile里面的編譯器參數(shù)如下 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就已經(jīng)交叉編譯完成了 4.把mosquitto移植到開發(fā)板 在Ubuntu的/home/topeet/下創(chuàng)建一個mqtt-arm的文件夾,如下圖所示: 我們進入我們安裝的mosquitto-1.5目錄下,作者這里是安裝在了/opt/mosquitto-arm下,如下圖所示: 我們把當前路徑下的/etc/mosquitto/下的mosquitto.conf.example文件拷貝到我們在/home/topeet/下創(chuàng)建一個mqtt-arm的文件夾,命令如下: cp mosquitto.conf.example /home/topeet/mqtt-arm/ 如下圖所示 然后我們返回到mosquitto的安裝目錄,我們進到安裝目錄下mosquitto-1.5/usr/local/bin下面,如下圖所示: 我們把這個目錄下所有文件拷貝到我們在/home/topeet/下創(chuàng)建一個mqtt-arm的文件夾,命令如下: cp ./* /home/topeet/mqtt-arm/ 如下圖所示: 然后我們返回到mosquitto的安裝目錄,我們進到安裝目錄下mosquitto-1.5/usr/local/sbin下面,如下圖所示: 我們把這個目錄下的mosquitto二進制文件拷貝到我們在/home/topeet/下創(chuàng)建一個mqtt-arm的文件夾,命令如下: 然后我們返回到mosquitto的安裝目錄,把libuuid-1.0.3 mosquitto-1.5 openssl這個三個文件夾全部拷貝到我們在/home/topeet/下創(chuàng)建一個mqtt-arm的文件夾,命令如下: cp -rf libuuid-1.0.3/ mosquitto-1.5/ openssl/ /home/topeet/mqtt-arm 如下圖所示: 然后我們返回到/home/topeet/下面,使用tar命令打包我們創(chuàng)建的mqtt-arm文件,命令如下: tar -czf mqtt-arm.tar.gz mqtt-arm/ 如下圖所示: 我們把這個壓縮包拷貝到開發(fā)板的根目錄,這里以4412開發(fā)板為例,其他開發(fā)板操作一致 我們解壓這個壓縮包,并進入到解壓生成的目錄,如下圖所示: 我們把開發(fā)板當前目錄下libuuid-1.0.3/ mosquitto-1.5/ openssl/三個文件下的lib下的庫全部放到開發(fā)板的/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 如下圖所示: 然后我們把剩下的幾個文件全部放在開發(fā)板的/bin目錄下,命令如下: mv mosquitto mosquitto_* /bin 如下圖所示: 然后我們返回到開發(fā)板的根目錄,刪掉我們 mqtt-arm.tar.gz的壓縮包和解壓生成的mqtt-arm文件夾就可以了。 5.測試是否移植成功 以開發(fā)板作為服務器,Ubuntu開倆個終端作為訂閱者和發(fā)布者進行測試 1,我們打開/etc下面的mosquitto.conf文件, 修改里面的第40行為 user root 并取消注釋。如下圖所示: 2.使用以下命令啟動開發(fā)板的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.在文檔的第一步,我們就已經(jīng)在Ubuntu上安裝了mosquitto,所示我們直接打開一個終端,訂閱主題,命令如下: mosquitto_sub -h 192.168.3.28 -t "mqtt" -v 其中參數(shù)-h是指定要連接的MQTT服務器,這里的192.168.3.28為開發(fā)板的IP,大家要根據(jù)自己的IP來設置,-t訂閱主題,此處為mqtt,所以主題為mqtt,-v打印更多的調(diào)試信息。 如下圖所示: 5.在Ubuntu上打開另一個終端(注意這里又打開了一個終端),發(fā)布主題,命令如下: mosquitto_pub -h 192.168.3.28 -t "mqtt" -m "Hello MQTT" 其中參數(shù)-h是指定要連接的MQTT服務器,這里的192.168.3.28為開發(fā)板的IP,大家要根據(jù)自己的IP來設置,-t訂閱主題,此處為mqtt,-m指定消息內(nèi)容,這里發(fā)送的是 Hello MQTT。 如下圖所示: 通信成功以后,我們會在另一個終端看到我們通過開發(fā)板作為mqtt服務器轉發(fā)來的Hello MQTT 信息,如下圖所示: |