OpenWrt package - BuildPackage
一. 前言
该文章所涉及到的知识都来自OpenWrt Wiki官网。OpenWrt的软件编译模板系统使软件移植到OpenWrt变得非常简单,如果在一个典型的package目录下,我们可以发现3个东西:package/Makefile,package/patches,package/files。
package/patches:目录不是必须的,一般是为了bug修复和减少目标文件的尺寸。
package/Makefile:是必须存在的,它提供了下载和编译package实际所需的步骤。
package/files:package需要用到的文件(不是.c和.h文件)。
例子如下:
include $(TOPDIR)/rules.mkPKG_NAME:=bridge
PKG_VERSION:=1.0.6
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/bridge-utils-$(PKG_VERSION)
PKG_SOURCE:=bridge-utils-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/bridge
PKG_HASH:=9b7dc52656f5cbec846a7ba3299f73bdinclude $(INCLUDE_DIR)/package.mkdefine Package/bridgeSECTION:=baseCATEGORY:=NetworkTITLE:=Ethernet bridging configuration utility#DESCRIPTION:=This variable is obsolete. use the Package/name/description define instead!URL:=http://bridge.sourceforge.net/
endefdefine Package/bridge/descriptionEthernet bridging configuration utility Manage ethernet bridging; a way to connect networks together to form a larger network.
endefdefine Build/Configure$(call Build/Configure/Default,--with-linux-headers=$(LINUX_DIR))
endefdefine Package/bridge/install$(INSTALL_DIR) $(1)/usr/sbin$(INSTALL_BIN) $(PKG_BUILD_DIR)/brctl/brctl $(1)/usr/sbin/
endef$(eval $(call BuildPackage,bridge))
二. BuildPackage变量
1. PKG_NAME
package的名称。避免在包名称中使用下划线,否则可能导致难以发现的错误,导致编译失败。
2. PKG_VERSION
我们要下载的package的版本号。
3. PKG_RELEASE
package的Makefile的版本。
4. PKG_BUILD_DIR
编译package的路径。
5. PKG_SOURCE
原始源的文件名,一般是tarball包。
6. PKG_SOURCE_URL
从什么地方下载源文件。
7. PKG_HASH
下载源的checksum,用来校验该包是否是官方的。
8. PKG_CAT
解压源的方式(zcat,bzcat,unzip)。
9. PKG_BUILD_DEPENDS
需要在此包之前构建的包,如果需要确保包在生成时有权访问另一个包,要使用该选项,指定目录名称(例如openssl),而不是二进制包(libopenssl)。此构建变量仅建立构建时依赖项。使用DEPENDS建立运行时依赖项。
10. PKG_CONFIG_DEPENDS
指定哪些配置选项会影响生成配置,并应触发Build/Configure的重新运行
三. BuildPackage宏
1. Package/
SECTION:软件包的类型,当前未被使用。
CATEGORY:出现在menuconfig中的哪个菜单。
TITLE:软件包的简短描述。
DESCRIPTION:(已弃用)包的详细描述。
URL:下载原始软件包的链接。
MAINTAINER:软件包的维护者。
DEPENDS:可选的,编译该软件包前哪个软件包必须被编译和安装。
EXTRA_DEPENDS:可选的,运行时依赖项,不构建,仅添加到CONTROL文件中。
2. Package/conffiles
此包安装的配置文件列表,每行一个文件。文件列表部分不应缩进:部分中没有前导制表符或空格。
3. Package/description
软件包的描述。
4. Build/Prepare
一组解压或patch源的命令,你可以放心地将其保留为未定义。
5. Build/Configure
如果源不使用配置或具有正常的配置脚本,则可以将其保留为未定义。否则你可以在此处放置configure命令或使用$(call Build/Configure/Default)。
6. Build/Compile
如何编译源代码,在大多数情况下,应该将其设置为未定义。
7. Build/Install
如何安装已编译的源代码。
8. Build/InstallDev
针对编译软件包(静态库,头文件)所需的文件,但在目标设备上没有用。
9. Build/Clean
对于要清理过程中需要清除的东西。
10. Package/install
一组命令,用于将文件复制到由 $(1)目录表示的 ipkg 中。作为源代码,您可以使用将从解压缩和编译的源代码安装的相对路径,或者$(PKG_INSTALL_DIR),这是上面步骤中Build/Install的文件结束的地方。
某些定义以"Package/"为前缀,而其他定义只是"Build"的原因是可以从单个源生成多个包。OpenWrt在假设每个包Makefile一个源的情况下工作,但你可以根据需要将该源拆分为任意数量的包。由于你只需要编译一次源代码,所以有一个全局集合"Build"定义,但你可以通过向BuildPackage添加额外的调用来添加任意数量的"Package/"定义 - 参见dropbear包的例子。
四. 总结
本文总结了OpenWrt BuildPackage的变量和宏以及他们的详细的使用方法。
相关文章:
OpenWrt package - BuildPackage
一. 前言 该文章所涉及到的知识都来自OpenWrt Wiki官网。OpenWrt的软件编译模板系统使软件移植到OpenWrt变得非常简单,如果在一个典型的package目录下,我们可以发现3个东西:package/Makefile,package/patches,package/…...
C++三体星战小游戏
物理小游戏,懒得 写注释。 游戏代码 #include<bits/stdc.h> #include<bits/stdc.h> #include<windows.h> #include<conio.h> using namespace std; int toint(double a){return ((int)(a*105))/10;} int rand(int a){return rand()%a;} vo…...
【zip密码】修改zip压缩包密码
Zip压缩包设置了密码,想要修改密码,我们该如何操作?今天分享两个修改zip压缩包密码的方法。 方法一: 输入密码,将zip压缩包里面的文件解压出来。 然后找到解压出来的文件,将文件重新压缩,并且…...
小小讲一下Linux基本命令
Linux是一套类Unix的操作系统,这套系统最大的优点就是安全便捷,快速高效。这就为它赢得了广大的市场空间。但是呢,Linux系统虽然广为流行,它也不是那么容易就可以学会的。比如说,如果我们不懂得Linux系统的基本操作命令…...
Python数据容器(列表list、元组tuple、字符串str、字典dict、集合set)详解
一、数据容器概念 相关介绍: 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素。每一个元素,可以是任意类型的数据分为五类:列表[list]、元组(tuple)、字符串(str)、集合{set}、字典{dict} 相应区别:…...
2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型
文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...
Linux 计算机网络基础概论
一、网络基本概念 1、网络 网络是由若干节点和连接这些结点的链路组成,网络中的结点可以是计算机、交换机、路由器等设备。通俗地说就是把不同的主机连接起来就构成了一个网络,构成网路的目的是为了信息交互、资源共享。 网络设备有:交换机…...
深入理解 C++ 中的 std::cref、std::ref 和 std::reference_wrapper
深入理解 C 中的 std::cref、std::ref 和 std::reference_wrapper 在 C 编程中,有时候我们需要在不进行拷贝的情况下传递引用,或者在需要引用的地方使用常量对象。为了解决这些问题,C 标准库提供了三个有用的工具:std::cref、std:…...
在其他python环境中使用jupyter notebook
1、切换到目标python环境 activate 目标python环境 2、安装notebook内核包 pip install ipykernel 3、加环境加入到notebook中 python -m ipykernel install 目标python环境 4、切换到base环境 activate base 5、打开目标项目的对应盘 如果,项目在c盘&…...
计算机网络-笔记-第二章-计算机网络概述
目录 二、第二章——物理层 1、物理层的基本概念 2、物理层下面的传输媒体 (1)光纤、同轴电缆、双绞线、电力线【导引型】 (2)无线电波、微波、红外线、可见光【非导引型】 (3)无线电【频谱的使用】 …...
Hive字符串数组json类型取某字段再列转行
一、原始数据 acctcontent1232313[{"name":"张三","code":"上海浦东新区89492jfkdaj\r\n福建的卡"...},{"name":"狂徒","code":"select * from table where aa1\r\n and a12"...},{...}]...…...
ElementUI Table 翻页缓存数据
Element UI Table 翻页保存之前的数据,网上找了一些,大部分都是用**:row-key** 和 reserve-selection,但是我觉得有bug,我明明翻页了…但是全选的的个框还是勾着的(可能是使用方法不对,要是有好使的…请cute我一下…感谢) 所以自己写了一个… 思路: 手动勾选的时候,将数据保存…...
使用 AutoGPTQ 和 transformers 让大语言模型更轻量化
大语言模型在理解和生成人类水平的文字方面所展现出的非凡能力,正在许多领域带来应用上的革新。然而,在消费级硬件上训练和部署大语言模型的需求也变得越来越难以满足。 🤗 Hugging Face 的核心使命是 让优秀的机器学习普惠化 ,而…...
AUTOSAR规范与ECU软件开发(实践篇)6.5 BswM模块概念与配置方法介绍
目录 1、BswM模块概念与配置方法介绍 (1) BswMModeRequestPort配置 (2) ModeCondition与LogicalExpression配置...
1.1 VMware Workstation与Kali的安装和配置1
资源见专栏第一篇文章https://blog.csdn.net/algorithmyyds/article/details/132457258 安装VMware 不多加赘述,直接按顺序安装即可。 有以下需注意的地方: 1.建议选择增强型服务; 2.不要加入体验改进计划。是否开启提示更新看你的想法&…...
DDR与PCIe:高性能SoC的双引擎
SoC芯片无处不在,小到家电控制的MCU,大到手机芯片,我们都会接触到。如今大部分芯片设计公司都在开发SoC芯片,一颗SoC芯片可以集成越来越多的功能,俨然它已成为IC设计业界的焦点。 高性能、高速、高带宽的互联和存储的…...
C#_特性反射详解
特性是什么? 为程序元素额外添加声明信息的一种方式。 字面理解:相当于把额外信息写在干胶标签上,然后将其贴在程序集上。 反射是什么? 反射是一种能力,运行时获取程序集中的元数据。 字面理解:程序运行…...
【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...
时间复杂度和空间复杂度
全文目录 算法的复杂度时间复杂度大O渐进表示法空间复杂度常见算法复杂度对比 算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度…...
mac docker 卡住解决
文章目录 1、问题简述2、重新安装docker3、docker守护进程4、问题解决方案 1、问题简述 在docker desktop上更改了daemon.json的文件内容,应该是参数写的有问题,修改完配置再启动docker desktop就失败了,然后想着卸载docker desktop…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
