Openwrt学习之路-(2-Openwrt directory structure)

题图:gratisography

Openwrt directory structure

了解Openwrt的目录结构是学习一个新系统最基础也是最重要的部分。试想如果你想加一行代码进行修复bug,却花了半个小时才找到相应的位置,那是多么悲催啊,所以懂得系统框架可以让你在开发过程不会跑偏、快速定位,让工程项目规范化等。

目录结构

如图是openwrt的基本的目录结构,其中白色部分是直接下载源码就有的源目录,蓝色部分则是通过make之后产生的目录(其中feeds目录则是通过命令./scripts/feeds update -a;./scripts/feeds install -a之后安装的扩展包目录,这个目录将所有的文件链接到package/feeds/中去了),下面就对各目录进行简要说明。

1.tool和toolchain目录

编译固件image/获取内核头文件/二进制编译器和调试器/c库文件,需要用到的通用工具。

2.include目录

编译时的头文件索引,源码包就有,包含一些编译用的通用脚本和include宏定义。比较重要的包括:package.mk文件(几乎每个package目录中的模块的makefile中都提到它)

3.scripts目录

对openwrt的包进行管理的perl脚本,源码包就有,存放各类脚本的目录。比如:feeds脚本,使用.scripts/feeds update -a或者.scripts/feeds install -a,就可以对feeds.conf.default中列举的文件进行处理了。

4.target目录

包含了特定平台的文件,固件镜像和内核构建过程的索引,以及生成编译器各编译工具。

  • linux目录下为各个平台相应的内核patches,配置文件等;
  • imagebuilder目录则扫描如何生成这个平台的固件,源码包就有的,用来指导如何编译firmware和内核以及sdk的。

5.package目录和feeds目录

在openwrt中,基础的软件包目录为package,扩展的软件包在feeds中。

feeds中的软件扩展了openwrt的基本功能,它将所有的软件链接到package/feeds中。里面存放的就是按照 feeds.conf.default文件中列举的要处理的文件,所展开得到的目录。目录中存放的东西,和package目录中大致相似。指导如何下载和编译对应模块的。

这些软件大多数都是编译成.ipk格式的,这里面有内核模块文件,有各种软件的源码,以及patch文件和Makefile用来下载源码的。

6.dl目录

编译工具、目标、package所需要的软件包将从网上下载放到dl目录中

7.build_dir目录

一个临时目录,用来将所有需要编译的软件源码放到这个目录中进行编译。它包括一下三个目录:

  • build_dir/host: 与编译目标无关的工具的临时文件夹
  • build_dir/<arch>*: 作为所有目标,package编译的临时目录
  • build_dir/toolchain-<arch>*:编译特定体系的交叉编译链的文件夹

8.staging_dir目录

用于存放构建目标系统镜像的工具软件,包括:

  • staging_dir/host: 宿主系统使用的工具
  • staging_dir/<arch>*: 目标系统使用的软件软件包
  • staging_dir/<toolchain-<arch>*: 交叉编译工具链

9.bin目录

make之后的新增目录,用来存放make的结果。比如我是用来编译ramips的,则此目录中会有:ramips子目录,其中又包含:packages子目录(里面含有各种.ipk文件,以及一个Packages文件用来介绍此目录中的每个ipk文件)和可以烧入CPE的openwrt-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin文件。

10.其他文件

  • Makefile文件:make命令的总入口
  • rules.mk文件:定义了一系列在make时使用的规则
  • .config隐藏文件:make menuconfig后的config结果的存放文件。
  • .config.old隐藏文件:老的.config文件

Openwrt directory structure的分析就到这边,有感悟时会持续会更新。

注:以上内容都是本人在学习过程积累的一些心得,难免会有参考到其他文章的一些知识,如有侵权,请及时通知我,我将及时删除或标注内容出处,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看Openwrt相关教程,感谢您的查阅。

推荐阅读更多精彩内容