Linux内核源码的编译及安装

1 内核源码的编译

先查看当前内核版本
在这里插入图片描述
内核ftp下载点下载与当前版本相近的内核源码,我选择了5.3.1的版本。
在编译内核前,要根据目标内核的运行硬件环境对内核的编译选项进行配置,如make menuconfig等,为了简便,我这里在当前系统的config文件基础上进行编译。该config文件是在安装ubuntu是自动生成的,适配于本机硬件环境。本机的config文件在目录/boot/
在这里插入图片描述
可以看到文件config-5.3.0-42-generic就是配置文件,然后将配置文件复制到内核源码目录下cp /boot/config-4.15.0-45-generic .config,然后执行配置操作make oldconfig
make-kpkg clean命令清除之前生成的目标文件。
安装两个工具包apt install kernel-packageapt install libncurses5-dev
然后进行内核编译make-kpkg --initrd kernel-headers kernel_image,注意要留出较大外存,大于30GB,编译过程中会生成许多目标文件,占用大量硬盘空间。
编译完成后会在上一级目录生成两个.deb文件,
在这里插入图片描述
然后切换至该目录下,安装这两个deb文件dpkg -i *.deb,然后重启电脑reboot
什么是make-kpkg
make-kpkg用来制作Ubuntu的内核安装包deb的工具,make-kpkg的安装包是kernel-package,–initrd用于生成initramfs,kernel_image用于生成内核和模块的安装包, kernel_headers用于生成内核头文件的安装包。

2 编译并安装后的变化

重启电脑后我们可以看到在/usr/src/目录下创建了/usr/src/linux-headers-4.15.0目录,该目录中存放了用于编译内核模块的若干Makefile文件、Kconfig文件,include子目录存放了若干头文件。
建立了/lib/modules/5.3.1目录,
在这里插入图片描述
该目录下有以下文件,其中build和source均是符号链接,指向编译内核时的源码目录,其中kernel目录,保存了编译好的各个内核模块文件。
在这里插入图片描述
/boot目录下新增加文件如图,
config-5.3.1是配置文件,System.map-5.3.1是符号表文件,vmlinuz-5.3.1是未压缩的内核映像。initrd.img-5.3.1是一个临时的根文件系统,其中存放了系统启动时所必需的各种驱动程序。
什么是initrd
在系统启动过程中,一个重要的任务就是mount根文件系统,rootfs存放了大部分系统程序,通常位于磁盘上,而要mount根文件系统,则必须有磁盘的驱动程序和文件系统驱动程序。对于建立在IDE硬盘上的ext文件系统,内核映像通常都包含有IDE硬盘驱动和ext文件系统驱动,但是对于其他设备、其他文件系统,内核映像就不一定有相应的驱动。因为Linux需要尽可能多地支持各种各种的硬件设备,但是由于内核映像大小受限,不能随便把硬件设备驱动程序放入内核映像中。所以现在将各种硬件设备、文件系统的驱动程序模块化,在编译内核时,会根据当前硬件配置情况,选出系统启动需要的驱动程序ko,并据此制作成initrd
在这里插入图片描述
/boot/grub目录下存放了各种启动时的菜单选项,/boot/grub/grub.cfg是启动时的GRUB配置文件。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值