penwrt中如何新建一个package包的方法

文章详细介绍了在OpenWRT环境中如何新建一个package包,包括在basesystem下添加用于工厂测试的包,创建package目录,编写Makefile,配置自启动脚本等步骤,涉及文件结构、编译规则和安装过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结openwrt中如何新建一个package包的方法


)

例如,需要在base system 选项下添加一个用于工厂测试的包
在这里插入图片描述

在代码目录的package下新建一个专门用于存放自开发的目录,然后将需要添加的包,都统一的放在里面。
这里新建的目录为zowee
在这里插入图片描述

然后在zowee目录下创建包名目录
在这里插入图片描述

包目录文件结构
在这里插入图片描述

创建一级目录 files src和文件Makefile
files目录下创建etc目录
etc目录下创建目录init.d 和文件myapp.conf
init.d目录下创建文件myapp
src目录下主要创建文件myapp.c 和Makefile

下面介绍每个文件的内容
etc目录的内容会被打包到具体的
mapp.conf存放自定义的配置信息,一般为空
init.d/myapp 配置该应用自启动和默认的控制方式
如下:
在这里插入图片描述

#!/bin/sh /etc/rc.common 通过脚本/etc/rc.common中的语句来执行shell命令
#Copyright © 2015 OpenWrt.org 版权信息,标记当前openwrt系统的版本
START=97 内核启动该应用的顺序标记为97
start() {
/usr/bin/myapp -C /etc/myapp.conf
}
启动改应用的命令包装到start()下,可以通过prolinecmd start 启动应用,这里
/etc/myapp.conf文本中内容通过传参传递到应用main()函数中。

stop() {
killall myapp
}
关闭myapp这个应用的进程

restart() {
stop
sleep 1
start
}
重新开启myapp这个应用。

src/Makefile 文件
all: prolinecmd
prolinecmd:
$(CC) $(CFLAGS) -o $@ myapp.c netport_circle.c -Wall
clean:
rm -f prolinecmd
这个Makefile描述了prolinecmd这个应用生成的规则
all: prolinecmd 目标all 依赖prolinecmd
$(CC) $(CFLAGS) -o $@ myapp.c netport_circle.c -Wall
$(CC) 编译工具CC
$(CFLAGS) 编译时的标志
-o 表示以可执行文件的方式生成
$@ 全部目标 这里是prolinecmd
myapp.c netport_circle.c 被编译的文件
-Wall 编译出错时输出必要打印
clean: rm -f prolinecmd
make clean时执行的动作为删除prolinecmd

./Makefile 文件
include $(TOPDIR)/rules.mk

PKG_NAME:=prolinecmd
PKG_VERSION:=
PKG_RELEASE:=1

PKG_SOURCE:=
PKG_SOURCE_URL:=
PKG_MD5SUM:=
PKG_FLAGS:=nonshared

PKG_BUILD_DIR := ( B U I L D D I R ) / (BUILD_DIR)/ (BUILDDIR)/(PKG_NAME)
include $(INCLUDE_DIR)/package.mk

define Package/prolinecmd
SECTION:=utils
CATEGORY:=Base system
TITLE:=prolinecmd app for zowee
endef

define Package/prolinecmd/description
This is my firist package
endef

define Build/Configure
endef

#define Build/Prepare
#mkdir -p KaTeX parse error: Expected 'EOF', got '#' at position 17: …PKG_BUILD_DIR) #̲(CP) ./src/* $(PKG_BUILD_DIR)/
#endef

define Build/Compile
$(MAKE) -C ( P K G B U I L D D I R )   C C = " (PKG_BUILD_DIR) \ CC=" (PKGBUILDDIR) CC="(TARGET_CC)"
CFLAGS=“ ( T A R G E T C F L A G S ) − W a l l "   L D F L A G S = " (TARGET_CFLAGS) -Wall" \ LDFLAGS=" (TARGETCFLAGS)Wall" LDFLAGS="(TARGET_LDFLAGS)”
endef

define Package/prolinecmd/install
$(CP) ./files/* $(1)/
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/prolinecmd $(1)/usr/bin/
endef

$(eval $(call BuildPackage,prolinecmd))

解析:
include $(TOPDIR)/rules.mk 将顶层目录下的rules.mk 导入到当前的文件中来
PKG_NAME:=prolinecmd 软件包的名字
PKG_VERSION:= 软件包的版本
PKG_RELEASE:=1 这个makefile的版本
PKG_REV 要下载软件包在git或这svn上版本号
PKG_SOURCE:= 要下载软件包的名字,一般是由PKG_NAME和PKG_VERSION组成
PKG_SOURCE_URL:= 下载这个软件包的链接
PKG_MD5SUM:= 数据完整性校验码
PKG_FLAGS:=nonshared 软件包标志
PKG_BUILD_DIR := ( B U I L D D I R ) / (BUILD_DIR)/ (BUILDDIR)/(PKG_NAME)
BUILD_DIR:$(TOPDIR)/build_dir 实际编译路径
include ( I N C L U D E D I R ) / p a c k a g e . m k I N C L U D E D I R : (INCLUDE_DIR)/package.mk INCLUDE_DIR : (INCLUDEDIR)/package.mkINCLUDEDIR(TOPDIR)/include 依赖的安装包执行下载操作

define Package/prolinecmd
SECTION:=utils
CATEGORY:=Base system
TITLE:=prolinecmd app for zowee
endef
描述软件包在menuconfig和ipkg中的信息
SECTION:=utils 软件包类型
CATEGORY:=Base system 软件包在menuconfig里的位置
TITLE:=prolinecmd app for zowee 软件包标题

define Package/prolinecmd/description
This is my firist package
endef
软件包的描述信息

define Build/Configure
endef
如果源代码编译前需要configure或者调用配置脚本,那么就定义这个宏。

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
编译之前的准备动作,创建PKG_BUILD_DIR目录,然后将源码复制到这个目录中

define Build/Compile
$(MAKE) -C ( P K G B U I L D D I R )   C C = " (PKG_BUILD_DIR) \ CC=" (PKGBUILDDIR) CC="(TARGET_CC)"
CFLAGS=“ ( T A R G E T C F L A G S ) − W a l l "   L D F L A G S = " (TARGET_CFLAGS) -Wall" \ LDFLAGS=" (TARGETCFLAGS)Wall" LDFLAGS="(TARGET_LDFLAGS)”
endef
源代码编译规则,默认已经设置好,一般不需要自定义,只有当需要指定一些特殊的规则时采用到。

define Package/prolinecmd/install
$(CP) ./files/* $(1)/
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/prolinecmd $(1)/usr/bin/
endef

软件包的安装方法,主要就是将一系列编译好的文件、启动脚本、UCI配置文件等拷贝到指定位置

$(1):表示:
staging_dir\target-arm_cortex-a9_musl_eabi\root-triductor
$(CP) ./files/* ( 1 ) / 将 f i l e s 下的目录文件移动到 (1)/ 将files下的目录文件移动到 (1)/files下的目录文件移动到(1)目录下
$(INSTALL_DIR) $(1)/usr/bin :修改该目录的权限
$(INSTALL_BIN) $(PKG_BUILD_DIR)/prolinecmd $(1)/usr/bin/ 将生成的文件复制到这个目录下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值