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的一 ...
随机推荐
- android多图选择器 图片/视频 单选or多选,以及视频录制。
PictureSelector 最近项目中用到多图选择上传的需求,考虑到android机型众多问题就自己花时间写了一个,测试了大概60款机型,出现过一些问题也都一一修复了,基本上稳定了特分享出来,界面 ...
- (一)eclipse Dynamic web project 工程目录以及文件路径问题
如图,我创建了一个work 的web project,当工程完成之后,部署在服务器上时,整个work工程会被打包成一个war包,如 除了可以在eclipse上运行,工具会帮我们自动部署在服务器上之外, ...
- iOS实现简单时钟效果
实现的效果图如下 : 实现代码如下: #import "ViewController.h" //将旋转角度转换为弧度制#define angleToRadion(angle) (( ...
- hdu 2018 母牛的故事 动态规划入门题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018 设 f[i][j] 表示第i天年龄为j的母牛个数,其中j=4代表所有年龄达到4岁的成年母牛,则: ...
- vue 组件传值$attrs $listeners $bus provide/inject $parent/$children
$attrs 包含了父作用域中不作为prop被识别的特性绑定,当一个组件没有声明props时,这里会包含所有父作用域的绑定, $listeneers 包含了父作用域中的v-on事件监听器,它可以通过v ...
- MySQL之忘记root重置方法
参考:https://help.aliyun.com/knowledge_detail/42520.html MySQL忘记了root登录密码需要重置 1,修改配置文件 一般配置文件路径为/etc/m ...
- upload-labs 上传漏洞靶场环境以及writeup
一个帮你总结所有类型的上传漏洞的靶场 https://github.com/c0ny1/upload-labs 靶场环境(基于phpstudy这个php集成环境) https://github.com ...
- ipad 如何 Airplay 到 Windows 上?
最近刚好有用到这个,觉得还不错,就推荐给大家.虽然个人并不喜欢苹果这一套,但是工作里难免掺杂一些会用到的ipad , mac . 纯粹技术分享. 1. 5KPlayer : https://www.5 ...
- Linux【Ubuntu】安装docker
内核要大于3.10才能安装docker 查看内核 uname -r 安装yum命令 sudo apt install yum 由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改,故添加使用 ...
- netty 实现心跳检查--断开重连--通俗易懂
一.心跳介绍 网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现.但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题. 1.心跳机制: 是服务端和客户端定时的发送一个心跳包 ...