OpenWrt 新增用户软件模块、IPK安装包流程
1).在源码的package目录下增加一个目录
2).在hello目录下添加src目录和files目录
3).src目录存放模块源码和源码编译Makefile
4).files目录存放模块的配置文件及启动脚本等
5).在hello顶级目录增加Makefile。此Makefile中包含编译脚本和安装脚本
6).patches 目录是补丁文件,相对于发布源码的变化的补丁文件。
实例
本实例以 SIMCOM-5G 模块的qmi 拨号软件模块为蓝本,simcom的5G模块工作在 NDIS状态使用系统的OpenWrt的qmi命令拨号兼容性还有一些问题,因此移植 simcom 提供的用户空间的工具移植到 OpenWRT系统。
第一步
把源码拷贝至 “package/network/utils” 路径下,重新命名为 simcom-cmd 文件夹,内容如下:
robot@ubuntu:~/OpenWrt/mtk7621-19.07/package$ ls network/utils/simcom-cmd/
Makefile src
源文件到放到改目录的src文件夹中,内容如下:
robot@ubuntu:~/OpenWrt/mtk7621-19.07/package$ ls network/utils/simcom-cmd/src/
default.script main.c MPQCTL.h MPQMUX.c qmi-proxy.c QMIThread.h README.md util.c
GobiNetCM.c Makefile MPQMI.h MPQMUX.h QMIThread.c QmiWwanCM.c udhcpc.c util.h
第二步
编写 makefile软件,内容如下:
robot@ubuntu:~/OpenWrt/mtk7621-19.07/package$ cat network/utils/simcom-cmd/Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=simcom-cm
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/simcom-cm
SECTION:=net
CATEGORY:=Network
TITLE:=simcom-command-userland
endef
define Package/simcom-cm/description
show simcom cm userland dail tools
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/simcom-cm/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/simcom-cm $(1)/bin
endef
$(eval $(call BuildPackage,simcom-cm))
修改src文件夹下的Makefile文件,内容如下:
robot@ubuntu:~/OpenWrt/mtk7621-19.07/package$ cat network/utils/simcom-cmd/src/Makefile
#CROSS-COMPILE =
#CC := $(CROSS-COMPILE)gcc
# Stolen from Linux build system
#comma = ,
try-run = $(shell set -e; ($(1)) >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")
cc-option = $(call try-run, $(CC) $(1) -c -xc /dev/null -o /dev/null,$(1),$(2))
CFLAGS ?= -s
WFLAGS := -Wall \
$(call cc-option,-Wextra) \
$(call cc-option,-Wwrite-strings) \
$(call cc-option,-Wno-sign-compare) \
$(call cc-option,-Wno-unused-function)
CFLAGS += $(WFLAGS)
simcom-cm_SOURCES = QmiWwanCM.c GobiNetCM.c main.c MPQMUX.c QMIThread.c util.c udhcpc.c
qmi-proxy_SOURCES = qmi-proxy.c
release: clean
$(CC) $(CFLAGS) ${simcom-cm_SOURCES} -o simcom-cm -lpthread -ldl
qmi-proxy:
$(CC) $(CFLAGS) ${qmi-proxy_SOURCES} -o qmi-proxy -lpthread -ldl
clean:
@-rm -rf simcom-cm qmi-proxy
第三步
通过 make menuconfig 选择 simcom-cm 模块,内容如下:
第五步
编写开机自启动 simcom-cm 拨号程序的脚本文件,内容如下:
robot@ubuntu:~/OpenWrt/mtk7621-19.07$ cat package/base-files/files/etc/init.d/simcom-cm
#!/bin/sh /etc/rc.common
START=85
STOP=15
start() {
echo " simcom-cm startup ... "
cd / && ./bin/simcom-cm &
return 0
}
stop() {
pid=`ps |grep simcom-cm |grep /bin/sh | awk '{print $1}'`
if [ -n "${pid}" ];then
kill ${pid}
fi
return 0
}
restart() {
echo " simcom-cmd do not restart command "
return 0
}
第六步
在 OpenWrt 中添加 5G interface 接口,内容如下:
在uci-default文件夹下的脚本,是 OpenWrt 系统开机后执行的缺省配置脚本。
第七步
编译 make -j4 V=sc , 并烧写源码至开发板验证。
此篇文章、前期没有实例说明步骤,现在把工作内容记录在此,以供参考。