什么是核心 (Kernel)

  • Kernel

其实核心就是系统上面的一个文件而已, 这个文件包含了驱动主机各项硬 件的侦测程序与驱动模块。

核心文件通常被放置成 /boot/vmlinuz-xxx ,不过也不见得,因为一部主机上面可以拥有多个核 心文件,只是开机的时候仅能选择一个来加载而已。

  • 核心模块 (kernel module) 的用途

Linux 很早之前就已经开始使用所谓的模块化设定了! 亦即是将一 些不常用的类似驱动程序的咚咚独立出核心,编译成为模块,然后, 核心可以在系统正常运作的过 程当中加载这个模块到核心的支持。如此一来, 我在不需要更动核心的前提之下,只要编译出适当的核心模块,并且加载他,


  • 自制核心 - 核心编译

当然是透过原始码 (source code) 编 译而成的啊!因为核心是直接被读入到主存储器当中的,所以当然要将他编译成为系统可以认识的数 据才行!也就是说, 我们必须要取得核心的原始码,

  • 关于驱动程序 - 是厂商的责任还是核心的责任?

『驱动程序开发』的工作上面来说,应该是属于硬件发展厂商的问题。

更新核心的目的

没有必要的工作,这样才能让你的 Linux 跑得更稳、更顺畅! 这也是为什么我们要编译核心的最主要原因了!

  • Linux 核心特色,与默认核心对终端用户的角色

Linux 的核心有几个主要的特色,除了『Kernel 可以随时、随各人喜好而更动』之外,Kernel 的『版 本更动次数太频繁』也是一个特点!

一般的用户, 由于系统已经将核心编译的相当的适合一般使用者使用了,因此一 般入门的使用者,基本上, 不太需要编译核心

  • 核心编译的可能目的

编译核心的时机可以归纳为几大类:

  • 新功能的需求:

  • 原本核心太过臃肿:

  • 与硬件搭配的稳定性:

  • 其他需求 (如嵌入式系统):

核心的版本

目前 CentOS 7 使用的 3.10.x 版本为长期维护版本, 不过理论上我们也可以升级到后续的主线版本上面!不会像以前 2.6.x 只能升级到 2.6.x 的后续版本, 而不能改成其他主线版本。不过这也只是『理论上』而已,因为目前许多的软件依旧与核心版本有关,

核心原始码的取得方式

既然核心是个文件,要制作这个文件给系统使用则需要编译,既然要有编译,当然就得要有原始码啊! 那么原始码怎么来?基本上,依据你的 distributions 去挑选的核心原始码来源主要有:

  • 原本 distribution 提供的核心原始码文件

既然要重新编译,那么干嘛还要使用原本 distributions 释出的原始码啊?真没创意~ 话 不是这么说,因为原本的 distribution 释出的原始码当中,含有他们设定好的预设设定值, 所以, 我们可以轻易的就了解到当初他们是如何选择与核心及模块有关的各项设定项目的参数值, 那么就 可以利用这些可以配合我们 Linux 系统的默认参数来加以修改,如此一来,我们就可以『修改核心, 调整到自己喜欢的样子』啰!而且编译的难度也会比较低一点!

  • 取得最新的稳定版核心原始码

虽然使用 distribution 释出的核心 source code 来重新编译比较方便,但是,如此一来, 新硬件所需 要的新驱动程序,也就无法藉由原本的核心原始码来编译啊! 所以啰,如果是站在要更新驱动程序 的立场来看,当然使用最新的核心可能会比较好啊!

  • 保留原本设定:利用 patch 升级核心原始码

如果 (1)你曾经自行编译过核心,那么你的系统当中应该已经存在前几个版本的核心原始码, 以及 上次你自行编译的参数设定值才对; (2)如果你只是想要在原本的核心底下加入某些特殊功能, 而该功能已经针对核心原始码推出 patch 补丁文件时。然后『依序』一个一个的去进行 patch 的动作。

核心原始码的解压缩/安装/观察

  • 核心原始码的解压缩与放置目录

Linux 核心原 始码一般建议放置于 /usr/src/kernels/ 目录底下,因此你可以这样处理:

[root@study ~]# tar -Jxvf linux-3.10.89.tar.xz -C /usr/src/kernels/
  • 核心原始码下的次目录

在上述核心目录下含有哪些重要数据呢?基本上有底下这些东西:

  • arch :与硬件平台有关的项目,大部分指的是 CPU 的类别,例如 x86, x86_64, Xen 虚拟支持等;
  • block :与成组设备较相关的设定数据,区块数据通常指的是大量储存媒体!还包括类似 ext3 等文件系统的支持是否允许等。
  • crypto :核心所支持的加密的技术,例如 md5 或者是 des 等等;
  • Documentation :与核心有关的一堆说明文件,若对核心有极大的兴趣,要瞧瞧这里!
  • drivers :一些硬件的驱动程序,例如显示适配器、网络卡、PCI 相关硬件等等;
  • firmware :一些旧式硬件的微脚本 (韧体) 数据;
  • fs :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;
  • include :一些可让其他过程调用的标头 (header) 定义数据;
  • init :一些核心初始化的定义功能,包括挂载与 init 程序的呼叫等;
  • ipc :定义 Linux 操作系统内各程序的沟通;
  • kernel :定义核心的程序、核心状态、线程、程序的排程 (schedule)、程序的讯号 (signle) 等
  • lib :一些函式库;
  • mm :与内存单元有关的各项数据,包括 swap 与虚拟内存等;
  • net :与网络有关的各项协议数据,还有防火墙模块 (net/ipv4/netfilter/*) 等等;
  • security :包括 selinux 等在内的安全性设定;
  • sound :与音效有关的各项模块;
  • virt :与虚拟化机器有关的信息,目前核心支持的是 KVM (Kernel base Virtual Machine)

Linux学习-编译前的任务:认识核心与取得核心原始码的更多相关文章

  1. Linux 下编译Android-VLC开源播放器详解(附源码下载)

    这两天需要做音视频播放相关的东西,所以重新找了目前android下的解码库.Android自带的解码库支持不全,因此很多第三方播放器都是自带解码器,绝大部分都是使用FFMpeg作为解码库.我11年的时 ...

  2. linux学习笔记-前篇

    大学毕业已经快三年了,从事嵌入式开发的工作也快三年了. 不过,老干些裸机开发,感觉很是枯燥,一咬牙一跺脚,决定从今天开始学习Linux操作系统,顺便记录下学习过程中所遇到的问题与心得. 自己从前完全没 ...

  3. Linux学习-Tarball 的管理与建议

    使用原始码管理软件所需要的基础软件 从原始码的说明我们晓得要制作一个 binary program 需要很多咚咚的呢!这包括底下这些基础的软件: gcc 或 cc 等 C 语言编译程序 (compil ...

  4. Linux学习-开放源码的软件安装与升级简介

    什么是开放源码.编译程序与可执行文件 我们说过,在 Linux 系统上面,一个文件能不能被执行看的是有没有可执行的那个权限 (具有 x permission),不过,Linux 系统上真 正认识的可执 ...

  5. Linux学习-软件管理员简介

    Linux 界的两大主流: RPM 与 DPKG 目前在 Linux 界软件安装方式最常见的有两种,分别是: dpkg: 这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg ...

  6. Linux学习-额外(单一)核心模块编译

    编译前注意事项 由于我们的核心原本就有提供很多的核心工具给硬件开发商来使用, 而硬件开发商也需要针对核心 所提供的功能来设计他们的驱动程序模块,因此, 我们如果想要自行使用硬件开发商所提供的模块 来进 ...

  7. Linux学习-核心的编译与安装

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

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

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

  9. Linux学习-以最新核心版本编译 CentOS 7.x 的核心

    为了某些缘故需要最新的 4.x.y 的核心版本来实作某些特定的功能时,那该 如何是好?没办法,只好使用最新的核心版本来编译你可以依照上面的程序来一个一个处理, 没有问题~不过,你也可以根据 ELRep ...

随机推荐

  1. MapReduce作业的执行流程

    MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...

  2. 关于window.event.returnValue=false的用处

    window.event.returnValue=false放在提交表单中的onclick事件中则不会提交表单,如果放到超链接中则不执行超链接,也就是它禁止了或取消了请求,没有任何效果. 比如: if ...

  3. webAPP制作框架Ionic--构建APP侧边栏 底部选项卡 轮播图 加载动画

    超好用的移动框架--Ionic Ionic是一个轻量的手机UI库,具有速度快,界面现代化.美观等特点. 为了解决其他一些UI库在手机上运行缓慢的问题,它直接放弃了IOS6和Android4.1以下的版 ...

  4. IDEA安装及基本配置

    IDEA基本介绍 IntelliJ IDEA是JetBrains公司开发的一款开发Java的开发工具,简称IDEA,JetBrains公司还有其他几款优秀的开发工具. IDEA是一款收费软件,在财力允 ...

  5. jquery解析xml,获取xml标签名

    先给一个简单的XML,结构如下 <?xml version="1.0" encoding="uft-8" ?> <msg> <ro ...

  6. Json字符串与js数组互相转换

    1.Json数据格式的字符串转换成js数组: JSON.parse(str); // str 字符串格式   2.js数组转换成Json数据格式字符串: var myJSONText = JSON.s ...

  7. (四)我的JavaScript系列:原型链

    夜深风竹敲秋韵,万叶千声皆是恨. 原型链对于JavaScript来说是个很核心的概念.JavaScript不是基于类模板的面向对象语言:反而,它的面向对象机制是基于原型的.我们不可能说某个对象属于什么 ...

  8. servlet forword服务器端跳转

    web.xml中配置servlet的映射和访问路径 <?xml version="1.0" encoding="UTF-8"?><web-ap ...

  9. ZOJ 3471 Most Powerful (状压DP,经典)

    题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大 ...

  10. hdu 5093 Battle ships (二分图)

    二分图最大匹配问题 遇到冰山就把行列拆成两个部分.每个部分x也好,y也好只能匹配一次 图画得比较草,将就着看 横着扫一遍,竖着扫一遍,得到编号 一个位置就对应一个(xi,yi)就是X集到Y集的一条边, ...