编译安装源码-Linux内核源码编译安装

1 内核源码编译

首先查看当前内核版本

从内核 ftp 下载点下载与当前版本类似的内核源代码。 我选择的是5.3.1版本。

在编译内核之前,需要根据目标内核运行的硬件环境配置内核编译选项,例如makemenuconfig等。为了简单起见,我是根据当前系统的config文件进行编译的。 config文件是ubuntu安装时手动生成的,适合本地硬件环境。本机的config文件在/boot/目录

源码编译安装的基本过程_编译安装源码_opencv源码编译安装

可以看到config-5.3.0-42-generic这个文件就是配置文件,然后将配置文件复制到内核源码目录下的cp/boot/config-4.15.0-45-generic.config中,并然后执行配置操作makeoldconfig。

使用 make-kpkgclean 命令消除以前生成的目标文件。

安装两个工具包aptinstallkernel-package和aptinstalllibncurses5-dev。

opencv源码编译安装_编译安装源码_源码编译安装的基本过程

然后用make-kpkg--initrdkernel-headerskernel_image编译内核,注意预留比较大的内存,小于30GB,编译过程中会生成很多目标文件,会占用大量硬盘空间。

编译完成后,会在上层目录生成两个.deb文件。

然后切换到这个目录,安装dpkg-i*.deb这两个deb文件,然后重启笔记本。

源码编译安装的基本过程_编译安装源码_opencv源码编译安装

哪个是 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子目录存储多个头文件。

编译安装源码_源码编译安装的基本过程_opencv源码编译安装

构建/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

在系统启动过程中,一项重要的任务就是挂载根文件系统。 rootfs存储了大部分系统程序,通常位于c盘。 要挂载根文件系统,必须有c盘的驱动和文件系统驱动程序。 对于IDE硬盘上构建的ext文件系统,内核镜像一般包括IDE硬盘驱动和ext文件系统驱动,而对于其他设备和其他文件系统,内核镜像不一定有相应的驱动。 由于Linux需要支持尽可能多类型的硬件设备,而且由于内核镜像的大小是有限的,硬件设备驱动程序无法随意加载到内核镜像中。 所以现在各种硬件设备和文件系统的驱动都是模块化的。 编译内核时,会根据当前硬件配置选择系统启动所需的驱动ko,并相应制作initrd。

/boot/grub目录存放各种启动菜单选项,/boot/grub/grub.cfg是启动时的GRUB配置文件。