(二)arm-a上華爲iot雲,移植虛擬機的文件到開發板,全網首發

上一篇文章已經在虛擬機上可以用華爲的sdk連接到iot雲端

我已經造好輪子,也不收費,希望大家多交流,每次下載點東西,一個兩個都要金幣的,很難受
我造好的輪子
現在我們把文件移植到開發板上

進行文件的編譯

先更改編譯器
在這裏插入圖片描述
由於arm是32位的系統,我們把-m64 刪掉
在這裏插入圖片描述

arm-linux-gcc: -lrt: linker input file unused because linking not done  //報錯

我們的編譯器過老,更換編譯器,之前的庫“libcrypto.so.1.1”、“libssl.so.1.1”和軟鏈接“libcrypto.so”、“libssl.so”,將“libpaho-mqtt3as.so”和“libpaho-mqtt3as.so.1” 也要更換

重新編譯

更換編譯器
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/arm/4.3.2/bin
export PATH=/usr/local/arm/5.4.0/usr/bin:$PATH
重新編譯OpenSSL
tar zxvf openssl-1.1.0g.tar.gz
cd openssl-1.1.0g/
./config no-asm shared --prefix=/home/book/openssl --cross-compile-prefix=arm-none-linux-gnueabi-

其中“prefix”是安裝目錄,“openssldir”是配置文件目錄,“shared”作用是生成動態鏈接庫(即.so庫)
修改Makefile,找到Makefile中的所有-m64的地方,然後刪除(應該只有兩處地方)。

make
make install

在配置的openssl安裝目錄下home/test/openssl找到lib目錄,有生成的庫文件:

“libcrypto.so.1.1”、“libssl.so.1.1”和軟鏈接“libcrypto.so”、“libssl.so”,請將這些文件拷貝到demo的lib文件夾下(同時將/home/test/openssl/include/openssl裏的內容拷貝到demo的include/openssl下)。

交叉編譯 MQTT paho.mqtt.c

現在更新了,要用最新的,不然會有證書錯誤
1.3

unzip paho.mqtt.c-master
cd paho.mqtt.c-master

修改Makefile。在133行添加openssl的鏈接目錄,注意改成你自己的路徑。
在這裏插入圖片描述
把195行、197行、199行、201行都改成對應的地址
在這裏插入圖片描述

make CC=arm-none-linux-gnueabi-gcc 

不行就加上 -lssl -lcrypto
報錯

o build/output/paho_c_version -lpaho-mqtt3a src/MQTTVersion.c -ldl
build/output/libpaho-mqtt3a.so: undefined reference to `be64toh'
build/output/libpaho-mqtt3a.so: undefined reference to `htobe16'
build/output/libpaho-mqtt3a.so: undefined reference to `htobe32'
build/output/libpaho-mqtt3a.so: undefined reference to `htobe64'
build/output/libpaho-mqtt3a.so: undefined reference to `be32toh'
build/output/libpaho-mqtt3a.so: undefined reference to `be16toh'

因爲交叉編譯器太老了,我後面改用5.4.0的
拷貝paho庫文件。
編譯完成後,可以在build/output目錄下看到編譯成功的庫。
當前SDK僅用到了libpaho-mqtt3as,請將“libpaho-mqtt3as.so”和“libpaho-mqtt3as.so.1”文件拷貝到demo的lib文件夾下。(同時回到paho源代碼路徑,進入src目錄,將MQTTAsync.h、MQTTClient.h、MQTTClientPersistence.h、MQTTProperties.h、MQTTReasonCodes.h、MQTTSubscribeOpts.h拷貝到demo的include/base文件夾下)。

最後編譯我們的demo_c

更改編譯鏈接
把-m64 刪掉
在這裏插入圖片描述

上板實驗

先把文件放入網絡文件系統

ping通網址

配置ip,新增路由

ifconfig eth0 192.168.170.52 
route add default gw 192.168.170.1

mount 開發板子

mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.170.51:/work/nfs_root /mnt

現在開發板已經有了我們的文件

DNS域名服務器IP配置

建立/etc/resolv.conf(DNS域名服務器IP配置)

內容可以從PC Linux上面copy過來,因爲PC Linux和開發板鏈接Internet所需要的DNS域名是一致的

示例內容可以如下:

nameserver 192.168.4.231
nameserver 223.5.5.5
nameserver 114.114.114.114

重啓開發板即可,再次配置
在這裏插入圖片描述
/加載庫文件

export LD_LIBRARY_PATH=./lib/
./MQTT_Demo.o //運行

報錯

libanl.so.1: cannot open shared object file: No such file or directory

在arm_none_linux- 編譯器下找到

find . -name "libanl.*" -o -name "*.pdf"

在這裏插入圖片描述
加入我們的庫文件
報錯

mqtt_connect() mqttClientCreateFlag = 1.
begin to connect the server.
connect failed: messageId 0, code -1, message TCP/TLS connect failure
mqtt_subscribe() error, subscribe failed, ret code -3, topic $oc/devices/5ee988f32bd89f02e9720561_981637988/sys/commands/#
subscribe topic error, result -1
mqtt_publish() error, publish result -3
publish data error, result -1

原因是華爲的加密文件有問題,那我們就不加密了
用MQTT的

 char *uri = "tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883";
 16 int port = 1883;

在這裏插入圖片描述

運行成功

在這裏插入圖片描述
在這裏插入圖片描述

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