最近开始整5G CPE项目,系统基于OpenWrt系统移植裁剪,打算详细研究了一下整个工程的构建过程,记录一下:
Openwrt编译过程概述
编译的总体过程如下:
1.编译host工具
2.编译交叉工具链
3.编译内核模块
4.编译ipk
5.安装ipk到文件系统
6.编译内核
7.将内核和文件系统组合成最终的固件
1. 编译host工具
虽然我们在开始编译前已经安装了一些必要的工具,但编译过程中还需要其他一些主机工具。这部分工具将首先编译。
2. 编译交叉工具链
openwrt自带交叉编译链,当然在编译目标平台软件前,需要先编译。
3. 编译内核模块
因为部分内核模块将会生成独立的ipk,所以内核模块需要首先编译。
4. 编译ipk
这里将编译package目录下的各个软件包,这也是和我们最为息息相关的。
5. 安装ipk
将生成的ipk安装到文件系统之中(比如build_dir/target-XXX/root-ramips目录)。
6. 编译内核
在完成ipk编译之后,将会编译内核,压缩内核.同时使用mkimage工具,在内核前面生成一个用于uboot识别的头部。
7. 合成
在最后一步,将文件系统和内核连接在一起,即生成了目标二进制镜像文件。
顶层Makefile结构分析
我们以19.07的代码为例,整个编译的入口是在源码根目录下的Makefile。编译的各种命令都应该在源码根目录下键入。
整个主Makefile的结构如下:
world:
DISTRO_PKG_CONFIG:=$(shell command -pv pkg-config | grep -E '\/usr' | head -n 1)
export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
ifneq ($(OPENWRT_BUILD),1)
_SINGLE=export MAKEFLAGS=$(space);
override OPENWRT_BUILD=1
export OPENWRT_BUILD
GREP_OPTIONS=
e
OpenWrt编译详解:从host工具到固件合成

本文详细介绍了OpenWrt系统的编译过程,包括编译host工具、交叉工具链、内核模块、ipk、内核以及文件系统整合。在编译过程中,重点解析了顶层Makefile的结构,如world、debug.mk、depends.mk、toplevel.mk等,并阐述了各阶段的目标及依赖关系。此外,还提到了关键文件rules.mk和subdir.mk的功能。整个编译流程涉及多个步骤,最终生成目标二进制镜像文件。
最低0.47元/天 解锁文章
4189

被折叠的 条评论
为什么被折叠?



