写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。


本篇主要内容:

● kernel编译安装



kernel编译安装


回顾:

   源码包编译安装步骤:

      (1)编译环境:开发软件包组、头文件、库文件

      (2)./configure

      (3)make

      (4)make install


kernel编译安装:

   (1)开发环境

      包组:

         Development Tools

         Server Platform Development

      其他:

         make menuconfig依赖包:ncurses-devel

   (2)获取目标主机硬件设备相关信息

      CPU:

         a) cat /proc/info

         b) lscpu

         c) x86info -a

      PCI设备:

         a) lspci

            -v

            -vv

         b) lsusb

            -v

            -vv

         c) lsblk

      了解全部硬件设备信息:

         hal-device

   (3)获取目标主机系统功能相关信息,如要启用的文件系统等


   (4)获取内核源码包:www.kernel.org

   (5)编译过程

      a) tar -xJf linux-3.10.67.tar.xz  -C  /usr/src

      b) cd /usr/src

      c) ln -sv linux-3.10.67 linux

         编译过程需要有linux目录,我们这里建立软链接

      d) cd linux

      e) make menuconfig

         配置内核选项,会弹出图形化界面,对模块进行个性化配置。

         此步骤会在目录中生成.config文件,每一个安装完成的系统都会有这样的.config文件,默认为/boot/config-`uname -r`,可以拷贝过来使用

         选项含义:

            [ ]不编译此模块

            [*]将此模块编译进内核

            [M]将此模块编译为动态模块,放入/lib/modules目录

         备注:此步骤可以有多种方式,查看后续过程详细说明。

      f) make [-j #]

         -j # 可以指定以多线程方式执行,这里的数字不应该超过cpu核心数

      g) make modules_install

         安装内核模块

      h) make install

         安装内核

      i) grub2-set-default MENU_ENTRY

         对grub2引导的系统,设置默认启动内核。

         对grub引导的系统,修改/boot/grub/grub.conf的default项即可。

      j) reboot

      注意:由于编译过程需要很长时间(双核大概要1小时),通过ssh远程连接 很可能由于某些原因导致ssh掉线,进而导致整个编译过程错误。所以建议使用screen命令。

         screen

            screen会建立一个独立的bash窗口,供用户运行命令,即便用户远程登录断开,也不会影响到screen内运行的命令。所有的输出都会打印到screen内,用户可以随时查看输出信息。

            打开screen:screen

            拆除screen:Ctrl+a,d

            列出screen:screen -ls

            连接至screen:screen -r SCREEN_ID

            关闭此screen:exit

   编译过程详细说明:

      (1)配置内核选项

         支持“更新”模式进行配置,在已有的.config文件的基础上进行“修改”配置:

            (a) make config

               基于命令行,以遍历的方式去配置内核中可配置的每个选项;

            (b) make menuconfig

               基于cureses文本配置窗口,图形选项方式

            (c) make gconfig

               基于GTK开发环境的窗口界面,包组“桌面平台开发”

            (d) make xconfig

               基于QT开发环境的窗口界面。

         支持“全新配置”模式进行配置:

            (a) make defconfig

               基于内核为目标平台提供的“默认”配置为模板,进行配置

            (b)make allnoconfig

               将所有选项均设置为“no”

      (2)编译

         (a)多线程编译

            make [-j #]

         (b)只编译内核中的部分代码

            (a)按目录划分的部分代码

               cd /usr/src/linux

               make path/to/dir/

            (b)只编译特定的模块

               cd /usr/src/linux

               make path/to/dir/file.ko

                  这里的file.ko并不一定仅匹配file.ko,如file.ko不存在,也会匹配为file.c

         (c)交叉编译

            目标平台与当前编译平台不同

            make ARCH=arch_name

            获取帮助:

               make ARCH=arch_name help

      (3)编译清理操作

         在事先编译过的目录再次编译前,需要先进行清理操作 

         make clean

            清理大多数文件,但会保留配置文件.config以及编译外部模块所需的文件

         make mrproper

            清理编译生成的所有文件,包括匹配文件及某些备份文件

         make distclean

            相当于mrproper,额外清理各种patches以及编辑器备份文件

实例:

[root@www ~]# cd /tmp
[root@www tmp]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.20.tar.xz
[root@www tmp]# screen
[root@www tmp]# tar -xJf linux-4.1.20.tar.xz -C /usr/src/
[root@www src]# ln -sv linux-4.1.20 linux
‘linux’ -> ‘linux-4.1.20’
[root@www src]# cd linux
[root@www linux]# make menuconfig
  #界面如下图
[root@www linux]# make -j 2
[root@www linux]# make modules_install
[root@www linux]# make install
  #查看grub2配置文件,发现多了一个menuentry条目
[root@www linux]# cat /boot/grub2/grub.cfg
...省略输出...
menuentry 'CentOS Linux (4.1.20) 7 (Core)'
...省略输出...
[root@www linux]# grub2-set-default 'CentOS Linux (4.1.20) 7 (Core)'
[root@www linux]# reboot


wKioL1b5SKSSql5lAAB2nrzdQTc131.png