什么是bzImage

bzImage诚如其名是big image的意思,不是压缩的image。

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。编译过RedHat Linux内核的人对其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这些文件是怎么产生的呢?以vmlinuz为例。

  vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行 的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。

  vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,手动拷贝到/boot目录下面。zImage适用于小内核的情况,它的存在是为了向后的兼容性。

  二是内核编译时通过命令make bzImage创建,然后手动拷贝至/boot目录下。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

  内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个 640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行 时是相同的。大的内核采用bzImage,不能采用zImage。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

环境准备

  1. 下载Ubuntu镜像
  2. 安装虚拟机并导入镜像
  3. 下载linux内核

虚拟机联网

刚安装的虚拟机及映像可能会产生连不上网的情况。解决办法:

  1. 进入VMware Workstation,编辑->虚拟网络编辑器,将VMnet8设置为NAT模式

kernel没有编译NETDEVICES 编译内核没生成zimage_编译内核

  1. 虚拟机->设置,保证网络适配器配置也为NAT模式

winscp的使用

WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。

kernel没有编译NETDEVICES 编译内核没生成zimage_linux_02

官网下载并安装。若初始连不上虚拟机,则检查远程虚拟机是否安装并开启了ssh服务(下述3.1)

搭建编译环境

  1. 进入root:su
  2. 进入用户所在文件夹:cd /home/siqi
  3. 常规配置及网络测试
  1. 虚拟机安装ssh服务
//检测是否已安装ssh服务,输入以下命令
#ssh localhost
//出现以下提示则为未安装: ssh: connect to host localhost port 22: Connection refused (ssh:连接到主机本地主机端口22:连接被拒绝)
#apt-get install openssh-server
//启动服务
#/etc/init.d/ssh start
//检查服务是否启动成功
#ps -e|grep ssh
  1. winscp连接到虚拟机
    输入主机名为虚拟机ip地址,端口号默认22,输入用户名和密码
  1. 在虚拟机新建kernel文件夹,并将linux内核解压到当前文件夹
#cd kernel
#tar -zxvf linux-5.11-rc1
  1. 将内核中的默认x86配置到根目录
#cd linux-5.11-rc1/arch/x86/configs
#cp x86_64_deconfig /home/siqi/kernel/linux-5.11-rc1/.config
#cd ../../../
  1. x86编译前准备:如果不执行以下指令,会有“command not found”的错误提示
#apt-get install make
#apt-get install gcc
#apt-get install flex
#apt-get install bison
#apt-get install libcurses-dev
#apt-get install libssl-dev
#apt-get install libelf-dev
  1. 基于文本选单的图形化内核配置:make menuconfig,会在源码的顶层目录下面生成一个.config文件
    可能出现的错误有
  1. 一些安装包没有提前安装上;(根据错误提示依次安装)
  2. 终端窗口太小导致错误;

正常执行会出现下面的菜单框:选择64-bit kernel并点击save保存

若没有这一步直接进行下一步,则会出现无尽的选择情况(需要不断按回车)

  1. 最后执行make bzImage -j8即可。
  2. 编译完成。找到编译生成的bzImage,拷贝出kernel
#cd linux-5.11-rc1/arch/x86/boot/
#ls
会看到bzImage在这儿啦
#cp bzImage /home/siqi/
  1. 附:arm交叉编译命令
make distclean ARCH-arm64
make mrproper ARCH-arm64
make dtbs ARCH-arm64
cp arch/arm64/configs/defconfig .config
cp /home/siqi/ft2000plus_defconfig .config
make menuconfig ARCH-arm64
make Image ARCH-arm64 -j8 CROSS_COMPILE-aarch64-none-linux-gnu-
make uImage ARCH-arm64 -j8 CROSS_COMPILE-aarch64-none-linux-gnu-