首页 > 其他分享 >如何在OpenWrt平台新增一个package

如何在OpenWrt平台新增一个package

时间:2023-11-29 15:47:11浏览次数:33  
标签:monitor package app 平台 endef PKG OpenWrt DIR MONITOR

如何在OpenWrt平台新增一个package

目录

背景

OpenWrt的编译框架做得非常好,只需要在固定的目录下,放置通用的Makefile,其编译框架即可正常读取该Makefile,并用指定的toolchains开始编译。

自定义的pacakge可以放在SDK根目录下的这个位置openwrt/package

每个package的目录架构都是相似的:

package
├── files
├── Makefile
└── src
    ├── main.c
    └── Makefile

本文所描述的是上层的Makefile。

示例

既可以编译用户进态的模块,也可以编译内核模块。以下为具体示例。

用户态模块

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=app-monitor
PKG_VERSION:=1.0

include $(INCLUDE_DIR)/package.mk

define Package/app-monitor
  SECTION:=XXXX
  CATEGORY:=XXXX platform apps
  MAINTAINER:=XXXX
  DEPENDS:=
  TITLE:=App module test for XXXX
endef

define Package/app-monitor/Description
	This is a app module test for XXXX
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) -u ./src/* $(PKG_BUILD_DIR)/
endef

define Package/app-monitor/install
	$(INSTALL_DIR) $(1)/etc
	$(INSTALL_DATA) ./filesystem/etc/app-monitor.config $(1)/etc

	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/app-monitor $(1)/usr/bin
endef

$(eval $(call BuildPackage,app-monitor))

内核模块

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=app-monitor
PKG_VERSION:=0.1

define KernelPackage/app-monitor
  SECTION:=XXXX
  CATEGORY:=XXXX platform apps
  MAINTAINER:=XXXX
  DEPENDS:=
  TITLE:=app-monitor
  FILES:=$(PKG_BUILD_DIR)/app_monitor.ko
  AUTOLOAD:=$(call AutoLoad,99,app_monitor)
endef

define KernelPackage/app-monitor/description
	This is a kernel package which used by xxx
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) -u ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)"		\
		CROSS_COMPILE="$(TARGET_CROSS)" \
		ARCH="$(LINUX_KARCH)"		\
		SUBDIRS="$(PKG_BUILD_DIR)"	\
		EXTRA_CFLAGS="$(EXTRA_CFLAGS)"	\
		modules
endef

define KernelPackage/app-monitor
  SECTION:=XXXX
  CATEGORY:=XXXX platform apps
  MAINTAINER:=XXXX
  DEPENDS:=
  TITLE:=app-monitor
  FILES:=$(PKG_BUILD_DIR)/app_monitor.ko
  AUTOLOAD:=$(call AutoLoad,99,app_monitor)
endef

define KernelPackage/app-monitor/description
	This is a kernel package which used by xxx
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) -u ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
	$(MAKE) -C $(LINUX_DIR) M=$(PKG_BUILD_DIR) $(strip $(MAKE_OPTS))
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include
	$(CP) $(PKG_BUILD_DIR)/app_monitor.h $(1)/usr/include
endef

define KernelPackage/app-monitor/install
	$(INSTALL_DIR) $(1)/etc
endef

$(eval $(call KernelPackage,$(PKG_NAME)))

用户态模块+内核模块

即可以在同一个package中,同时包含两种。

有了上面两个例子,下面的例子更多是拼接,最核心在于后面的BuildPackageKernelPackage

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=app-monitor
PKG_VERSION:=1.0

include $(INCLUDE_DIR)/package.mk

define KernelPackage/$(PKG_NAME)
  SECTION:=XXXX
  CATEGORY:=XXXX platform apps
  MAINTAINER:=XXXX
  DEPENDS:=
  TITLE:=app monitor kernel module for you
  FILES:=$(PKG_BUILD_DIR)/ipt/app-monitor.ko
  AUTOLOAD:=$(call AutoLoad,99,app-monitor)
endef

TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib
TARGET_LDFLAGS += -L$(STAGING_DIR)/lib

PKG_DEPENDS:=+libc

APP_MONITOR_MAKE_OPTS:=

ifeq ($(CONFIG_XXXX), y)
EXTRA_CFLAGS += -I$(LINUX_DIR)/../bcmkernel/include
EXTRA_CFLAGS += -DCONFIG_XXXX=1
endif

TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib 

APP_DPI_MAKE_OPTS+= \
        CROSS_COMPILE=$(KERNEL_CROSS) \
        ARCH=$(LINUX_KARCH) \
		KERNELPATH="$(LINUX_SRC_DIR)" \
        KBUILDPATH=$(LINUX_DIR) \
        EXTRA_CFLAGS="$(EXTRA_CFLAGS)"	\
        SUBDIRS=$(PKG_BUILD_DIR)

define Package/$(PKG_NAME)
  SECTION:=XXXX
  CATEGORY:=XXXX platform apps
  TITLE:=app-monitor application for XXXX
  MAINTAINER:=XXXX
  DEPENDS:=$(PKG_DEPENDS)
endef

define KernelPackage/$(PKG_NAME)/description
	This is a kernel module which do xxxxx thing
endef

define Package/$(PKG_NAME)/Description
	This is app-monitor module for XXXX
endef

define Package/$(PKG_NAME)/config
	config PACKAGE_MONITOR_VENDOR
		string "monitor vendor name(must be setted)"
		default name_of_provider

	config PACKAGE_MONITOR_VERSION
		string "monitor version(must be setted)"
		default X.Y.Z

	config PACKAGE_MONITOR_USE_IPT
		bool "monitor module use iptables to intercept packet"
		default n
endef

CONFIG_PACKAGE_MONITOR_USE_IPT ?= y
ifeq ($(CONFIG_PACKAGE_MONITOR_USE_IPT), y)
SRC_PATH:=ipt
PKG_DEPENDS+=+iptables
else #CONFIG_PACKAGE_MONITOR_USE_IPT

TARGET_LDFLAGS += -lpcap
PKG_DEPENDS+=+libnetfilter-queue +libpcap
SRC_PATH:=frame

endif #CONFIG_PACKAGE_MONITOR_USE_IPT

MONITOR_VENDOR ?= $(CONFIG_PACKAGE_MONITOR_VENDOR)
MONITOR_VERSION ?= $(CONFIG_PACKAGE_MONITOR_VERSION)
MONITOR_USE_IPT ?= $(CONFIG_PACKAGE_MONITOR_USE_IPT)

$(info $$MONITOR_VENDOR is [${MONITOR_VENDOR}])
$(info $$MONITOR_VERSION is [${MONITOR_VERSION}])
$(info $$MONITOR_USE_IPT is [${MONITOR_USE_IPT}])

INSTALL_BIN:=$(SRC_PATH)/app-monitor
INSTALL_LIB:=$(SRC_PATH)/libxt_monitor.so

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) -u ./src-$(MONITOR_VENDOR)/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
	$(MAKE) -C $(PKG_BUILD_DIR)/$(SRC_PATH) \
    $(TARGET_CONFIGURE_OPTS) \
	TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \
	TARGET_CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
	MONITOR_VERSION="$(MONITOR_VERSION)" \
	CC="$(TARGET_CC)"
	$(MAKE) -C $(LINUX_DIR) M=$(PKG_BUILD_DIR)/$(SRC_PATH) MONITOR_VERSION=$(MONITOR_VERSION) $(strip $(APP_MONITOR_MAKE_OPTS))
endef

define Package/$(PKG_NAME)/install
	$(CP) -rf ./filesystem/* $(1)/

	$(INSTALL_DIR) $(1)/usr/lib/monitor/
	$(CP) $(PKG_BUILD_DIR)/sdk-$(MONITOR_VERSION)/lib/* $(1)/usr/lib/monitor/

	$(INSTALL_DIR) $(1)/usr/bin
	$(if $(INSTALL_BIN),$(CP) $(foreach bin,$(INSTALL_BIN),$(PKG_BUILD_DIR)/$(bin)) $(1)/usr/bin/)

	$(INSTALL_DIR) $(1)/usr/lib/iptables
	$(if $(INSTALL_LIB),$(CP) $(foreach lib,$(INSTALL_LIB),$(PKG_BUILD_DIR)/$(lib)) $(1)/usr/lib/iptables/)
endef

define Build/InstallDev

endef

define KernelPackage/$(PKG_NAME)/install
	$(INSTALL_DIR) $(1)/etc
endef

$(eval $(call KernelPackage,$(PKG_NAME)))

$(eval $(call BuildPackage,$(PKG_NAME)))

当然,具体到src目录下,用户态模块仍然用Makefile控制,而内核模块则Kbuild控制:

MODULE_NAME = app-monitor
$(MODULE_NAME)-objs := app-monitor-kmod.o component.o
obj-m += $(MODULE_NAME).o

标签:monitor,package,app,平台,endef,PKG,OpenWrt,DIR,MONITOR
From: https://www.cnblogs.com/adam-ma/p/17864998.html

相关文章

  • 发烧平台完全是AMD的天下!32核心线程撕裂者者7970X评测:内容创作性价比之选
    一、前言:32核心的线程撕裂者7970X11月20日,AMD正式发布了Zen4架构的线程撕裂者处理器,成为了无可争议的最强处理器,我们快科技也同步带来了HEDT发烧平台旗舰型号,64核心128线程线程撕裂者7980X的首发评测。除了线程撕裂者7980X之外,AMD同时还发布了32核心的线程撕裂者7970X、24核心......
  • 万媒易发:以RPA自动化和AIGC为基础实现多平台分发
    引言在当今数字化时代,信息传播的速度越来越快,多平台分发成为了内容创作者们必须面对的重要挑战之一。为了解决这一难题,我们可以借助RPA(RoboticProcessAutomation)自动化和AIGC(ArtificialIntelligenceGeneratedContent)技术,实现高效的多平台内容发布。本文将介绍如何利用“万媒......
  • OpenFunction faas 平台
    特性云无关插件化架构支持同步以及异步函数独特的异步函数支持直接通过eventsource消息事件支持通过源码生成兼容oci标准的容器镜像灵活的缩放能力支持基于metrics的异步函数缩放基于dapr的baas集成基于k8sgatewayapi的流量管理灵活简单使用的事件管理框架对......
  • 多平台小程序编译适配,超级App的基建利器?
    随着科技的飞速发展,我们正迅速进入一个以数字化为主导的时代。 在这个时代中,通信、小程序、快应用、云服务器等平台连接类软件如火如荼的发展,手机、手表、AR/VR眼镜等智能移动穿戴设备迅速的升级迭代,5G、芯片、算力等基础设施也以月的速度在全球竞相发布捷报。 与用户生......
  • 智慧农田可视化大数据综合管理平台方案,EasyCVR助力农业高质量发展
    一、背景需求我国是农业大国,农业耕地面积达到20亿亩。随着物联网、大数据、人工智能等新一代信息技术与农业农村加速融合,以及国家对农业的重视,智慧农业对于我国农业现代化建设和实施乡村振兴战略具有重大引领与推动作用。在传统农田生产中,由于缺乏有效的智慧农田管理系统,比如数据......
  • 国标GB28181安防监控平台EasyCVR周界入侵AI算法检测方案
    在城市管理和公共安全领域,安全视频监控的重要性日益凸显。AI视频智能分析平台基于深度学习和计算机视觉技术,利用AI入侵算法,能够实时、精准地监测周界入侵行为。TSINGSEE青犀在视频监控及AI视频智能分析领域拥有深厚的技术积累和丰富的实践经验。其中,AI视频智能分析系统/AI算法中......
  • 以创新促发展,工作流开发平台流辰信息与您一起拓前程!
    作为专业的低代码技术平台服务商,流辰信息坚持以客户需求为主导,以开源促创新,坚持瞄准市场发展动向,提升自主研发能力,用专业的态度、敬业的职业精神为不同行业提供更具价值的低代码技术平台整套解决方案。进入数字化发展新时代,工作流开发平台服务商流辰信息将与您一起共拓新前程,共描......
  • 关于CCD视觉对位系统+UVW对位平台计算公式算法举例
    UVW对位平台介绍:1、这是一种可以实现以平面上任意一点为中心,进行旋转运动的装置,并可沿着任意的方向平移。2、此平台和视觉CCD纠偏系统对接在一起,可以很快完成高精度的纠偏工作,重复定位精度一般可达±1μm;下述算法由平台相对移动量可算出各执行器(U、V、W)的移动量。回转中心(at,bt)指......
  • NetBird 开源网络管理平台 部署安装
    NetBird简介NetBird是一个建立在WireGuard之上的开源网络管理平台,它允许计算机、设备和服务器通过快速加密隧道直接连接,无需配置或中央V*N服务器。它使专用网络变得安全,并创建了一个专用网络,在没有手动配置和专家的情况下应用安全实践。NetBird网络普遍适用于云、本地、边缘和容器......
  • 直播平台搭建,自定义气泡效果(BubbleView)
    直播平台搭建,自定义气泡效果(BubbleView) packagecom.example.myapplication;importandroid.content.Context;importandroid.graphics.BlurMaskFilter;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.......