编译核心与核心模块

核心与核心模块需要先编译起来,而编译的过程其实非常简单,你可以先使用『 make help 』去查 阅一下所有可用编译参数, 就会知道有底下这些基本功能:

[root@study linux-3.10.89]# make vmlinux <==未经压缩的核心
[root@study linux-3.10.89]# make modules <==仅核心模块
[root@study linux-3.10.89]# make bzImage <==经压缩过的核心(预设)
[root@study linux-3.10.89]# make all <==进行上述的三个动作

上述的动作中比较常用 的是 modules 与 bzImage 这两个,其中 bzImage 第三个字母是英文大写的 I,所以,基本上我们会进行的动 作是:

[root@study linux-3.10.89]# make -j 4 clean <==先清除暂存档
[root@study linux-3.10.89]# make -j 4 bzImage <==先编译核心
[root@study linux-3.10.89]# make -j 4 modules <==再编译模块
[root@study linux-3.10.89]# make -j 4 clean bzImage modules <==连续动作!

下达了 make bzImage 后,最终的结果应 该会像这样:

Setup is 16752 bytes (padded to 16896 bytes). System is 4404 kB
CRC 30310acf
Kernel: arch/x86/boot/bzImage is ready (#1) [root@study linux-3.10.89]# ll arch/x86/boot/bzImage
-rw-r--r--. 1 root root 4526464 Oct 20 09:09 arch/x86/boot/bzImage

实际安装模块

安装模块前有个地方得要特别强调喔!我们知道模块是放置到 /lib/modules/$(uname -r) 目录下的,那 如果同一个版本的模块被反复编译后来安装时,会不会产生冲突?有两个解决方法啦:

  • 先将旧的模块目录更名,然后才安装核心模块到目标目录去;
  • 在 make menuconfig 时,那个 General setup 内的 Local version 修改成新的名称。

建议使用第二个方式,因为如此一来,你的模块放置的目录名称就不会相同,这样也就能略过上 述的目录同名问题啰! 好,那么如何安装模块到正确的目标目录呢?很简单,同样使用 make 的功 能即可:

[root@study linux-3.10.89]# make modules_install
[root@study linux-3.10.89]# ll /lib/modules/
drwxr-xr-x. 7 root root 4096 Sep 9 01:14 3.10.0-229.11.1.el7.x86_64
drwxr-xr-x. 7 root root 4096 May 4 17:56 3.10.0-229.el7.x86_64
drwxr-xr-x. 3 root root 4096 Oct 20 14:29 3.10.89vbird # 这就是刚刚装好的核心模块!

开始安装新核心与多重核心选单 (grub)

现在我们知道核心文件放置在 /usr/src/kernels/linux-3.10.89/arch/x86/boot/bzImage ,但是其实系统核 心理论上都是摆在 /boot 底下,且为 vmlinuz 开头的档名。此外,我们也晓得一部主机是可以做成 多重引导系统的!我们将同时保留旧版的核心,并且 新增新版的核心在我们的主机上面。

  • 移动核心到 /boot 且保留旧核心文件

保留旧核心有什么好处呢?最大的好处是可以确保系统能够顺利开机啦!因为核心虽然被编译成功了, 但是并不保证我们刚刚挑选的核心项目完全适合于目前这部主机系统, 可能有某些地方我们忘记选 择了,这将导致新核心无法顺利驱动整个主机系统,更差的情况是, 你的主机无法成功开机成功! 此时,如果我们保留旧的核心,若新核心测试不通过,就用旧核心来启动。另外,核心文件通常以 vmlinuz 为开头,接上核心版本为依据的档名格式,因此 可以这样做看看:

[root@study linux-3.10.89]# cp arch/x86/boot/bzImage /boot/vmlinuz-3.10.89vbird <==实际核心
[root@study linux-3.10.89]# cp .config /boot/config-3.10.89vbird <==建议配置文件也复制备份
[root@study linux-3.10.89]# chmod a+x /boot/vmlinuz-3.10.89vbird
[root@study linux-3.10.89]# cp System.map /boot/System.map-3.10.89vbird
[root@study linux-3.10.89]# gzip -c Module.symvers > /boot/symvers-3.10.89vbird.gz
[root@study linux-3.10.89]# restorecon -Rv /boot
  • 建立相对应的 Initial Ram Disk (initrd)

由于系统使用 SATA 磁盘,加上刚刚 SATA 磁盘支持的功能并没有直接编译到核心去,所以当然要使用 initramfs 来加载才行! 使用如下的方 法来建立 initramfs 吧!记得搭配正确的核心版本喔!

[root@study ~]# dracut -v /boot/initramfs-3.10.89vbird.img 3.10.89vbird
  • 编辑开机选单 (grub)

接下来就直接使用 grub2-mkconfig 来处理你的 grub2 开机选单设定即可!让我们来处理处理先!

[root@study ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.89vbird # 应该要最早出现!
Found initrd image: /boot/initramfs-3.10.89vbird.img
.....(底下省略).....
  • 重新以新核心开机、测试、修改

如果上述的动作都成功后,接下来就是重新启动并选择新核心来启动系统啦!如果系统顺利启动之后, 你使用 uname -a 会出现类似底下的数据:

[root@study ~]# uname -a
Linux study.centos.vbird 3.10.89vbird #1 SMP Tue Oct 20 09:09:11 CST 2015 x86_64
x86_64 x86_64 GNU/Linux

Linux学习-核心的编译与安装的更多相关文章

  1. Linux学习之源码包安装与脚本安装(十八)

    Linux学习之源码包安装与脚本安装 目录 源码包与RPM包的区别 源码包安装 脚本安装 源码包与RPM包的区别 1.区别 安装之前的区别:概念上的区别 安装之后的区别:安装位置不同 源码包: 开源的 ...

  2. Linux学习-核心与核心模块

    谈完了整个开机的流程,您应该会知道,在整个开机的过程当中,是否能够成功的驱动我们主机的硬 件配备, 是核心 (kernel) 的工作!而核心一般都是压缩文件,因此在使用核心之前,就得要将他解 压缩后, ...

  3. linux下包不重新编译php安装openssl 扩展

    今天在刚装好的centos上安装composer,老是报错,提示不安全的,后来发现是由于https的缘故,需要openssl,可能是开始装php的时候没有安装此扩展,网上有好多方案,一开始我认为只有重 ...

  4. Linux学习笔记之Python3的安装以及创建虚拟环境(CentOS)

    安装python3 一.安装需要编译的关联库 yum instal -y zlib zlib-devel (根据自己系统的情况,安装需要的关联库,同样用yum安装即可) yum install ope ...

  5. Linux学习-核心编译的前处理与核心功能选择

    硬件环境检视与核心功能要求 根据自己的需求来确定编译的选项 保持干净原始码: make mrproper 我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下 ...

  6. Linux内核-模块编译和安装

    我安装Ubuntu的时候是没有安装源码的,在没有安装源码前 /usr/src/ 目录下是只有两个包含内核的头文件的文件夹的: 我的内核版本是: 所以接下来就是先安装内核源码: 执行后,/usr/src ...

  7. linux学习笔记-(1)-安装

    学习的第一部,当然是寻找学习资料,如今的网络如此发达,只要下点功夫,基本上能在网上找到一切自己所需要的东西,而且还是免费滴哟! ---------------------分割线------------ ...

  8. Linux 学习记录 五(软件的安装升级).

    一.gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接. gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行 ...

  9. Linux 学习记录五(软件的安装升级).

    一.gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接. gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行 ...

随机推荐

  1. C# 实现Tree,包含parentId和children

    1.先定义一个类型 public class Node { [JsonProperty(PropertyName = "id", NullValueHandling = NullV ...

  2. 字节码技术---------动态代理,lombok插件底层原理。类加载器

    字节码技术应用场景 AOP技术.Lombok去除重复代码插件.动态修改class文件等 字节技术优势  Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用 ...

  3. Tomcat 下载及配置

    1.下载 下载地址:http://tomcat.apache.org/ 进去后下拉到底部 2.解压 Tomcat不需要安装,直接解压即可.解压后会得到这么一个文件夹 3.在MyEclipse中配置To ...

  4. Mac、Linux下两个Emacs共享一个配置文件

    Mac.Linux下两个Emacs共享一个配置文件 有些嵌入式的实验需要在Linux进行,就安装了RHEL6.4的虚拟机,下载并编译了Emacs. 在Linux的.emacs文件中加入以下语句,即可引 ...

  5. 如何在CSS中解决长英文单词的页面显示问题?CSS3

    简言 在页面排版中,经常遇到长英文单词溢出段落容器的情况,如何解决该问题?现编制如下对比演示程序: 演示程序 42du.cn-在线演示程序 部分html代码 <div class="b ...

  6. canvas背景效果

    canvas背景效果: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  7. python-day1作业(感谢视频老师留的作业)

    __author__ = 'zht' #!/usr/bin/env python # -*- coding: utf-8 -*- ''' #努力学习每一天 ''' #尝试次数计数器 tries = 0 ...

  8. Android获取res目录下图片的uri

    Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" ...

  9. python3发送邮件02(简单例子,带附件)

    #!/usr/bin/env python# -*- coding:UTF-8 -*- import osimport smtplibfrom email.header import Headerfr ...

  10. 将Java应用部署到SAP云平台neo环境的两种方式

    方法1 - 使用Eclipse Eclipse里新建一个服务器: 服务器类型选择SAP Cloud Platform: 点Finish,成功创建了一个Server: Eclipse里选择要部署的项目, ...