Linux内核编译⽣成bzImage的详细⽅法步骤及错误解决
什么是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模式
2. 虚拟机->设置,保证⽹络适配器配置也为NAT模式
winscp的使⽤
WinSCP 是⼀个 Windows 环境下使⽤的 SSH 的开源图形化 SFTP 客户端。同时⽀持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制⽂件,并且可以直接编辑⽂件。
下载并安装。若初始连不上虚拟机,则检查远程虚拟机是否安装并开启了ssh服务(下述3.1)
搭建编译环境
1. 进⼊root:su
2. 进⼊⽤户所在⽂件夹:cd /home/siqi
3. 常规配置及⽹络测试
1. 虚拟机安装ssh服务
//检测是否已安装ssh服务,输⼊以下命令
gzip是什么文件夹
#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
2. winscp连接到虚拟机
输⼊主机名为虚拟机ip地址,端⼝号默认22,输⼊⽤户名和密码
4. 在虚拟机新建kernel⽂件夹,并将linux内核解压到当前⽂件夹
#cd kernel
#tar -zxvf linux-5.11-rc1
5. 将内核中的默认x86配置到根⽬录
#cd linux-5.11-rc1/arch/x86/configs
#cp x86_64_deconfig /home/siqi/kernel/linux-5.11-rc1/.config
#cd ../../../
6. 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
7. 基于⽂本选单的图形化内核配置:make menuconfig,会在源码的顶层⽬录下⾯⽣成⼀个.config⽂件
可能出现的错误有
1. ⼀些安装包没有提前安装上;(根据错误提⽰依次安装)
2. 终端窗⼝太⼩导致错误;
正常执⾏会出现下⾯的菜单框:选择64-bit kernel并点击save保存
若没有这⼀步直接进⾏下⼀步,则会出现⽆尽的选择情况(需要不断按回车)
8. 最后执⾏make bzImage -j8即可。
9. 编译完成。到编译⽣成的bzImage,拷贝出kernel
#cd linux-5.11-rc1/arch/x86/boot/
#ls
会看到bzImage在这⼉啦
#cp bzImage /home/siqi/
10. 附: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-

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。