zoukankan      html  css  js  c++  java
  • OpenWrt增加软件包

    变量名含义

    SECTION     //包的种类
    CATEGORY    //显示在menuconfig的哪个目录下
    SUBMENU     //menuconfig子目录
    TITLE       //简单的介绍
    DESCRIPTION //包的详细介绍
    URL         //源码所在的网络路径
    MAINTAINER  //维护者
    DEPENDS     //依赖包
    PKG_NAME        //软件包名称,将在menuconfig和ipkg可以看到
    PKG_VERSION     //软件版本号
    PKG_RELEASE     //Makefile的版本号
    PKG_SOURCE      //源代码的文件名
    PKG_MD5SUM      //源代码文件的效验码。用于核对软件包是否正确下载
    PKG_CAT         //源代码文件的解压方法 (zcat, bzcat, unzip)
    PKG_BUILD_DIR   //软件包编译目录。它的父目录为$(BUILD_DIR)。如果不指定,默认为$(BUILD_DIR)/$( PKG_NAME)$( PKG_VERSION)

    Package

    define Package/$(PKG_NAME)
        SECTION:=utils
        CATEGORY:=Utilities
        TITLE:=Helloworld -- prints a snarky message
    endef

    Build/Prepare
    编译准备方法。自己的程序全部放在src目录下。一般的准备方法:

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

    Build/Compile
    编译方法。如果不定义将使用默认的编译方法Build/Compile/Default。一般的定义方法:

    define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) 
            $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
    Endef

    Package/$(PKG_NAME)/install
    安装方法。举例:

    define Package/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/etc/init.d/
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/etc/init.d/
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/configs/hello.config $(1)/etc/
        $(INSTALL_CONF) $(PKG_BUILD_DIR)/configs/hello.config $(1)/etc/
    #   $(CP) $(PKG_BUILD_DIR)/tools/{xxx} $(1)/usr/sbin/ //默认权限,而且只是简单复制
    endef

    INSTALL_xxx:安装到PKG_BUILD_DIR和文件系统目录下
    CP:只安装到PKG_BUILD_DIR目录下

    INSTALL_xxx变量在$(TOPDIR)/rules.mk中定义

    INSTALL_BIN:=install -m0755
    INSTALL_DIR:=install -d -m0755
    INSTALL_DATA:=install -m0644
    INSTALL_CONF:=install -m0600

    eval

    $(eval <text>)

    将text作为Makefile文件中的一部分

    call

    $(call BuildPackage,$(PKG_NAME))

    引用BuildPackage变量中的内容,并将BuildPackage内部的$(1)替换为PKG_NAME

    BuildPackage
    BuildPackage变量在$(INCLUDE_DIR)/package.mk中定义

    define BuildPackage
      $(Build/IncludeOverlay)
      $(eval $(Package/Default))
      $(eval $(Package/$(1)))
    
    ifdef DESCRIPTION
    $$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
    endif
    
    ifndef Package/$(1)/description
    define Package/$(1)/description
        $(TITLE)
    endef
    endif
    
      $(foreach FIELD, TITLE CATEGORY PRIORITY SECTION VERSION,
        ifeq ($($(FIELD)),)
          $$(error Package/$(1) is missing the $(FIELD) field)
        endif
      )
    
      $(call shexport,Package/$(1)/description)
      $(call shexport,Package/$(1)/config)
    
      $(if $(DUMP), 
        $(Dumpinfo/Package), 
        $(foreach target, 
          $(if $(Package/$(1)/targets),$(Package/$(1)/targets), 
            $(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) 
          ), $(BuildTarget/$(target)) 
        ) 
      )
      $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1)))
    endef

    正确的编译过程

    # make menuconfig
    # make -j   //自动选择cpu数量,一般编译会出错
    # make
    # make package/$(PKG_NAME)/install

    必须先make成功,才能执行install,否则会提示依赖库警告

    注意
    如果你增加的包需要交叉编译的,记得在CMakeLists.txt设置交叉编译器

    SET(CMAKE_C_COMPILER "mipsel-openwrt-linux-uclibc-gcc")
  • 相关阅读:
    脱壳基础知识入门
    补码的运算
    二补数
    原码 & 反码 & 补码 & 详解
    中国黑客传说:周景平——我是超级黑
    VB程序破解之API断点[bp __vbaVarTstEq]
    ecshop报错”Deprecated: Assigning the return value of…”解决办法
    Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
    php 关于日期的一些计算
    localStorage使用总结,页面跳转,保存值
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709738.html
Copyright © 2011-2022 走看看