【T113-s3】Tina SDK 增加paho.mqtt.c 包
Tina 原生包不支持添加 Mqtt,现在手动添加进去。就用1.3.13,其他的CMake版本不适配。
·
文章目录
Tina 原生包不支持添加 Mqtt,现在手动添加进去。
在tina4.0中添加三方包分两步:
- (1) 将下载好的paho.mqtt.c-1.3.13.zip放到dl中。(https://codeload.github.com/eclipse-paho/paho.mqtt.c/zip/refs/tags/v1.3.13)
- (2) 在package/libs/libpaho-mqtt中新建Makefile。
就用1.3.13,其他的CMake版本不适配。
这样就可以在 make menuconfig 里面选择了:

下载:git clone https://github.com/eclipse/paho.mqtt.c.git
文件:tina-sdk/package/libs/libpaho-mqtt/Makefile
#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
# 库基本信息
PKG_NAME:=libpaho-mqtt
PKG_VERSION:=1.3.13
PKG_RELEASE:=1
PKG_LICENSE:=EPL-2.0
PKG_SOURCE_URL:=https://github.com/eclipse-paho/paho.mqtt.c/archive/refs/tags/v$(PKG_VERSION).zip
PKG_SOURCE:=paho.mqtt.c-$(PKG_VERSION).zip
CMAKE_INSTALL:=1
PKG_HASH:=07a875...
PKG_BUILD_DIR := $(COMPILE_DIR)/paho.mqtt.c-$(PKG_VERSION)
include $(BUILD_DIR)/package.mk
include $(BUILD_DIR)/cmake.mk
TARGET_LDFLAGS += -ldl
# 定义库在 menuconfig 中的信息
define Package/libpaho-mqtt
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Eclipse Paho MQTT C Client Library
URL:=https://github.com/eclipse/paho.mqtt.c
DEPENDS:=+libc +libpthread +libopenssl
endef
define Package/libpaho-mqtt/description
Eclipse Paho MQTT C client library for MQTT 3.1/3.1.1
endef
# CMake 配置选项
define Build/Configure
$(call Build/Configure/Default, \
-DPAHO_WITH_SSL=TRUE \
-DPAHO_BUILD_STATIC=FALSE \
-DPAHO_BUILD_SHARED=TRUE \
-DPAHO_BUILD_DOCUMENTATION=FALSE \
-DPAHO_BUILD_SAMPLES=FALSE \
-DPAHO_ENABLE_TESTING=FALSE \
)
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/src/*.h $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
#$(CP) $(PKG_BUILD_DIR)/build/output/libpaho-mqtt3*.so* $(1)/usr/lib/
# 从 ipkg-install 目录复制库文件(标准 OpenWrt 路径)
$(CP) $(PKG_BUILD_DIR)/ipkg-install/usr/lib/libpaho-mqtt3*.so* $(1)/usr/lib/
endef
# 安装库到目标系统
define Package/libpaho-mqtt/install
$(INSTALL_DIR) $(1)/usr/lib
# $(CP) $(PKG_BUILD_DIR)/build/output/libpaho-mqtt3*.so* $(1)/usr/lib/
# 从 ipkg-install 目录复制库文件(标准 OpenWrt 路径)
$(CP) $(PKG_BUILD_DIR)/ipkg-install/usr/lib/libpaho-mqtt3*.so* $(1)/usr/lib/
endef
# 注意:这一行必须顶格写,前面不能有任何空格或制表符!
$(eval $(call BuildPackage,libpaho-mqtt))
测试–可以独立编译的完整工程
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13$ mkdir mqtt-test
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13$ cd mqtt-test/
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ cp -r ../paho.mqtt.c-1.3.13/src ./
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ ls
src
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ cp src/samples/MQTTAsync_subscribe.c ./
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ ls
MQTTAsync_subscribe.c src
.
├── build
├── main.c # MQTTAsync_subscribe.c 这个例程改的 main.c
├── Makefile
├── mqtt-sub-test
├── src
├── t113-pi # tina-sdk/out/t113-pi/staging_dir 整个都拷贝过来依赖和库都在这里面
└── toolchain-sunxi-musl # 交叉编译器也拷贝过来
Makefile文件:
#
# Makefile
#
CC = ./toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-gcc
LVGL_DIR_NAME ?= mqtt-test
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare
LDFLAGS ?= -lpaho-mqtt3a
BIN = mqtt-sub-test
# 定义build目录
BUILD_DIR = build
# 最终可执行文件的路径
TARGET = $(LVGL_DIR)/$(BIN)
TARGETCONFIG_PREFIX = ./t113-pi/staging_dir/target
INCLUDES += -I$(TARGETCONFIG_PREFIX)/usr/include
CFLAGS += $(INCLUDES)
STAGING_DIR :=TARGETCONFIG_PREFIX
export STAGING_DIR
LIB_PATH += $(TARGETCONFIG_PREFIX)/usr/lib/
LDFLAGS += -L$(LIB_PATH)
# 创建build目录的函数
CREATE_BUILD_DIR = @mkdir -p $(BUILD_DIR)
#Collect the files to compile
MAINSRC = ./main.c
OBJEXT ?= .o
# 获取所有源文件列表
ALL_SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
# 生成对应的目标文件路径(保持目录结构)
AOBJS = $(patsubst %.S,$(BUILD_DIR)/%.o,$(ASRCS))
COBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(CSRCS))
MAINOBJ = $(patsubst %.c,$(BUILD_DIR)/%.o,$(MAINSRC))
# 所有目标文件
OBJS = $(AOBJS) $(COBJS) $(MAINOBJ)
# 创建必要的子目录
DIRS = $(sort $(dir $(OBJS)))
all: dirs default
# 创建所有需要的子目录
dirs:
@mkdir -p $(DIRS)
@echo "Created directories: $(DIRS)"
# 编译规则:从源文件编译到build目录下的对应位置
$(BUILD_DIR)/%.o: %.c
@mkdir -p $(dir $@)
@$(CC) $(CFLAGS) -c $< -o $@
@echo "CC $< -> $@"
$(BUILD_DIR)/%.o: %.S
@mkdir -p $(dir $@)
@$(CC) $(CFLAGS) -c $< -o $@
@echo "AS $< -> $@"
default: $(OBJS)
@mkdir -p $(BUILD_DIR)
$(CC) -o $(TARGET) $(OBJS) $(LDFLAGS)
@echo "LINK $(TARGET)"
@echo "Build completed: $(TARGET)"
clean:
rm -rf $(BUILD_DIR)
@echo "Clean completed"
# 调试信息:显示所有源文件和目标文件
info:
@echo "Source files:"
@echo " ASRCS: $(ASRCS)"
@echo " CSRCS: $(CSRCS)"
@echo " MAINSRC: $(MAINSRC)"
@echo ""
@echo "Object files in $(BUILD_DIR):"
@echo " OBJS: $(OBJS)"
@echo ""
@echo "Directories to create:"
@echo " $(DIRS)"
@echo ""
@echo "Target: $(TARGET)"
# 打印具体的编译规则信息
debug:
@echo "Compilation rules:"
@for src in $(ALL_SRCS); do \
echo "$$src -> $(BUILD_DIR)/$${src%.*}.o"; \
done
报错
更多推荐
所有评论(0)