OpenWrt源码目录

  分析的OpenWrt源码目录有助于分析OpenWrt的源码

一、原始目录

1.1、scripts

  构建期间用到的各类脚本文件。它存放了一些脚本,使用了bash,python,perl等多种脚本语言.编译过程中,用于第三方软件包管理的feeds文件也是在这个目录当中.在编译过程中,使用到的脚本也统一放在这个目录中.

1.2、tools

  在构建过程中使用的各种工具。编译时,主机需要使用一些工具软件,tools 里包含了获取和编译这些工具的命令.软件包里面有Makefile文件,有的还包含了patch.每个Makefile当中都有一句$(eval $(call HostBuild)),这表明编译这个工具是为了在主机上使用的.

1.3、config

  菜单设置配置文件。存放着整个系统的配置文件

1.4、 toolchain

  构建工具链所需的生成文件和配置。这个文件中存放的就是编译交叉编译链的软件包.包括:binutils,gcc,libc等等.

1.5、target

   构建imagebuilder,内核,sdk和工具链所需的生成文件和配置。openwrt的源码可以编译出各个平台适用的二进制文件,各平台在这个目录里定义了firmware和kernel的编译过程。

1.6、package

  用于文件生成和菜单配置的软件包。存放了openwrt系统中适用的软件包,包含针对各个软件包的Makefile。openwrt定义了一套Makefile模板.各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、编译方式、安装地址等。在二次开发过程中,这个文件夹我们会经常打交道.
  事实上,通过./scripts/feed update -a和./scripts/feed install -a的软件包也会存放在这个目录之中.

1.7、include

  文件生成配置文件。openwrt的Makefile都存放在这里。文件名为 *.mk 。这里的文件上是在Makefile里被include的,类似于库文件.这些文件定义了编译过程.

二、原始目录下的单个文件

2.1、Makefile:

  在顶层目录执行make命令的入口文件.

2.2 、rules.mk

  定义了Makefile中使用的一些通用变量和函数

2.3、 Config.in

  在include/toplevel.mk中我们可以看到,这是和make menuconfig相关联的文件.

2.4、 feeds.conf.default

  是下载第三方一些软件包时所使用的地址

2.5、 LICENSE & README

  即软件许可证和软件基本说明.其中README描述了编译软件的基本过程和依赖文件.

三、生成目录

  在我们编译完成后除了下载的源码文件,多出来的部分很明显就是编译过程中新生成的

3.1、feeds

  openwrt的附加软件包管理器的扩展包索引目录.有点绕,简单来说就是下载管理软件包的.默认的feeds下载有packages、management、luci、routing、telephony。如要下载其他的软件包,需打开源码根目录下面的feeds.conf.default文件,去掉相应软件包前面的#号,然后更新源:

./scripts/feeds update -a

  安装下载好的包:

./scripts/feeds install -a

3.2、build_dir

  在前面的原始目录中,我们提到了host工具,toolchain工具还有目标文件.openwrt将在这个目录中展开各个软件包,进行编译.所以这个文件夹中包含3个子文件夹:

3.2.1、 host

  在该文件夹中编译主机使用的工具软件

3.2.2 、toolchain-XXX

  在该文件夹中编译交叉工具链

3.2.3、 target-XXX

  在此编译目标平台的目标文件,包括各个软件包和内核文件.

3.3、bin

  保存编译完成后的二进制文件,包括:完整的bin文件,所有的ipk文件.

3.4、.dl

  在编译过程中使用的很多软件,刚开始下载源码并没有包含,而是在编译过程中从其他服务器下载的,这里是统一的保存目录

3.5、 staging_dir

  用于保存在build_dir目录中编译完成的软件.所以这里也和build_dir有同样的子目录结构.
  比如,在target-XXX文件夹中保存了目标平台编译好的头文件,库文件.在我们开发自己的ipk文件时,编译过程中,预处理头文件,链接动态库,静态库都是到这个子文件夹中.

3.6、tmp

  从名字来看,是临时文件夹.在编译过程中,有大量中间临时文件需要保存,都是在这里.

3.7、.logs

  这个文件夹,有时可以看到,有时没有.这是因为这个文件夹保存的是,编译过程中出错的信息,只有当编译出错了才会出现.我们可以从这里获取信息,从而分析我们的软件编译为什么没有完成.

你可能感兴趣的:(OpenWrt,linux,openwrt)