原文: https://blog.csdn.net/hongwei_1990/article/details/93791798
OpenWrt(官网 www.openwrt.org)是一个嵌入式的 Linux 发行版,目前常用在路由器上。它是一个高度模块化、高度自动化的嵌入式 Linux 系统,拥有强大的网络组件
和扩展性
。
OpenWrt 不同于其他许多用于路由器的发行版(主流路由器固件有 DD-WRT,Tomato,OpenWrt 三类),它是一个从零开始编写的、功能齐全的、容易修改的路由器
操作系统。
一、OpenWrt 优点
通过 OpenWrt 快速构建一个应用平台,OpenWrt 从交叉编译器,到 Linux 内核,再到文件系统甚至 Bootloader 都整合在了一起,形成了一个SDK环境。其多达 3000 多种软件包(数量还在增加),囊括从工具链(Toolchain),到内核(Linux Kernel),到软件包(Packages),再到根文件系统(Rootfs)整个体系,使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件,大大减少了嵌入式软件开发的工序。
当你熟悉这些嵌入式 Linux 的基本开发流程后你不再局限于MIPS处理器和无线路由器,你可以尝试在其它处理器,或者非无线路由器的系统移植嵌入式 Linux,定制合适自己的应用软件,并建立一个完整的嵌入式产品。
OpenWrt 的成功之处还在于它的文件系统是可写的,开发者无需在每一次修改后重新编译系统,并且可以像 PC 机上的 Linux 系统一样,用命令安装一些安装包,不用手动配置,这些都令它更像一个小型的 Linux 电脑系统。
二、OpenWrt 版本发展
OpenWrt 所支持的平台包括:Broadcom的SoC,ARM,PowerPC,MIPS 24K R2,x86 。在软件应用上出现了以 LuCi
跟 Webif
为首的 UI 以及各种更新软件包。
序号 | 版本 | 发布日期 | 代号 |
1 | 10.03.1 | 2011/12 | Backfire |
2 | 12.09 | 2013/4 | Attitude Adjustment |
3 | 14.07 | 2014/10 | Barrier Breaker |
4 | 15.05 | 2015/9 | Chaos Calmer |
5 | 15.05.1 | 2016/3 | Chaos Calmer |
6 | 18.06 | 2018/7 | Chaos Calmer |
三、OpenWrt源码
序号 | 目录和文件 | 描述 |
1 | /config | 存放着整个系统的配置文件 |
2 | /docs | 包含了整个宿主机的文件源码的介绍, 里面还有Makefile 为目标系统生成 docs。 使用 make -C docs/ 可以为目标系统生成文档 |
3 | /feeds | 下载管理软件包的 默认的feeds下载有 packages、management、luci、routing、telephony |
4 | /include | OpenWrt 的很多Makefile都存放在这里,文件名为*.mk ;这里的文件是在Makefile里被include 的,类似于库文件这些文件定义了编译过程 |
5 | /package | 存放了 OpenWrt 系统中适用的软件包,包含针对各个软件包的Makefile |
6 | /scripts | 存放了一些脚本,使用了 bash,Python,perl 等多种脚本语言编译过程中,用于第三方软件包管理的 feeds 文件也是在这个目录当中在编译过程中,使用到的脚本也统一放在这个目录中 |
7 | /target | OpenWrt 的源码可以编译出各个平台适用的二进制文件,各平台在这个目录里定义了firmware 和kernel 的编译过程 |
8 | /toolchain | 存放的就是编译交叉编译链的软件包 包括: binutils,gcc,libc 等等 |
9 | /tools | 编译时,主机需要使用一些工具软件,tools 里包含了获取和编译这些工具的命令软件包里面有Makefile文件,有的还包含了 patch 每个Makefile当中都有一句 $(eval $(call HostBuild)) ,这表明编译这个工具是为了在主机上使用的 |
10 | Config.in | 在include/toplevel.mk 中可以看到,这是和make menuconfig 相关联的文件 |
11 | feeds.conf.default | 可以配置下载第三方一些软件包时所使用的地址 |
12 | Makefile | 在顶层目录执行make 命令的入口文件 |
13 | rules.mk | 定义了Makefile中使用的一些通用变量和函数 |
14 | LICENSE | 软件许可证 |
15 | READNE | 软件基本说明:描述了编译软件的基本过程和依赖文件 |
编译一次 OpenWrt 源码后,会出现一些新的目录:
序号 | 目录 | 描述 |
1 | /build_dir/host | 在该文件夹中编译主机使用的工具软件 |
2 | /build_dir/target-mipsel_xxx | 在此编译目标平台的目标文件,包括各个软件包和内核文件 |
3 | /build_dir/toolchain-mipsel_ | 在该文件夹中编译交叉工具链 |
4 | /bin | 保存编译完成后的二进制文件 包括:完整的 bin 文件,所有的 ipk 文件 |
5 | /dl | 在编译过程中使用的很多软件 刚开始下载源码并没有包含,而是在编译过程中从其他服务器下载的;这里是统一的保存目录 |
6 | /staging_dir | 用于保存在build_dir 目录中编译完成的软件所以这里也和 build_dir 有同样的子目录结构比如:在 target-XXX 文件夹中保存了目标平台编译好的头文件,库文件在我们开发自己的ipk 文件时,编译过程中,预处理头文件,链接动态库,静态库 都是到这个子文件夹中 |
7 | /tmp | 在编译过程中,有大量中间临时文件需要保存,都是在这里 |
8 | /logs | 编译过程中出错的信息,只有当编译出错了才会出现 |