内核编译安装过程


wKioL1g4SVmCRk6LAAAqG5XhNMQ093.jpg

前言

        Linux内核(英语:linux kernel),是一种计算机操作系统内核,已C语言和汇编语言写成,匹配POSIX标准,以GNU通用公共许可证发布。从技术上说linux只是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件控制、多任务等功能的系统软件。

        内核是操作系统的核心,也是操作系统最基本的部分。Linux内核工作在模块化的方式下并且这些模块可以动态的卸载和装载;所以在很多公司面临不同的实际应用时都会编译内核定制相关的内核模块配置相关的内核参数以达到需求并剔除不需要内核模块。


目录

    前言

   一、编译前准备

    1、准备开发环境

    2、获取目标主机硬件设备相关信息:

    3、获取目标主机系统功能的相关信息

    4、获取内核源码

   二、编译前准备

    1、安装开发包组

    2、下载源码文件及解压

    3、准备配置文件

   三、编译开始

    1、首先给执行make menuconfig 命令(该命令在源码目录下执行)

    2、选择我们需要启动的内核模块。

    3、开始进行编译

    4、make modules_install:安装模块

    5、make install :安装内核相关文件

   ·6、编辑grub配置文件

   四、补充:

    1、大概步骤:

    2、编译配置选项

    3、编译

    4、编译内核

    5、清理删除



一、编译前准备

    1、准备开发环境

开发包组(centos6)

Server platform development 

Development toos

    2、获取目标主机硬件设备相关信息:

    CPU:

     cat /proc/cpuinfo

     x86info  –a

     lscpu

    PCI设备:

     lspci  -v  (-vv 详细)

     lsusb  -v  -vv

     lsblk 块设备

     了解全部硬件设备信息

     hal-device 

    3、获取目标主机系统功能的相关信息

    例如:需要启用相应的文件系统

     这个实验里我们需要将NTFS文件系统格式启用。

     在实际的应用中可能需求更为复杂。

    4、获取内核源码

                www.kernel.org 

二、编译前准备

1、安装开发包组

       #yum groupinstall Development toos

2、下载源码文件及解压

tar  –xvf  linux4.8.10.tar.xz  (很多人说要解压在/usr/src其实都一样这里实验环境就没有讲究那么多至新建了一个kernel目录。)

 wKioL1g4SxfiBuO7AAAezvD8bec374.jpg

3、准备配置文件

     #cp  /boot/config-2.6.32-573.el6.x86_64  /root/kernel/linux-4.8.10 
     #mv  config-2.6.32-573.el6.x86_64  .config 
     #grep  NTFS  .config 
     # CONFIG_NTFS_FS is not set

解释一下上面的两步:

        从boot目录拷贝一个config文件过来主要是为了方便,这个文件里保存都是之前你在安装系统是内核所安装的模块,这里拷贝过来为了主要为了方便演示,具体各位以后在应用中需要什么的模块那各位就自己去筛选了(虽然这种工作几乎不会做当然除非有特殊需求的,既然刚刚来看这篇文章,那我相信你的老板也不放心让你去这样做。开个玩笑 哈。。)

        至于 grep NTFS .confg  (这里只是想让大家看下NTFS这个内核模块没有启动的下面在编译的时候我们就将NFTS启用)

三、编译开始

1、首先给执行make menuconfig 命令(该命令在源码目录下执行)

        第一步先给以后内核加个名称 。

wKiom1g4S52BFlPxAACbi33r6dY388.jpg

wKioL1g4S-bgRlt7AAEAA7NTXnY254.jpg

wKioL1g4TLrTZMs2AABM9h0U7i0205.jpg

2、选择我们需要启动的内核模块

  在打开这个配置界面的第一个界面下依次选择 File systems -- > DOS/FAT/NT file systems -- > NTFS file systems support (利用空格键选中。[ ] N  [M] 表示将模块打在ramdisk中 [*] y  表示将模块打在内核中。本实验将NTFS模块打在ramdisk中。 )

wKiom1g4TCDzlDtCAAChTcZHXCA075.jpg

wKioL1g4TCDBs0JkAACrRJQjRhA343.jpg

wKiom1g4TCGyyGcDAAD_zmc3heE142.jpg

退出保存 之后 

grep NTFS .config  (看图就明白了)

 wKioL1g4TOryKB_qAAAjZh1_hoo546.jpg

3、开始进行编译

  因为远程编译可能终端如果断开那那就前功尽弃了 ,所以诸位在编译前最好使用screen 这样即使终端断开也不用担心编译中断了。

  # make  -j  4(cpu 核心数 单一核心就不用写了) (该命令在源码目录下执行)  编译过程可能需要一段时间机器性能好的话 几分钟性能不好的话半小时以上。编译过程总可能会报错最多的报错就是openssl 各位大可以提前安装(yum 安装就好)

 

wKioL1g4TRPw3V2NAAAng1a-8tk314.png

wKiom1g4TRTi9uqrAAGMXzSHR3o198.jpg


4、make modules_install:安装模块

执行命令 make modules_install 就好了

5、make install :安装内核相关文件

执行命令 make install  安装内核相关文件,主要目的将所有的编译之后的内

容拷贝安装到相应的目录。

6、编辑grub配置文件

 wKiom1g4TT2AzWv2AACijxeZlaA843.png


补充:

1、大概步骤:   

          1、安装开发包组
     2、下载源码文件
     3、.config:准备文本配置文件
     4、make menuconfig:配置内核选项
     5、make [-j #]
     6、make modules_install:安装模块
     7、make install :安装内核相关文件
        安装bzImage为/boot/vmlinuz-VERSION-RELEASE (去boot目录下查看)
        生成initramfs文件
      8、编辑grub的配置文件

2、编译配置选项

    配置内核选项
    支持“更新”模式进行配置: make help
    (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
    (b) make menuconfig:基于curses的文本窗口界面
    (c) make gconfig:基于GTK (GNOME)环境窗口界面
    (d) make xconfig:基于QT(KDE)环境的窗口界面
   支持“全新配置”模式进行配置
    (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
    (b) make allyesconfig: 所有选项均回答为“yes“
    (c) make allnoconfig: 所有选项均回答为"no“

3、编译

     全编译:make [-j #]
     编译内核的一部分功能:
   a) 只编译某子目录中的相关代码:
    # cd /usr/src/linux
    # make dir/
   (b) 只编译一个特定的模块:
    # cd /usr/src/linux
    # make dir/file.ko
   例如:只为e1000编译驱动:
    #make drivers/net/ethernet/intel/e1000/e1000.ko

4、编译内核

        如何交叉编译内核:
    编译的目标平台与当前平台不相同;
       # make ARCH=arch_name
    要获取特定目标平台的使用帮助
       # make ARCH=arch_name help
      # make ARCH=arm help

5、清理删除 

   在已经执行过编译操作的内核源码树做重新编译:
   需要事先清理操作:
    # make clean:清理大多数编译生成的文件,但会保留config文件等
    # make mrproper: 清理所有编译生成的文件、 config及某些备份文件
    # make distclean: mrproper、 patches以及编辑器备份文件
   卸载内核
    删除/lib/modules/目录下不需要的内核库文件
    删除/usr/src/linux/目录下不需要的内核源码
    删除/boot目录下启动的内核和内核映像文件
    更改grub的配置文件,删除不需要的内核启动列表


最后写的不怎么样 ,望诸位见谅 希望朋友们能够有所收获。