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")
OpenWrt增加软件包的更多相关文章
- openwrt增加密码及ssh的方法
openwrt增加密码及ssh的方法 1.进入openwrt系统源码的顶层目录,然后执行 make menuconfig命令进入 Network--> SSH--> <*>o ...
- RT-Thread Studio增加软件包操作
RT-Thread Studio增加软件包操作 1. 在本地中完成如下操作 打开RTthread Studio的安装目录 在当前目录下找到env的目录 在env的目录下找到要添加软件包的分类文件夹 本 ...
- openwrt 为软件包添加服务
手动修改 rc.local 加入也可以实现自启动,缺点手动修改太麻烦,停止只能用 kill . 配置成服务最方便了,可以启用或禁用,启动,停止,重启非常方便. 在openwrt 中使用服务 servi ...
- openwrt增加串口登录需要密码
https://wiki.openwrt.org/doc/howto/serial.console.password Openwrt 串口默认是没有密码的.Openwrt启动后,一个默认的密码将被启用 ...
- openwrt下定义软件包的依赖关系类型
在openwrt下软件包的依赖关系由DEPENDS:=来指定 第一种依赖关系类型为只有将依赖的软件包手动选上,当前的软件包就会自动被选中,用法为DEPENDS:=package_name 第二种依赖关 ...
- 转:openwrt中luci学习笔记
原文地址:openwrt中luci学习笔记 最近在学习OpenWrt,需要在OpenWrt的WEB界面增加内容,本文将讲述修改OpenWrt的过程和其中遇到的问题. 一.WEB界面开发 ...
- Openwrt安装软件的方法
转自:http://blog.csdn.net/jk110333/article/details/8753825 web软件: Naken Web Openwrt安装软件 简介 Openwrt ...
- 初始Openwrt
系统结构 在上一章我们已经完成了刷机工作,这个时候系统进行了首次启动,并且格式化了它的"可写"分区.那么在设备里分区到底是怎么样进行的呢?我们首先需要知道:不同的处理器下OpenW ...
- Emacs学习心得之 基础配置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...
随机推荐
- WPF分析工具
分析WPF程序是理解其行为很重要的一步,市场上有大量现成的WPF程序分析工具,如Snoop,WPFPerf,Perforator和Visual Profiler,其中Perforator和Visual ...
- 【Java】分布式自增ID算法---雪花算法 (snowflake,Java版)
一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID.这种呢,优点是可以体现全局的递增 ...
- 【FreeMarker】FreeMarker快速入门(一)
什么是 FreeMarker FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户 ...
- Source Insight解决回车缩进过多问题
摘自:https://jingyan.baidu.com/article/02027811339e651bcc9ce53c.html 新安装的Source Insight软件在编写代码时,回车换行 ...
- Linux记录-mysql服务管理shell实现
#!/bin/bash menu() { echo "---欢迎使用mysql管理服务程序---" echo "# 1.启动服务" echo "# 2 ...
- matlab基本数据结构struct
一起来学演化计算-matlab基本数据结构struct 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 http://blog.sina.com.cn/s/blog_46865140 ...
- BDE配置中的一个参数:SHAREDMEMLOCATION
用Delphi编写数据库程序经常会用到BDE [@more@] 但是前一段发现一个问题,根据程序需要修改了BDE的设置,结果发现只能运行一个实例,再打开这个程序或其他用到BDE的程序系统就会报错: E ...
- Elasticsearch - 处理冲突
http://blog.csdn.net/xifeijian/article/details/49615559
- 【译】Vue源码学习(一):Vue对象构造函数
本系列文章详细深入Vue.js的源代码,以此来说明JavaScript的基本概念,尝试将这些概念分解到JavaScript初学者可以理解的水平.有关本系列的一些后续的计划和轨迹的更多信息,请参阅此文章 ...
- 【NER】对命名实体识别(槽位填充)的一些认识
命名实体识别 1. 问题定义 广义的命名实体识别是指识别出待处理文本中三大类(实体类.时间类和数字类).七小类(人名.机构名.地名.日期.货币和百分比)命名实体.但实际应用中不只是识别上述所说的实体类 ...