OpenWrt package - BuildPackage

一. 前言

        该文章所涉及到的知识都来自OpenWrt Wiki官网。OpenWrt的软件编译模板系统使软件移植到OpenWrt变得非常简单,如果在一个典型的package目录下,我们可以发现3个东西:package/Makefile,package/patches,package/files。

package/patches:目录不是必须的,一般是为了bug修复和减少目标文件的尺寸。

package/Makefile:是必须存在的,它提供了下载和编译package实际所需的步骤。

package/files:package需要用到的文件(不是.c和.h文件)。

例子如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=bridge
PKG_VERSION:=1.0.6
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/bridge-utils-$(PKG_VERSION)
PKG_SOURCE:=bridge-utils-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/bridge
PKG_HASH:=9b7dc52656f5cbec846a7ba3299f73bd

include $(INCLUDE_DIR)/package.mk

define Package/bridge
  SECTION:=base
  CATEGORY:=Network
  TITLE:=Ethernet bridging configuration utility
  #DESCRIPTION:=This variable is obsolete. use the Package/name/description define instead!
  URL:=http://bridge.sourceforge.net/
endef

define Package/bridge/description
  Ethernet bridging configuration utility Manage ethernet bridging; a way to connect networks together to form a larger network.
endef

define Build/Configure
  $(call Build/Configure/Default,--with-linux-headers=$(LINUX_DIR))
endef

define Package/bridge/install
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/brctl/brctl $(1)/usr/sbin/
endef

$(eval $(call BuildPackage,bridge))

二. BuildPackage变量

1. PKG_NAME

        package的名称。避免在包名称中使用下划线,否则可能导致难以发现的错误,导致编译失败。

2. PKG_VERSION

        我们要下载的package的版本号。

3. PKG_RELEASE

        package的Makefile的版本。

4. PKG_BUILD_DIR

        编译package的路径。

5. PKG_SOURCE

        原始源的文件名,一般是tarball包。

6. PKG_SOURCE_URL

        从什么地方下载源文件。

7. PKG_HASH

        下载源的checksum,用来校验该包是否是官方的。

8. PKG_CAT

        解压源的方式(zcat,bzcat,unzip)。

9. PKG_BUILD_DEPENDS

        需要在此包之前构建的包,如果需要确保包在生成时有权访问另一个包,要使用该选项,指定目录名称(例如openssl),而不是二进制包(libopenssl)。此构建变量仅建立构建时依赖项。使用DEPENDS建立运行时依赖项。

10. PKG_CONFIG_DEPENDS

        指定哪些配置选项会影响生成配置,并应触发Build/Configure的重新运行

三. BuildPackage宏

1. Package/

SECTION:软件包的类型,当前未被使用。

CATEGORY:出现在menuconfig中的哪个菜单。

TITLE:软件包的简短描述。

DESCRIPTION:(已弃用)包的详细描述。

URL:下载原始软件包的链接。

MAINTAINER:软件包的维护者。

DEPENDS:可选的,编译该软件包前哪个软件包必须被编译和安装。

EXTRA_DEPENDS:可选的,运行时依赖项,不构建,仅添加到CONTROL文件中。

2. Package/conffiles

        此包安装的配置文件列表,每行一个文件。文件列表部分不应缩进:部分中没有前导制表符或空格。

3. Package/description

        软件包的描述。

4. Build/Prepare

        一组解压或patch源的命令,你可以放心地将其保留为未定义。

5. Build/Configure

        如果源不使用配置或具有正常的配置脚本,则可以将其保留为未定义。否则你可以在此处放置configure命令或使用$(call Build/Configure/Default)。

6. Build/Compile

       如何编译源代码,在大多数情况下,应该将其设置为未定义。

7. Build/Install

        如何安装已编译的源代码。

8. Build/InstallDev

        针对编译软件包(静态库,头文件)所需的文件,但在目标设备上没有用。

9. Build/Clean

        对于要清理过程中需要清除的东西。

10. Package/install

        一组命令,用于将文件复制到由 $(1)目录表示的 ipkg 中。作为源代码,您可以使用将从解压缩和编译的源代码安装的相对路径,或者$(PKG_INSTALL_DIR),这是上面步骤中Build/Install的文件结束的地方。

        某些定义以"Package/"为前缀,而其他定义只是"Build"的原因是可以从单个源生成多个包。OpenWrt在假设每个包Makefile一个源的情况下工作,但你可以根据需要将该源拆分为任意数量的包。由于你只需要编译一次源代码,所以有一个全局集合"Build"定义,但你可以通过向BuildPackage添加额外的调用来添加任意数量的"Package/"定义 - 参见dropbear包的例子。

四. 总结

        本文总结了OpenWrt BuildPackage的变量和宏以及他们的详细的使用方法。

你可能感兴趣的:(openwrt,linux)