记一次简单的Linux内核编译

记一次简单的Linux内核编译

内核文件下载

[root@study ~ 15:22:53]# wget https://mirrors.cloud.tencent.com/linux-kernel/v3.x/linux-3.19.tar.gz

解压内核文件

[root@study ~ 15:24:02]# mkdir -p /usr/local/kernels && tar -zxvf linux-3.19.tar.gz -C /usr/local/kernels
进入解压目录可以看到一些文件
[root@study linux-3.19 15:25:33]# ls
arch     CREDITS        fs       Kbuild   LICENSES     net      security  virt
block    crypto         include  Kconfig  MAINTAINERS  README   sound
certs    Documentation  init     kernel   Makefile     samples  tools
COPYING  drivers        ipc      lib      mm           scripts  usr

一些目录说明
arch:与硬件平台相关,大部分指的是CPU功能。
block:与块设备较相关的设置数据,块数据通常指的是大容量存储媒介,还包括是否支持类似ext3等文件系统。
crypto:内核所支持的加密技术,例如md5或是des等。
Documentation:内核相关的文档说明。
drivers:一些硬件的驱动程序。
fs:内核所支持的文件系统。
include:一些可让其他程序调用的头文件。
init:一些内核初始化的功能,包括挂载与init程序的调用。
ipc:定义Linux各程序间通信。
kernel:定义内核的进程、内核状态、线程、进程的调度、进程的信号等。
lib:一些函数库。
mm:与内存单元有关的各项数据,包括swap与虚拟内存等。
net:与网络有关的各项协议数据,还有防火墙模块等。
security:包括SElinux等在内的安全性设置。
sound:与音效有关的各项模块。
virt:与虚拟化相关的信息。

内核功能选择

在本地的/boot/目录下有config开头的文件,这个文件是内核功能列表文件。

[root@study ~ 15:49:56]# ls /boot/config*
/boot/config-3.10.0-957.5.1.el7.x86_64  /boot/config-3.10.0-957.el7.x86_64

建立这个文件的方式大概有以下几种:

  1. make menuconfig
    命令行模式下可以显示纯文本界面的方式,不需要启动X window就能够选择内核功能选项。
  2. make oldconfig
    通过使用已存在的./.conf文件内容,使用该文件配置作为默认值,只将新功能选项列出来让用户选择。
  3. make xconfig
    通过以Qt为图形界面基础功能的图形化接口显示,需要具有X window的支持。
  4. make gconfig
    通过以Gtk为图形界面基础功能的图形化接口显示,需要具有X window的支持。
  5. make config
    最原始的功能选择方式,每个选项都以列表的方式一条一条列出来让你选择。

我们可以利用现有的内核的一些设置值,因此我们可以这样操作:

[root@study linux-3.19 16:01:40]# cp /boot/config-3.10.0-957.5.1.el7.x86_64 /usr/local/kernels/linux-3.19/.config
[root@study linux-3.19 16:02:14]# cd /usr/local/kernels/linux-3.19/
[root@study linux-3.19 16:02:28]# make menuconfig
中间可能会报错,无非就是缺少写软件包,通过yum安装以下就好。

执行后可以看到如下界面,需要的功能可自行选择。选择完自己想要的内容后保存即可。
在这里插入图片描述

编译内核与内核模块

[root@study linux-3.19 16:21:11]# make clean -j 8 clean bzImage modules # -j 后面指定cpu内核数量,可以加快编译速度。
编译完成后的文件。
[root@study linux-3.19 16:59:37]# ls arch/x86_64/boot/bzImage 
arch/x86_64/boot/bzImage

安装实际模块

[root@study linux-3.19 17:00:19]# make modules_install
安装后会产生同版本名目录
[root@study linux-3.19 17:05:32]# ll -d /lib/modules/3.19.0/
drwxr-xr-x 3 root root 333 10月 21 17:04 /lib/modules/3.19.0/

安装新内核

复制内核到/boot/引导目录下
[root@study linux-3.1917:05:35]# cp arch/x86/boot/bzImage /boot/vmlinuz-3.19
配置文件也复制一份,虽然没做什么修改
[root@study linux-3.19 17:07:50]#cp .config /boot/config-3.19
给与权限
[root@study linux-3.19 17:08:43]# chmod a+x /boot/vmlinuz-3.19
System.map符号文件。当编译一个新内核时,原来的System.map中的符号信息就不正确了。随着每次内核的编译,就会产生一个新的 System.map文件。
[root@study linux-3.19 17:09:10]# cp System.map /boot/System.map-3.19	
[root@study linux-3.19 17:13:00]# gzip -c Module.symvers > /boot/symvers-3.19.gz
恢复SELinux文件属性
[root@study linux-3.19 17:14:49]# restorecon -Rv /boot/
重新生成引导菜单
[root@study linux-3.19 17:15:20]# dracut -v /boot/initramfs-3.19.img 3.19
[root@study linux-3.19 17:15:41]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.19
Found initrd image: /boot/initramfs-3.19.img
Found linux image: /boot/vmlinuz-3.10.0-957.5.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.5.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-ff59ce31bbb4492dbbc58afed9862a71
Found initrd image: /boot/initramfs-0-rescue-ff59ce31bbb4492dbbc58afed9862a71.img
done
然后重启操作系统即可
发布了65 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/DoloresOOO/article/details/102726819