初识linux内核编译

编译内核前提:

       1、准备开发环境。

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

       3、获取目标主机系统功能的相关信息,例如要启用的文件系统。

       4、获取内核源代码包:www.kernel.org

实验环境:基于CentOS7.2进行

如何准备开发环境:

       安装开发包组

              CentOS6:安装Developmet Tools、Server Platform Development(服务器平台开发)

              CentOS7:安装Developmet Tools、Server Platform Development(服务器平台开发)

              确保”ncurses”已安装

如何获取目标主机上硬件相关信息

       CPU型号:      

~]#/cat /proc/cpuinfo
~]#lscpu
~]#yum install -y x86info
~]#x86info -a

blob.png

       PCI设备:

              显卡、网卡、键盘、鼠标等

~]# lspci

                     -v

                     -vv

~]# lsusb
~]# lsblk

              了解全部硬件信息:   

]# hal-device

内核编译过程

       1、获取较高版本的内核。如下载linux-3.10.67

       2、解压内核压缩包至/usr/src目录

       3当项目需要统一的名称进行管理时,将带有不同版本号的项目链接至统一名称是一种比较好的解决方式。相较于直接修改不同版本号的项目为统一名称,软连接的方式能够支持回滚。

       4、开始编译内核,使用make命令。在/usr/src目录下

~]# make menuconfig #配置内核选项。若提示错误,可能需要安装ncurses-devel包。
    安装之后在执行。
~]# make         #编译内核,可是有-j指定编译线程数量
~]# make modules_intsall #安装内核模块
~]# make install     #安装内

              之后重启系统,选择使用新内核。

注:在远程连接进行耗时较长的操作时,为避免因网络异常导致连接中断,从而影响正常操作,在进行操作时,应当进入scren操作

  1)在/boot目录,与名为config-Version-Release的文件,在编译内核时,刻以此文件为模板进行编译。如:config-3.10.0-327.el7.x86_64

cp /boot/config-3.10.0-327.el7.x86_64 /usr/src/linux/.config

blob.png

 2)配置内核选项。

      a、支持“更新“配置,支持在已有的.config文件基础之上进行”修改“配置。

        (1)make config:基于命令行以遍历的方式去配置内核中可配置的每个选项

        (2)make menuconfig:基于ncurses-delve的文件配置窗口。

        (3)make gconfig:基于GTK开发环境的窗口界面,需安装“桌面平台开发“

        (4)make xconfig:基于QT开发环境的窗口界面

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

        (1)make defconfig:基于内核为目标平台提供的“默认“配置为模板进行配置,不再读取.config文件

        (2)make allnoconfig:所有选项均为“no”

在此使用:make menuconfig

2.1)在Processor type and features选项中的Processor family选项菜单中可以选择当前的cpu类型

blob.png

blob.png

选择对应的CPU类型即可

blob.png

2.2)在General setup中的Local version菜单可以配置grub菜单中内核现实的信息

blob.png

blob.png

当然,一般添加的是系统版本信息,比如RHEL7,简写为-el7。第一次编译的话写为-1.el67。

blob.png

2.3

blob.png

3) 编译      

       3.1)支持多线程编译:make –j #

       3.2)仅编译内核中的一部分代码

             a)只编译某子目录中的相关代码

                       切换至内核源码树下:cd /usr/src/linux

                       make /path/to/dir

             b)至编译特定的模块

                        cd /usr/src/linux

                        make /path/to/dir/file.ko  #在该目录下可能只存在file文件,但是在配置时要些微file.ko,若仅编译一个模块,需要将该模块手动移动到 /lib/modules/Version-Release/kernel/对应的目录下

            c)交叉编译

                       编译的目标平台与当前编译操作的平台不同。

                       #make ARCH=arch_name

                       如何获取特定目标平台的使用帮助

                       #make ARCH=arch_name help

如何在执行过编译操作的内核源码树上做重新编译:

       事先清理操作:

              make clean:清理编译生成的绝大多数文件,但会保留.config和外部编译所需要的文件

              make mrproper:清理编译生成的所有文件,包括配置生成的.config文件及某些配置文件

              make distclean:相当于mrproper之外,再清理各种patches及编辑器备份文件。

              在做make mrproper或make distclean之前,应该将.config文件备份

指定默认的内核版本:vim /etc/default/grub

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/46155

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-09-13
下一篇 2016-09-13

相关推荐

  • Web缓存核心技术点需知

    Edit Web缓存核心技术点需知 5.1 HTTP首部控制 5.2 基于新鲜度检测机制: 2.1 特征1:时间局部性 2.2 特征2:空间局部性 2.3 缓存的优点 2.4 哪类数据应该被缓存 2.5 哪类数据可缓存但不应该被缓存 2.6 缓存命中率决定缓存有效性 2.7 缓存数据生命周期 2.8 缓存处理步骤 2.9 缓存和普通数据读取的区别 1. 完整…

    Linux干货 2016-11-14
  • 磁盘管理

    上图sda disk information中对 255 heads,63 sectors/track,1958 cylinders的解析: sda磁盘总共有1958个cylinder(柱面),每个cylinder(柱面)有63个sectors(扇区),每个sectors(扇区)有255个heads(磁头) 那么这块sda的总的磁头数量为:255*63*19…

    2017-08-20
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • 安装Redmine

    Redmine是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。虽说像IBM Rational Team Concert的商业项目调查工具已经很强大了,但想坚持一个自由和开放源码的解决…

    Linux干货 2016-12-01
  • 正则表达式***(Regular Experssion)

    正则表达式 正则表达式缩写为regex、regexp、RE等。他是文本处理极为重要的技术,其应用非常广泛,shell中处理文本的命令、各种高级编程语言都支持正则表达式,用它可以对字符串按照某种规则进行检索和替换, 分类 BRE:基本正则,grep、sed、vi等软件支持。vim支持扩展正则 ERE:扩展正则,egrep(grep -E)、sed -r等。 P…

    Linux干货 2017-11-05
  • Linux运维学习历程-第五天-Linux文件系统与管理

    Linux运维学习历程-第五天-Linux文件系统与管理 本章内容 文件系统  文件和目录被组织成一个单根倒置树结构从根目录下开始,用“/” 表示根文件系统(rootfs) :root filesystem,用路径分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)  文件系统分层结构:LSB Linu…

    Linux干货 2016-08-04