在未编译前,OpenWrt目录如下:
1. package
此目录主要存放OpenWrt的软件包,我们自己添加的应用层代码都应存放于此文件夹,代码包存放于此文件夹并编写相应的Makefile后,在编译过程中OpenWrt会自主识别并编译,可以看看package下面有哪些目录:
package下的目录会根据配置的不同而不同,其中基本都是openwrt的一些应用工具包,比如utils就是一引起工具集,ls,ssh等工具的源码都在此目录下
2. target
target目录下主要是和平台有关的代码,最主要的是linux文件夹
我们可以看到每一个平台都对应一个文件夹,我们通过makemenuconfig来选择平台和芯片时就是对应的此文件夹,可以进去ramips看下
可以看到里面有多种芯片型号,此中的image是最终生成固件时会调用到的,在这里可以对我们的固件做部分定制,patches是一些补丁包。base-files中的目录和linux目录相对应,很多地方都有这个文件夹。
3. tools
此目录下是一些工具集,通过名字应该都可以看出其具体功能,不多介绍
4. docs
文档存放目录,和openwrt有关的一些文档
5. include
顶层通用makefile,其他makefile中包含的makefile都可以在其中找到
6. scripts
脚本工具,包括一些用shell,perl,python编写的通用工具
7. toolchain
交叉编译工具链相关
在编译完成后,主目录结构如下:
可以发现多了几个文件夹:dl,tmp,logs,staging_dir,build_dir。其中logs目录为编译过程中输出的一些日志,编译出问题时可以查看此目录,tmp为临时文件夹
8. dl
dl为源代码下载目录,在编译过程中下载的源代码包都会保存在此文件夹下
9. staging_dir
这是一个比较重要的目录,此目录保存工具、内核等所有代码的编译结果,其内容如下:
host文件夹是和平台无关的一些生成物。
target-mipsel_24kec+dsp_uClibc-0.9.33.2是根据我们所选的平台和芯片产生的,其就是对应平台的编译结果。
toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2是根据我们所选的平台生成的交叉编译工具链及库文件。
9.1 我们先看下toolchain-mipsel...目录下的内容
其中的bin就是我们生成的交叉编译工具链
我们可以看到其中有gcc,g++,ar等工具链,lib和usr/lib是另外两个比较重要的目录,交叉编译过程中需要的库都保存在这两个目录中,交叉编译时我们需指定这两个目录。include是一些头文件
9.2 target-mipsel_24kec+dsp_uClibc-0.9.33.2 这是根据我们平台生成的文件,可以看到有如下内容:
include lib usr都是和平台有关的一些头文件和库,在我们所选平台其为空。
这个目录下最重要的目录是root-ramips,其内容:
这个目录是否很熟悉,和我们在板子上看到的目录一模一样,我们的固件就是通过打包这个文件夹生成的,固件解压出来就是它
10. build_dir
这是一个中间文件夹,所有代码都会拷到其中编译,代码在编译之前会拷贝一份到此目录中,为什么要拷贝呢?一个原因就是在-编译过程中OpenWrt可能会对其中一些代码和makefile作改动,这里是为了安全起见,对副本进行编译。
其目录内容和staging_dir一模一样,staging_dir就是build_dir中代码的编译结果。
host 和平台无关的一些工具、库代码
toolchain-mipsel_24kec... 工具链源码
target-mipsel_24kec+dsp_uClibc-0.9.33.2 和平台有关的代码,其中是一些代码包,packge中的代码包很多都会拷贝到此目录编译,我们自己添加的代码包也应拷贝至此目录
不足之处请指正,谢谢!