OpenWrt编译扩展机制feeds
传统的Linux操作系统在编译某一个软件的时候,会检查其依赖软件及头文件是否存在,如果没有安装,则会报缺少头文件或缺少链接库等错误,编译将退出。这种机制使得开发者在编译一个软件之前,需要查找该软件所需的依赖库及头文件,并手动去安装这些软件。有时候碰到比较娇贵的软件时,嵌套式的安装依赖文件,会使得开发者头昏脑胀。OpenWrt通过引入feeds机制,很好地解决了这个问题。
feeds是OpenWrt开发所需要的软件包套件的工具及更新地址集合,这些软件包通过一个统一的接口地址进行访问。这样用户可以不用关心扩展包的存储位置,可以减少扩展软件包和核心代码部分的耦合。它由两部分组成,即扩展包位置配置文件feeds.conf.default和脚本工具feeds。目前在配置文件中保存最重要的扩展软件包集合有以下4个。
- ‘LuCI’OpenWrt默认的Web浏览器图形用户接口。
- ‘routing’一些额外的基础路由器特性软件,包含动态路由Quagga等。
- ‘telephony’IP电话相关的软件包,例如freeswitch和Asterisk等。
- ‘management’TR069等各种管理软件包。
当我们下载了OpenWrt对应源码之后,进行如下操作:
./scripts/feeds update –a
./scripts/feeds install -a
上述操作,就是利用feeds提供的接口将OpenWrt所需的全部扩展软件包进行下载并安装。在更新时,需要能够访问互联网。在下载之前可以通过查看“feeds.conf.default”文件,来检查哪些文件需要包含在编译环境中。feeds工具用法如下:
hzlarm@thingoo:~/chaos_calmer/scripts$ ./feeds
Usage: ./feeds <command> [options]Commands:list [options]: List feeds, their content and revisions (if installed)Options:-n : List of feed names.-s : List of feed names and their URL.-r <feedname>: List packages of specified feed.-d <delimiter>: Use specified delimiter to distinguish rows (default: spaces)install [options] <package>: Install a packageOptions:-a : Install all packages from all feeds or from the specified feed using the -p option.-p <feedname>: Prefer this feed when installing packages.-d <y|m|n>: Set default for newly installed packages.-f : Install will be forced even if the package exists in core OpenWrt (override)search [options] <substring>: Search for a packageOptions:-r <feedname>: Only search in this feeduninstall -a|<package>: Uninstall a packageOptions:-a : Uninstalls all packages.update -a|<feedname(s)>: Update packages and lists of feeds in feeds.conf .Options:-a : Update all feeds listed within feeds.conf. Otherwise the specified feeds will be updated.-i : Recreate the index only. No feed update from repository is performed.clean: Remove downloaded/generated files.
update
:下载在feeds.conf或feeds.conf.default文件中的软件包列表并创建索引。-a表示更新所有的软件包。只有更新后才能进行后面的操作。
list
:从创建的索引文件“feed.index”中读取列表并显示。只有进行更新之后才能查看列表。
install
:安装软件包以及它所依赖的软件包,从feeds目录安装到package目录,即在“package/feeds”目录创建软件包的软链接。只有安装之后,在后面执行“make menuconfig”时,才可以对相关软件包是否编译进行选择。
search
:按照给定的字符串来查找软件包,需要传入一个字符串参数。
uninstall
:卸载软件包,但它没有处理依赖关系,仅仅删除本软件包的软链接。
clean
:删除update命令下载和生成的索引文件,但不会删除install创建的链接。
feeds代码处理过程是这样的:这个命令首先读取并解析feeds.conf配置文件,然后执行相应的命令,例如install时,将安装应用程序包和它所有直接或间接依赖的所有软件包。安装时将创建一个符号链接,从
packages/feeds/$feed_name/$package_name
指向feeds/$feed_name/$package_name
, 这样在“make menuconfig”时,feeds的软件包就可以被处理到,就可以选择编译了。
用一句话来说,编译扩展安装过程就是将feeds目录下的软件包链接到packages/feeds对应目录下。可使用的feeds列表配置为feeds.conf或者feeds.conf.default。优先选择feeds.conf文件,这个文件包含了扩展安装源列表,每一行由3部分组成,包含feed方法、feed 名字和feed源。
下面是一个扩展安装源配置文件feeds.conf.default的内容。
1src-git packages https://github.com/openwrt/packages.git;for-15.05
2 src-git luci https://github.com/openwrt/luci.git;for-15.05
3 src-git routing https://github.com/openwrt-routing/packages.git;for-15.05
4 src-git telephony https://github.com/openwrt/telephony.git;for-15.05
5 src-git management https://github.com/openwrt-management/packages.git;for-15 .05
6 #src-git targets https://github.com/openwrt/targets.git
7 #src-git oldpackages http://git.openwrt.org/packages.git
8 #src-svn xwrt http://x-wrt.googlecode.com/svn/trunk/package
9 #src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone
10 #src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl
11 #src-svn xorg svn://svn.openwrt.org/openwrt/feeds/xorg
12 #src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop
13 #src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce
14 #src-svn lxde svn://svn.openwrt.org/openwrt/feeds/lxde
15 #src-link custom /usr/src/openwrt/custom-feed
我们可以修改该文件使编译时从自己指定的位置进行下载。主要支持feed方法的类型有以下3种:
src-cpy通过从数据源path拷贝数据
src-git通过使用Git从代码仓库地址下载代码数据。
src-svn通过使用SVN从代码仓库地址下载代码数据。
还有:
src-bzr通过使用bzr从数据源的path/URL下载数据
src-darcs通过使用darcs从数据源path/URL下载数据
src-hg通过使用hg从数据源path/URL下载数据
src-link创建一个数据源path的symlink
OpenWrt编译扩展机制feeds相关推荐
- OpenWrt 编译分割
本文主要参考:http://macbruins.com/2011/05/08/downloading-sources-for-building-openwrt/ OpenWrt系统在buildroot ...
- 聊聊Dubbo - Dubbo可扩展机制源码解析
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 在Dubbo可扩展机制实战中,我们了解了Dubbo扩展机制的一些概念,初探了Dubbo中LoadBalance的实现, ...
- Dubbo源码分析(三)Dubbo中的SPI和自适应扩展机制
前言 我们在往期文章中,曾经深入分析过Java的SPI机制,它是一种服务发现机制.具体详见:深入理解JDK的SPI机制 在继续深入Dubbo之前,我们必须先要明白Dubbo中的SPI机制.因为有位大神 ...
- 【物联网】OpenWrt编译和修改基础--预科
该文章讲解一下在AR9331上使用Openwrt的编译修改方法,前面先介绍一下硬件平台特点,为后面的代码修改做铺垫,然后描述一下Openwrt的编译烧写流程,最后再重点讲述编译配置.代码修改细节. 1 ...
- Java扩展机制可加载所有JAR
Java扩展机制在Java教程中被描述为"一种标准的,可伸缩的方式,以使自定义API可供Java平台上运行的所有应用程序使用." 如了解扩展类加载中所述 ,"扩展框架利用 ...
- OpenWrt 编译及batman-adv组件选择(for Netgear WNDR3800)
OpenWrt 编译(ubuntu)及batman-adv配置(for Netgear WNDR3800) 一.编译openwrt固件 1.下载源码,如15.05(Chaos Calmer)这个版本 ...
- mt7688 OpenWrt 编译
一.OpenWrt源码下载 虚拟机:Ubuntu 16.04 LTS sudo apt install git subversion curl wget gawkgit clone https://g ...
- openwrt编译固件流程
openwrt编译固件分为环境配置以及固件编译两个部分,下面将按步骤介绍编译固件的方法流程 1.环境配置 编译固件需要先配置环境,自己所需的环境在官网中可以找到.选择适合自己的分支,默认的分支为mas ...
- 【速记】openwrt - 编译、刷固件(资料整理)
固件 官方 https://downloads.openwrt.org/releases/19.07.4/targets/x86/64/ 整合 https://op.dllkids.xyz/op/fi ...
最新文章
- R语言CRAN不包含的安装包下载并手动使用RStudio进行安装实战:以下载VRPM包及绘制彩色列线图为例
- php实现socket
- 面向在线教育业务的流媒体分发演进
- css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
- 开发者调试工具Chrome Workspace
- jtoken判断是否包含键_Redis源码解析十三--有序集合类型键实现(t_zset)
- Java21天打卡day19-异常
- Git基础教程(四)
- linux服务器生成密钥后无法登陆,securecrt用密钥安全登陆服务器
- 放映机服务器型号,巴可Barco SP4K-20CS4激光系列智能影院放映机投影机
- 乱世王者服务器维护,乱世王者微信534区仰不愧天开服时间表_乱世王者新区开服预告_第一手游网手游开服表...
- Pycharm中的Python Console与Terminal
- 北大软微2021计算机考研难度,北大软微金服方向2016年考研经验贴---初试410分
- UE4 键盘按键实现开关门
- 不限机型,手机端实时玩转3D、混合现实,快手Y-tech有黑科技(已开源)
- Spring中循环依赖详解
- Windows下磁盘配额的使用量问题
- 【双端队列广搜/搜索+图论】AcWing 2019.拖拉机 USACO 2012 March Contest Silver Division
- [Unity][C#]Regex正则表达式判断字符串
- 关于Linux中的apt-get的相关操作及原理
热门文章
- 计算机管理老是自动打开,防止Windows10自动唤醒,就用这4招,维修电脑必知
- pc station v15 博图_博图V15的硬件要求很高啊
- 动漫人物是怎么设计出来的?
- 2008年新作——《网管员面试宝典》上市了
- linux内核TCP 滑动窗口,Linux TCP滑动窗口代码简述
- C语言中的rename()和remove()函数的使用及注意点
- hive 和 Hadoop 浅析
- 变频器的逆变、变频原理
- 【Vivado】Xilinx UG994 Addressing for Block Designs
- easybuy源码_easybuy数据库设计