欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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。

  1. 应用程序编译包的定义

    应用程序的编译包以 Package/开头,然后接着软件名,在 Package 定义中的软件名可以与软件包名不一样,而且可以多个定义。

  2. 内核驱动模块包的定义

    Linux 分为内核空间和用户空间。开发者开发的内核部分可以直接加入 Linux 的 Kernel程序,也可以生成内核模块以便需要时装入内核。OpenWrt 一般希望开发者生成内核模块,在 Linux 启动后自动装载或手工使用 insmod 命令装载。内核模块使用 KernelPackage 开头,其他与一般应用软件包基本相同。

  3. 使用定义

    完成前面定义后,必须使用 eval 函数实现各种定义。其格式为:

    
    # 对于一般应用软件包
    
    $(eval $(call Package,$(PKG_NAME)))
    
    # 对于内核驱动模块
    
    $(eval $(call KernelPackage,$(PKG_NAME)))
  4. 实例

    这里列举 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 函数实现各种定义
相关标签: 添加软件包