OpenWrt高清无码(4)获取源代码

tags: openwrt tutorial

源码在哪

首先搬出官方说明镇场:https://dev.openwrt.org/wiki/GetSource,喜欢原味的朋友可以直接在这里得到满足。

题外话:早期OpenWrt的开发使用SVN做版本控制,后来GIT开始流行,OpenWrt开始逐渐向GIT过渡,但仍然保持着对SVN的兼容。所以,一些旧的教程里,仍然会看到SVN操作的说明。而现在,它已经完全迁移到GIT上来了。GIT谁用谁知道,没有人能抗拒GIT的魅力。GIT是目前所见最有前途的版本控制系统,尤其适合大规模协作开发。如果你还不熟悉它,赶快去学起来。个人推荐progit这本免费的在线教材,开宗明义,入门必读之经典。

OpenWrt的GIT服务器放在http://git.openwrt.org/,由社区核心成员在维护。不过这个服务器对国内用户来说有点偏僻,连上去不是那么容易,即使连上了,速度也有点难以接受。OpenWrt也响应了一部分呼吁,在github上建了一些备份。如果连接官方服务器有点困难,你可以试试github,注意它只是一个手动备份,并不是实时同步的,一般会有一到两周的滞后。

如果你对最新的开发进展感兴趣,你可以抓取trunk的代码。trunk表示主干,也常被称为bleeding edge,象征最新、最前沿,当然,也最不稳定。OpenWrt的主要开发活动都在trunk上,代码更新速度非常快,每天都有许多新的修改被提交到trunk上。trunk记录的开发历史非常长,最早的提交记录是2004年3月28日,已经12年了。所以整个代码仓库比较大。

用git命令下载trunk代码:

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

当trunk开发到一定阶段,功能完备,稳定性相对OK的时候,就会长出一个稳定版分支(git branch)。当前最新的稳定版分支是15.05。跟一般的版本号不同,这个数字其实代表的是2015年5月,代表代码从trunk独立的时间。

用git命令下载15.05代码:

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

每个稳定版本发布时,社区都会给它取一个特别的名字,15.05这一版就叫Chaos Calmer。可能是受了Android命名的启发,近几年的稳定版名字都比较有规律,Attitude Adjustment (12.09),Barrier Breaker(14.07), Chaos Calmer(15.05),Designated Driver(下一个稳定版本,还未从trunk独立),我们简称它为AA,BB,CC,DD。推荐所有初学者都从稳定版开始,若非特别需要,不要去折腾trunk。

源代码结构简介

代码下载完成之后,我们来看看里面都有些什么,执行一个ls -al

drwxrwxr-x. 11 nossiac nossiac  4096 May  4 10:06 .
drwxrwxr-x. 18 nossiac nossiac  4096 May  4 10:06 ..
-rw-rw-r--.  1 nossiac nossiac   179 May  4 10:06 BSDmakefile
drwxrwxr-x.  2 nossiac nossiac    96 May  4 10:06 config
-rw-rw-r--.  1 nossiac nossiac   576 May  4 10:06 Config.in
drwxrwxr-x.  2 nossiac nossiac  4096 May  4 10:06 docs
-rw-rw-r--.  1 nossiac nossiac   904 May  4 10:06 feeds.conf.default
drwxrwxr-x.  8 nossiac nossiac  4096 May  4 10:06 .git
-rw-rw-r--.  1 nossiac nossiac     8 May  4 10:06 .gitattributes
-rw-rw-r--.  1 nossiac nossiac   224 May  4 10:06 .gitignore
drwxrwxr-x.  3 nossiac nossiac  4096 May  4 10:06 include
-rw-rw-r--.  1 nossiac nossiac 17992 May  4 10:06 LICENSE
-rw-rw-r--.  1 nossiac nossiac  2659 May  4 10:06 Makefile
drwxrwxr-x. 11 nossiac nossiac  4096 May  4 10:06 package
-rw-rw-r--.  1 nossiac nossiac  1272 May  4 10:06 README
-rw-rw-r--.  1 nossiac nossiac 10705 May  4 10:06 rules.mk
drwxrwxr-x.  4 nossiac nossiac  4096 May  4 10:06 scripts
drwxrwxr-x.  6 nossiac nossiac    94 May  4 10:06 target
drwxrwxr-x. 11 nossiac nossiac  4096 May  4 10:06 toolchain
drwxrwxr-x. 53 nossiac nossiac  4096 May  4 10:06 tools

简单说明一下这些文件和目录都是干什么的。

  • BSDmakefile,这是BSD系统下的make文件。强烈建议在linux环境下面搞OpenWrt,不要浪费时间在Win/Mac/BSD这些环境上。
  • config,下面放了几个全局的编译配置文件,你在make menuconfig时就会看到它们。
  • Config.in,项目的主配置文件,同样是在make menuconfig时被用到。它内部又引用了许多其它的配置文件,包括config文件夹里的配置文件。
  • docs,一些TeX/LaTeX格式的帮助文档,内容少且陈旧,可以忽略。
  • feeds.conf.default,OpenWrt上有许多丰富的软件可以安装,我们可以用scripts/feeds命令来访问这些软件仓库。这个文件里列出了软件仓库的地址。
  • .git,git维护的本地代码仓库,它不是OpenWrt代码的一部分,一般不需要碰它。
  • .gitattributes,git的本地配置文件,一般不需要碰它。
  • .gitignore,git的黑白名单。用于指定需要被git管控或忽略的文件和目录,一般不需要碰它。
  • include,下面主要放的是mk文件。OpenWrt有一套强大、完备、复杂的make系统,大部分通用的make脚本都放在这里面。它们会被include进很多位置的Makefile里。
  • LICENCE,GPLv2协议。OpenWrt是基于GPLv2开放源代码的,理论上,所有基于OpenWrt开发的产品,都应该按照GPLv2开放源码。
  • Makefile,主Makefile。OpenWrt编译的起点。
  • package,一个完整的OpenWrt系统是由很多小零件拼成的,比如linux做内核,libc提供程序的运行库,busybox提供大部分命令行工具,luci提供了网页控制界面,dnsmasq提供了DNS、DHCP服务,dropbear提供了ssh服务……所有这些零件都被称为package。前面提到OpenWrt支持的软件仓库(我们称它为feeds),里面放的其实也是一个个的package。OpenWrt从必要性上来区分feeds和package。比如dnsmasq,它提供DNS、DHCP服务,是一个路由系统运行所必须的零件,所以把它放在package里。有一些零件则是可选的,比如samba服务器,它对路由来说没那么重要,就放在第三方的软件仓库里。
  • READEM,叫你读它,你就读呗。
  • rules.mk,这也是一个通用的make脚本,被广泛引用到其它Makefile里。熟悉Makefile的同学可能思空见惯了,不必赘述。
  • scripts,这个目录放置了编译OpenWrt会用到的各种辅助脚本。很快我们就会用到这里面的feeds脚本,来完成luci的安装。
  • target,这个目录非常重要,它存放的是OpenWrt支持的所有平台的信息。我们在开发和移植OpenWrt的过程中会围绕这个目录做很多工作。
  • toolchain,顾名思义,工具链嘛。你在电脑上编译一个程序,想让它路由器上运行,这就叫“交叉编译”。所以你需要针对路由器的GCC、LD、AR等工具。这个目录就是定义了交叉工具的编译方法。
  • tools,一些工具的源码,用途跟scripts目录比较类似。

可能看完上面的介绍,还是有些云里雾里。不要着急,在之后的讲解过程中,我们会逐渐深入的了解每个文件或文件夹的内容和用途。