概述
如果您熟悉Linux类系统,那么OpenWrt对于您就非常简单。如果您不熟悉,那我们就需要首先从一些基础概念开始。
您应该已经知道OpenWrt是一个针对嵌入式设备的Linux发行版,Linux“发行版“是一个通过创建和维护一些软件包实现根据用户需求来定制Linux系统的项目。一个”软件包“是包含一个应用程序或一些脚本的压缩档案,其配置文件中还包含了用于将其集成到操作系统中的信息。软件包可被一个能够下载、打开、安装、卸载的应用程序——包管理器(OpenWrt中为opkg)处理。所以,一个OpenWrt固件是一些围绕Linux内核的软件包组装而成。
每个软件包都被独立进行编译,当软件包编译完成后,所需的软件包都被“安装”在一个临时文件夹中。其后,该文件夹会被压缩并变为设备固件的只读压缩分区(squashfs)。
内核也被当作一个软件包处理,但却通过特殊的方式添加到固件映像中以便设备的引导程序可以发现它。所以,您可以在不触及设备的引导程序(比较危险而且不是总是可行)的情况下替换设备原版的固件。
构建程序的最后一步才是生成一个固件文件(也就是您用于安装或升级OpenWrt的文件),这个文件通常是一个准备写入内置闪存储存装置磁盘映像,所以您会发现许多开发人员在IRC或邮件列表称其为“映像”。
如何编译软件包
如果您查看一个软件包的Makefile(用于定义设置以构建一个特殊软件包,详见https://github.com/openwrt/openwrt/blob/master/package/utils/busybox/Makefile),您会发现它指出了将被编译源码的官方下载链接,一个SHA256哈希值和两个版本号(一个给上游,一个给OpenWrt)用以检验下载的完整性。另外一些软件包会声明git提交/时间戳或使用其他方式以便检验下拉和构造来自同一源。他