传统的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相关推荐

  1. OpenWrt 编译分割

    本文主要参考:http://macbruins.com/2011/05/08/downloading-sources-for-building-openwrt/ OpenWrt系统在buildroot ...

  2. 聊聊Dubbo - Dubbo可扩展机制源码解析

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 在Dubbo可扩展机制实战中,我们了解了Dubbo扩展机制的一些概念,初探了Dubbo中LoadBalance的实现, ...

  3. Dubbo源码分析(三)Dubbo中的SPI和自适应扩展机制

    前言 我们在往期文章中,曾经深入分析过Java的SPI机制,它是一种服务发现机制.具体详见:深入理解JDK的SPI机制 在继续深入Dubbo之前,我们必须先要明白Dubbo中的SPI机制.因为有位大神 ...

  4. 【物联网】OpenWrt编译和修改基础--预科

    该文章讲解一下在AR9331上使用Openwrt的编译修改方法,前面先介绍一下硬件平台特点,为后面的代码修改做铺垫,然后描述一下Openwrt的编译烧写流程,最后再重点讲述编译配置.代码修改细节. 1 ...

  5. Java扩展机制可加载所有JAR

    Java扩展机制在Java教程中被描述为"一种标准的,可伸缩的方式,以使自定义API可供Java平台上运行的所有应用程序使用." 如了解扩展类加载中所述 ,"扩展框架利用 ...

  6. OpenWrt 编译及batman-adv组件选择(for Netgear WNDR3800)

    OpenWrt 编译(ubuntu)及batman-adv配置(for Netgear WNDR3800) 一.编译openwrt固件 1.下载源码,如15.05(Chaos Calmer)这个版本 ...

  7. mt7688 OpenWrt 编译

    一.OpenWrt源码下载 虚拟机:Ubuntu 16.04 LTS sudo apt install git subversion curl wget gawkgit clone https://g ...

  8. openwrt编译固件流程

    openwrt编译固件分为环境配置以及固件编译两个部分,下面将按步骤介绍编译固件的方法流程 1.环境配置 编译固件需要先配置环境,自己所需的环境在官网中可以找到.选择适合自己的分支,默认的分支为mas ...

  9. 【速记】openwrt - 编译、刷固件(资料整理)

    固件 官方 https://downloads.openwrt.org/releases/19.07.4/targets/x86/64/ 整合 https://op.dllkids.xyz/op/fi ...

最新文章

  1. R语言CRAN不包含的安装包下载并手动使用RStudio进行安装实战:以下载VRPM包及绘制彩色列线图为例
  2. php实现socket
  3. 面向在线教育业务的流媒体分发演进
  4. css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
  5. 开发者调试工具Chrome Workspace
  6. jtoken判断是否包含键_Redis源码解析十三--有序集合类型键实现(t_zset)
  7. Java21天打卡day19-异常
  8. Git基础教程(四)
  9. linux服务器生成密钥后无法登陆,securecrt用密钥安全登陆服务器
  10. 放映机服务器型号,巴可Barco SP4K-20CS4激光系列智能影院放映机投影机
  11. 乱世王者服务器维护,乱世王者微信534区仰不愧天开服时间表_乱世王者新区开服预告_第一手游网手游开服表...
  12. Pycharm中的Python Console与Terminal
  13. 北大软微2021计算机考研难度,北大软微金服方向2016年考研经验贴---初试410分
  14. UE4 键盘按键实现开关门
  15. 不限机型,手机端实时玩转3D、混合现实,快手Y-tech有黑科技(已开源)
  16. Spring中循环依赖详解
  17. Windows下磁盘配额的使用量问题
  18. 【双端队列广搜/搜索+图论】AcWing 2019.拖拉机 USACO 2012 March Contest Silver Division
  19. [Unity][C#]Regex正则表达式判断字符串
  20. 关于Linux中的apt-get的相关操作及原理

热门文章

  1. 计算机管理老是自动打开,防止Windows10自动唤醒,就用这4招,维修电脑必知
  2. pc station v15 博图_博图V15的硬件要求很高啊
  3. 动漫人物是怎么设计出来的?
  4. 2008年新作——《网管员面试宝典》上市了
  5. linux内核TCP 滑动窗口,Linux TCP滑动窗口代码简述
  6. C语言中的rename()和remove()函数的使用及注意点
  7. hive 和 Hadoop 浅析
  8. 变频器的逆变、变频原理
  9. 【Vivado】Xilinx UG994 Addressing for Block Designs
  10. easybuy源码_easybuy数据库设计