openwrt之添加OpenWrt软件包概述
程序员文章站
2022-05-29 10:48:24
...
第一章 添加OpenWrt软件包概述
添加软件包
在源码 package 目录下创建一个目录,以包含该软件包的各种信息和与 OpenWrt 建立联系的文件。然后创建一个 Makefile 与 OpenWrt 建立联系,Makefile 需要遵循 OpenWrt 的约定。另外可以创建一个 patchs 目录保存 patch 文件,对下载的源代码进行适量修改。
Makefile引入文件
OpenWrt 使用三个 makefile 的子文件,分别为:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk
# 由这些 makefile 子文件确立软件包加入 OpenWrt 的方式和方法
编写软件包基本信息
软件包的信息均以 PKG_开头:
PKG_NAME 表示软件包名称,将在 menuconfig 和 ipkg 可以看到。
PKG_VERSION 表示软件包版本号。
PKG_RELEASE 表示 Makefile 的版本号。
PKG_SOURCE 表示源代码的文件名。
PKG_SOURCE_URL 表示源代码的下载网站位置。@SF 表示在 sourceforge 网站,@GNU 表示在 GNU 网站,还有@GNOME、@KERNEL。
PKG_MD5SUM 表示源代码文件的效验码。用于核对软件包是否正确下载。
PKG_CAT 表示源代码文件的解压方法。包括 zcat, bzcat, unzip 等。
PKG_BUILD_DIR 表示软件包编译目录。它的父目录为$(BUILD_DIR)。如果不指定,默认为$(BUILD_DIR)/$( PKG_NAME)/$( PKG_VERSION)。
编译包定义
应用程序和内核驱动模块的定义不一样。应用程序软件包使用 Package,內核驱动模块使用 KernelPackage。
-
应用程序编译包的定义
应用程序的编译包以 Package/开头,然后接着软件名,在 Package 定义中的软件名可以与软件包名不一样,而且可以多个定义。
-
内核驱动模块包的定义
Linux 分为内核空间和用户空间。开发者开发的内核部分可以直接加入 Linux 的 Kernel程序,也可以生成内核模块以便需要时装入内核。OpenWrt 一般希望开发者生成内核模块,在 Linux 启动后自动装载或手工使用 insmod 命令装载。内核模块使用 KernelPackage 开头,其他与一般应用软件包基本相同。
-
使用定义
完成前面定义后,必须使用 eval 函数实现各种定义。其格式为:
# 对于一般应用软件包 $(eval $(call Package,$(PKG_NAME))) # 对于内核驱动模块 $(eval $(call KernelPackage,$(PKG_NAME)))
-
实例
这里列举 widora 的 web配网页的驱动
#
Copyright (C) 2013-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:=webui
PKG_RELEASE:=1
PKG_BUILD_DIR:=(BUILD_DIR)/(PKG_NAME) #使用(PKG_NAME)只是做一个标示,并非真正使用(PKG_NAME)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk
define Package/webui
SECTION:=Ralink SDK Mango #包的类型
CATEGORY:=Ralink SDK Mango #表示分类,在 make menuconfig 的菜单下将可以找到
TITLE:=setwifi by web #软件包简短描述
DEPENDS := #与其他软件的依赖
endef
define Package/webui/description #软件包的详细描述
This package provides UCI for wifi Configuration.
endef
define Build/Prepare #编译准备方法
echo
endef
define Build/Compile #编译方法
echo
endef
define Package/webui/install #软件包的安装方法
$(INSTALL_DIR) $(1)/www/
$(CP) ./files/www/* $(1)/www/
endef
(eval (call BuildPackage,webui)) #使用 eval 函数实现各种定义
上一篇: jQuery-----实现显示隐藏效果
下一篇: 第一java程序包含执行的流程