源码
下载 openwrt 官方的源码的步骤是
1) ubuntu 终端输入如下命令,下载源码。
git clone -b chaos_calmer git://github.com/openwrt/openwrt.git
等待代码下载完成,下载完成后,将在当前目录下生成一个名为"openwrt"的文件夹,里面存放的就是 OpenWrt 的源码了。
2) 在 ubuntu 终端中输入以下命令:
cd openwrt //进入 openwrt 主目录
./scripts/feeds update -a //更新安装包
./scripts/feeds install -a //安装更新
配置
在芯片平台确定的情况下,一般会从平台供应商或者网上拿到到源码,这时候首先要做的就是配置成自己平台板,然后进行编译。
1、拷贝默认或者项目的配置文件到openwrt根目录下覆盖.config文件。
2、make menuconfig进行项目的选项配置。
3, make kernel_menuconfig进行内核选项配置。
平台
一般是以某一款芯片平台,以imx6ul为例,linux目录下是支持的平台类型:
项目
在一个芯片平台下面开发几个不同项目
源码目录
bin build_dir Config.in docs feeds.conf.default key-build LICENSE package rules.mk staging_dir tmp tools
BSDmakefile config dl feeds include key-build.pub Makefile README scripts target toolchain
[yubo.wang@localhost openwrt]$ ls target/linux/imx6ul/
agriculture 项目目录
Foton-4GTBOX 项目目录
files 平台内核的通用修改文件
base-files 平台根文件系统的通用文件
image 平台编译镜像打包文件
modules.mk
Makefile
patches-4.9.11 平台内核的通用补丁,项目中没有内核补丁,说明只能解决bug不能提交功能修改,如果要改功能呢?
[yubo.wang@localhost openwrt]$ ls target/linux/imx6ul/Foton-4GTBOX/
base-files-NULL 项目特定的根文件系统目录文件
etc lib mnt
config-4.9.11 内核配置文件
profiles
target.mk
1) scripts
存放了一些脚本,使用了 bash,Python,perl 等多种脚本语言.编译过程中,用于第三方软件包管理的 feeds 文件也是在这个目录当中.在编译过程中,使用到的脚本也统一放在这个目录中。
2) tools
编译时,主机需要使用一些工具软件,tools 里包含了获取和编译这些工具的命令.软件包里面有 Makefile 文件,有的还包含了 patch.每个 Makefile 当中都有一句$(eval $(call HostBuild)),这表明编译这个工具是为了在主机上使用的.
3) config
存放着整个系统的配置文件
4) docs
包含了整个宿主机的文件源码的介绍, 里面还有 Makefile 为目标系统生成 docs.使用make -C docs/可以为目标系统生成文档.
5) toolchain
做过嵌入式的童鞋应该都知道交叉编译链,这个文件中存放的就是编译交叉编译链的软件包.包括:binutils,gcc,libc 等等.
6) target
openwrt 的源码可以编译出各个平台适用的二进制文件,各平台在这个目录里定义了firmware 和 kernel 的编译过程。
7) package
存放了 openwrt 系统中适用的软件包,包含针对各个软件包的 Makefile。 openwrt 定义了一套 Makefile 模板.各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、
编译方式、安装地址等。在二次开发过程中,这个文件夹我们会经常打交道。 事实上,通过./scripts/feed update -a 和./scripts/feed install -a 的软件包也会存放在这个目录之中。
8) include
openwrt 的很多 Makefile 都存放在这里。文件名为 *.mk 。这里的文件上是在 Makefile里被 include 的,类似于库文件.这些文件定义了编译过程.
9) 其他
主要目录就是前面提及的 8 个,剩下的是单个文件.
Makefile
在顶层目录执行 make 命令的入口文件.
rules.mk
定义了 Makefile 中使用的一些通用变量和函数
Config.in
在 include/toplevel.mk 中我们可以看到,这是和 make menuconfig 相关联的文件.
feeds.conf.default
这个文件中可以配置下载第三方一些软件包时所使用的地址
LICENSE & README
即软件许可证和软件基本说明.其中 README 描述了编译软件的基本过程和依赖文件.
至此我们把原始目录大致浏览了一遍,再读者编译一次 openwrt 源码后,会出现一些新
的目录, 下面我们看看这些生成的目录,如下图所示
10) feeds
openwrt 的附加软件包管理器的扩展包索引目录.有点绕,简单来说就是下载管理软件包
的.默认的 feeds 下载有 packages、 management、 luci、 routing、 telephony。如要下载其他的
软件包,需打开源码根目录下面的 feeds.conf.default 文件,去掉相应软件包前面的#号,然
后更新源:
./scripts/feeds update -a
安装下载好的包:
./scripts/feeds install -a
11) build_dir
在前面的原始目录中,我们提到了 host工具,toolchain 工具还有目标文件.openwrt将在这
个目录中展开各个软件包,进行编译.所以这个文件夹中包含 3 个子文件夹:
--host
在该文件夹中编译主机使用的工具软件
--toolchain-XXX
在该文件夹中编译交叉工具链
--target-XXX
在此编译目标平台的目标文件,包括各个软件包和内核文件.openwrt 系统的 linux 解压后
的源码在
“openwrt/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.
29/”目录下。
12) bin
保存编译完成后的二进制文件,包括:完整的 bin 文件,所有的 ipk 文件.
13) dl
在编译过程中使用的很多软件,刚开始下载源码并没有包含,而是在编译过程中从其他服
务器下载的,这里是统一的保存目录
14) staging_dir
用于保存在 build_dir 目录中编译完成的软件.所以这里也和 build_dir 有同样的子目录结
构. 比如,在 target-XXX 文件夹中保存了目标平台编译好的头文件,库文件.在我们开发自己的
ipk 文件时,编译过程中,预处理头文件,链接动态库,静态库都是到这个子文件夹中.
15) tmp
从名字来看,是临时文件夹.在编译过程中,有大量中间临时文件需要保存,都是在这里.
16) logs
这个文件夹,有时可以看到,有时没有.这是因为这个文件夹保存的是,编译过程中出错的
信息,只有当编译出错了才会出现.我们可以从这里获取信息,从而分析我们的软件编译为什
么没有完成.
OpenWrt专栏计划:
1、源码下载,配置,编译
不同芯片平台间的下载源码方式,linux arm and ramips
2、镜像文件,规则和编译目录文件说明
3、烧写包下载方式,启动方式
4、编译一个简单的helloword ipk,ipk解压原理,安装理解
5、启动打印分析,内存,flash,sd卡挂载说明
6、uboot源码下载编译和烧写,不同平台间的差异
7、luci原理和分析理解,网页界面的编写和增加新的功能
8、通过4G网络联网原理分析
暂时这么多,计划2月开始写,也是自己对openwrt的学习和加深理解