特别说明:要编译backfire版本,一定要通过svn下载:svn co svn://svn.openwrt.org/openwrt/branches/backfire,而不能使用http://downloads.openwrt.org/backfire/10.03/中的源码包:backfire_10.03_source.tar.bz2
结合文档《OpenWrt_Dev_Tutorial.pdf》以及自己实际编译backfire的分析,得出如下结论:
基于backfire-10.03版本,在make之后,得到的目录组成为:
bin目录:make之后的新增目录,用来存放make的结果。比如我是用来编译BRCM47xx的,则此目录中会有:brcm47xx子目录,其中又包含:packages子目录(里面含有各种.ipk文件,以及一个Packages文件用来介绍此目录中的每个ipk文件)和可以烧入CPE的openwrt-brcm47xx-squashfs.trx文件。 疑问是:我只是编译了BRCM47xx,为何bin目录下还有类似:openwrt-wrt54g3gv2-vf-squashfs.bin这类的文件?
build_dir目录:make之后的新增目录。where all user--‐space tools will be cross--‐compiled. 从名字可以看出,此目录是用来进行编译的场所。这里面所包含的所有内容,都是dl目录下所存放的源码包解压缩并编译的结果。那么可以得出结论:dl里面下载的源码包受feeds.conf.default和package目录中各个子目录的Makefile控制,而真正要被编译的就被放到build_dir目录中解压缩并进行编译。--- 那么,应该也可以得出结论:如果不想下载,而想直接编译源码包,那就把源码包放到build_dir目录中就可以了。只是此目录中,根据dl目录下各个源码压缩包的归属性质,将它们分为四个子目录进行存放和编译:
host目录:存放与目标对象无关的源码包,并编译之。当然,还有一些目录在dl中找不到对应项(比如:firmware-utils,patch-cmdline等等,这些从哪里来的?待查)
linux-brcm47xx目录:与linux内核版本有关的源码包并编译之。这里面还包含了linux内核:linux-2.6.32.10
target-mipsel_uClibc-0.9.30.1目录:与目标设备有关的源码包的编译结果。
toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1目录:存放用于特定目标的体系结构的工具链目录。此目录中包含有:binutils,gcc,uClibc,甚至还有linux内核(而且是源文件,没有编译过的;为何这里再次重复出现?)dl目录:即download目录。也是make之后的新增目录。里面是根据package目录或者feeds.conf.default文件要求,在make的时候从网络上下载的源码包
docs目录:源码包就有的。即文档。这个也是需要编译的。
feeds目录:make之后的新增目录。里面存放的就是按照feeds.conf.default文件中列举的要处理的文件,所展开得到的目录。目录中存放的东西,和package目录中大致相似。指导如何下载和编译对应模块的。
include目录:源码包就有。是一些编译用的通用脚本和include宏定义。比较重要的包括:package.mk文件(几乎每个package目录中的模块的makefile中都提到它)
package目录:源码包就有。里面是随openwrt主版本就提供的包。除了用户态的N多模块外,还有kernel目录,用来定义内核模块。---疑问:linux内核是在哪个目录中指定下载的?
scripts目录:源码包就有。存放各类脚本的目录。比如:feeds脚本,使用.scripts/feeds update -a或者.scripts/feeds install -a,就可以对feeds.conf.default中列举的文件进行处理了。
staging_dir目录:make之后的新增目录。where the cross-‐compilation tools will be installed. 我猜测此目录的作用是:build_dir是编译的地方,那么这里就是把build_dir的结果放在了staging_dir目录了---待确认
target目录:源码包就有的。用来指导如何编译firmware和内核,以及sdk的
tmp目录:操作make menuconfig后产生的临时目录
toolchain目录:源码包就有的。指导如何下载,编译toolchain的
tools目录:源码包就有的。指导如何下载,编译tools的
BSDmakefile文件:
Config.in文件:
feeds.conf.default文件:feeds下载的指导文件
LICENSE文件:
Makefile文件:make命令的总入口
README文件:
rules.mk文件:定义了一系列在make时使用的规则
.config隐藏文件:make menuconfig后的config结果的存放文件。
.config.old隐藏文件:
.gitignore隐藏文件: