首页 » LANMP » Linux » 正文

从源代码编译安装Linux内核

一.先安装依赖

要从源代码构建Linux内核,需要几个工具:git,make,gcc,libssl-dev和(可选)ctags,cscope或ncurses-dev。工具包可能在各个Linux发行版中不被默认安装,因此可能需要搜索该包。如果你用到” “或” “,需要使用ncurses-dev工具。

Ubuntu,Debian

RHEL,Fedora,CentOS

CentOS6

CentOS7

SUSE based systems

二.下载最新版Linux内核源码

稳定版分支

下载该分支

找一下稳定版的内核tag

当前最新stable内核tag是v4.19.4

使用 创建分支,我这里创建 stable 分支的 v4.19.4 tag

当然,你也可以选择RC版,比如 v4.20-rc3

RC版分支

建议按照上面新创建一个分支来编译

三.配置Linux内核功能

复制当前内核配置

在开始构建内核之前,必须配置Linux内核功能。对于一般用户来说,建议复制现有的配置文件:

许多内核驱动程序可以打开或关闭,或构建为模块。内核源目录中的.config文件确定构建哪些驱动程序。下载源码树时,它没有.config文件。生成.config文件有很多方式,现在我们选择复制当前配置的方式

 

默认配置可能没有您当前使用的选项,此时运行:

开始配置:

如果你需要对配置进行任何更改,可以运行以下命令之一。这些需要安装curses工具。

或者

此外还有如下配置配置(收集硬件信息如cpu型号,网卡等…):

  • make config:基于文本模式的交互配置
  • make oldconfig:使用已有的.config,但会询问新增的配置项
  • make xconfig:图形化的配置(需要安装图形化系统)

配置方法:

1)使用make menuconfig操作方法:

  1. 按y:编译>连接>镜像文件
  2. 按m:编译
  3. 按n:什么都不做
  4. 按”空格键”:y,n轮换

配置完并保存后会在linux源码根目录下生成一个.config文件

注意:在ubuntu上要执行apt-get install libncurses5-dev来安装支持包(前面安装依赖时已安装)

2)利用已有的配置文件模板(.config)

  1. linux源码根目录/arch/<cpu架构>/configs/<具体某一的CPU文件>,把里面对应的文件copy并改名为.config至linux源码根目录下
  2. 利用当前运行已有的文件(要用ls /boot/ -a查看)把/boot/config-2.6.18-53.e15拷贝并改名为.config至linux源码根目录下执行以上操作就可以用make menuconfig在拷贝
    .config文件上面修改文件了

最小化配置

如果你要做最小化配置,从头开始编译内核可能需要很久,因为发行版可能会打开每个硬件配置。 对于想要快速进行内核开发的人来说,您希望进行最小化配置。 Steve Rostedt(注:Linux kernel developer)使用 ktest.pl make_min_config 来获得真正的最小配置,但构建需要一两天。 警告:确保将所有USB设备都插入系统,否则您将无法获得驱动程序!

四.编译内核

  1. make zImage
  2. make bzImage

区别:在X86平台上,zimage只能用于小于512k的内核
获取详细编译信息:make zimage V=1 或 make bzimage V=1
编译好的内核在:arch//boot/目录下
注意:在把.config配置文件cp到根目录编译内核前,必须进入make menuconfig并保存退出(否则生不了效)

以下是我在本机的操作

如果你是多核系统,可以运行

X为你想用来编译Linux内核的CPU核心数量

五.编译并安装模块

  1. 编译内核模块:make modules
  2. 安装内核模块:make modules_install INSTALL_MOD_PATH=/lib/modules

更换本机器内核:将编译好的内核模块从内核源码目录copy至/lib/modules下
制作init ramdisk():输入执行命令mkinitrd initrd-2.6.39(任意) 2.6.39(可通过查询/lib/modules下的目录得到)
注意:
mkinitrd命令为redhat里面的,ubuntu的命令为:mkinitramfs -k /lib/modules/模块安装位置 -o initrd-2.6.39(任意) 2.6.39(可通过查询/lib/modules下的目录得到)
如果debain里面没有mkinitramfs命令可以用apt-get install initrd-tools进行安装

以下是我在本机的操作

六.编译并安装模块

1)手动

  1. cp linux根目录/arch/x86(x64)/boot/bzImage /boot/mylinux-2.6.39
  2. cp linux根目录/initrd-2.6.39 /boot/initrd-2.6.39

最后修改/etc/grub.conf或/etc/lilo.conf文件

2)自动

  1. make install:这个命令会自动完成上面的操作(查看当前内核版本:uname -r)

以下是我在本机的操作

七.更新 grub

CentOS/RHEL/Oracle/Scientific and Fedora Linux

您可以使用以下命令确认详细信息:

Debian/Ubuntu Linux

Ubuntu:要使grub菜单始终在Ubuntu下启动,请从/etc/default/grub中删除GRUB_HIDDEN_TIMEOUT_QUIET行。 您可能希望将GRUB_DEFAULT超时从0增加到15秒或更长时间。 完成grub文件的编辑后,您可能需要更新grub文件。

操作如下:


GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_HIDDEN_TIMEOUT=0

注释掉
#GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0

查看grub菜单顺序

所有操作都执行完毕以后,重启主机( ),重启后执行 ,查看内核版本号

参考链接:

发表评论

正在加载验证码......

请先完成验证