Openwrt学习之路-(1-Openwrt clone and bulid)

题图:huitu

Openwrt clone and bulid

Openwrt是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。为了更加深入的了解Openwrt,我们从最直接的学习方式开始,clone源码、编译工程。

1.安装linux上的更新组件

为了支持openwrt的安装编译,在linux操作系统上需要安装以下的软件

$ sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext 
texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev git-core 
gawk libz-dev asciidoc libtool libssl-dev libssl0.9.8 xz-utils -y

2.从官网clone openwrt

git clone git://git.openwrt.org/15.05/openwrt.git

这边克隆哪个版本由自己决定,我这边选择15.05稳定版。虽然trunk版本支持的硬件更多,但其不一定稳定,而且会经常更新,对开发固定的硬件开说就没必要了,需要时可以去寻找相应的版本。

clone好的工程如下:

/openwrt-15.05/openwrt$ ls
BSDmakefile  docs                LICENSE   README    staging_dir  toolchain
config       feeds.conf.default  Makefile  rules.mk  target       tools
Config.in    include             package   scripts   tmp

3.升级所有扩展软件源列表

./scripts/feeds update -a

这一步的结果是:产生$(TOPDIR)/feeds目录,存放的就是执行feeds.conf.default文件后的结果

src-git packages https://github.com/openwrt/packages.git;for-15.05
src-git luci https://github.com/openwrt/luci.git;for-15.05
src-git routing https://github.com/openwrt-routing/packages.git;for-15.05
src-git telephony https://github.com/openwrt/telephony.git;for-15.05
src-git management https://github.com/openwrt-management/packages.git;for-15.05

feeds.conf.default里面的路径可以自行修改,如https网址访问不到,则可改为git路径等。

4.安装所有扩展软件

./scripts/feeds install - a
这一步的结果是:在package目录中多了一个feeds目录,里面存放的子目录是到$(TOPDIR)/feeds目录的链接。注意:在Openwrt的TOPDIR/Makefile中,有如下定义:

   # update all feeds, re-create index files, install symlinks
   package/symlinks:
   $(SCRIPT_DIR)/feeds update -a
   $(SCRIPT_DIR)/feeds install -a

那么,可以想见,上述两个也可以合并为一步,即make package/symlinks

5.使用默认编译环境,检查是否能进行编译

make defconfig

这一步就编译环境的基础,如果这一步都没执行成功,说明clone的工程有问题,需要重新clone。

6.配置自定义的镜像配置

make menuconfig

对工程进行配置,这边就以小米的miwifi为基础来进行编译。在选择硬件平台时,我们需要知道该路由器的无线芯片,CPU芯片,然后选出对应的平台设备。
如下:

先选择Target System ---> (Ralink RT288x/RT3xxx)                  
然后      Subtarget ---> (MT7620 based boards)          
     Target Profile ---> (Xiaomi MiWiFi Mini)  
最后 Target Images  ---> (jffs2、squashfs)

这边为平台的首次搭建,其他配置就先不要选择,把上面四个选择好后,就保存退出。

7.编译镜像

make V=99

第一次编译可能需要花费很长的时间,根据你的网络而定,一般情况下大约是2~3个小时,最主要的是花费在下载源码的时间上,以后编译一般在半个小时左右就能编译好。

对于第一次编译源码的下载,我们可以在国内的一些镜像进行手动下载后,拷贝进dl/目录下,这样也可以加快一些编译速度,国内进行可以访问http://dl.openwrtdl.com/

8.编译完成之后,将会多出几个目录如下

编译后增加的目录包括:bin/、build_dir/、dl/、feeds/、staging_dir/。

编译好的工程如下:

/openwrt-15.05/openwrt$ ls
bin          Config.in  feeds.conf.default  LICENSE   rules.mk     tmp
BSDmakefile  dl         include             Makefile  scripts      toolchain
build_dir    docs       key-build           package   staging_dir  tools
config       feeds      key-build.pub       README    target

对于Openwrt的目录结构将在另外一篇"Openwrt directory structure"进行讲解。

9.make步骤分析

简单来说,一旦OpenWrt buildroot已正确配置,如指定目标平台和体系结构,用户空间包已经选择等, OpenWrt buildroot会通过以下步骤编译镜像:

  • 下载交叉编译工具,内核头文件等
  • 建立staging_dir/目录,这个目录是交叉编译工具链将被安装的地方,如果你想使用相同的交叉编译工具链用作其他目的,比如编译第三方应用程序,你可以找到在这个目录下找到交叉编译工具,然后使用arch-linux-gcc 编译你的应用程序
  • 创建下载目录dl/,tar包将下载到这里
  • 创建编译目录build_dir/,用户态的工具和影城包将被解压或者复制到这里来进行编译。
  • 创建目标目录build_dir/target-<arch>*/root-<arch>和目标文件系统架构,这本目录包含最终的根文件系统。
  • 安装用户态软件包到根文件系统和以适当的格式压缩整个根文件系统。最后根文件系统的固件镜像在/bin/<arch>/下生成。

Openwrt clone and bulid的分析就到这边,有感悟时会持续会更新。

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

推荐阅读更多精彩内容