提示:本系列文章重点学习Linux内核
Linux内核--内核编译/内核镜像产生过程
简介
提示:在这里先对Linux内核镜像产生过程做一个概述,以便大家能更好的理解:
vmlinux->lmage->compressed/vmlinux- >zlmage
提示:以下是本篇文章将重点阐述Linux内核的内核编译/内核镜像产生过程
一、Linux内核编译
1.内核编译流程
(1)拷贝内核到服务器:linux-6.1.28.tar.xz(内核的下载流程和方式Linux内核介绍and下载-CSDN博客)
(2)解压内核:
tar xvf 源码压缩包
(3)首次编译之前要清除之前的结果:
make distclean
(4)拷贝配置文件: (注意此处需要先行配置出.config文件;裁剪配置过程将在之后的系列文章提到)
cp config_xxxxxxxx .config
(5)编译生成镜像:
make ulmage
(6)普通用户下载镜像是boot.img
进入arch/arm/boot/temp目录
cd arch/arm/boot/temp
执行命令:
./mkboot.sh
如果提示:./make_ ext4fs: error while loading shared libraries: libstdc++ .so.6: cannot open shared object file: No such file or directory
安装一个32位C++库:sudo apt-get install lib32stdc++6
sudo apt-get install lib32stdc++6
生成镜像boot.img位于:arch/arm/boot/
2.Linux镜像
(1)Vmlinux/顶层目录
内核顶层目录的vmlinux:这是内核编译生成的可执行文件,文件大小约有100M+
(2)Image
内核arch/arm/boot/目录的Image:直接编译生成的vmlinux去除格式后, 且未经压缩处理的内核镜像,文件大小约有11M+。直接生成并且无头部未压缩的内核,一般用于PC机
(3)vmlinux
内核arch/arm/boot/compressed目录的vmlinux:是Image压缩后,再拼接上解压程序得到的镜像,文件大小约有5M+
(4)zlmage
内核arch/arm/boot/目录的zlmage:是arch/arm/boot/compressed 目录的vmlinux经过去格式处理后得到的压缩镜像,可以直接下载运行,文件大小约有5M+。lmage的压缩版,采用gzip进行压缩,比lmage体积小,但启动时需要进行自解压,嵌入式系统中一般采用此种方法。
(5)ulmage
内核arch/arm/boot/目录的ulmage:是在zlmage的基础上增加64字节前缀得到的uboot专用镜像。是u-boot专用的一种 内核镜像格式,它是在zlmage的基础上采用mkimage工具添加了一个长度为64字节的标签头,在u-boot启动时会去掉此头信息,仍按zlmage启动,头信息主要用于区分不同格式的内核镜像。
(6)xiplmage
xiplmage:片上执行的未压缩内核,(如norflash等)。
(7)boot.img
内核arch/arm/boot/目录的boot.img:是包括了ulmage和开机Logo等资源的打包镜像。
二、内核镜像产生过程
1.描述
(1)zlmage镜像产生过程:
vmlinux->lmage->compressed/vmlinux- >zlmage
1、vmlinux是由以下内核代码生成的非压缩镜像
(arch/arm/kernel/head.s、kernel/、 mm/、fs/、 ipc/、 crypto/、 lib/、drivers/、net/等等)
2、Image是使用objcopy工具对vmlinux进行二进制化处理得到的镜像
3、arch/arm/ boot/compressed/vmlinux由压缩的Image和compressed/head.s、 misc.c等文件组成
4、zlmage是由compressed/vmlinux使用objcopy工具二进制化得到
5、再对zImage加上头部就成为了ulmage