什么是核心 (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. JS正则改变字符之间文字

    var reg = /([[^[]*])/g; html = html.replace(reg, "<span class=\"bold\">$1</s ...

  2. windows环境下memcache配置方法 详细篇

    将memcache服务器安装包解压到C:\memcached文件夹后,使用cmd命令窗口安装. 1>开始>运行:CMD(确定) 2>cd C:\memcached(回车) 3> ...

  3. 在MVC中使用dotless后台动态解析LESSCSS的学习笔记

    通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用  ...

  4. 开源项目android-uitableview介绍

    在iOS应用中,UITableView应该是使用率最高的视图之一了.iPod.时钟.日历.备忘录.Mail.天气.照片.电话.短信. Safari.App Store.iTunes.Game Cent ...

  5. 《移动Web前端高效开发实战》笔记1——静态布局在移动端上的自适应

    1.整体缩放 整体缩放可以用在营销活动页,营销活动可能因为设计美观需求必须使用背景图片而非背景色,因此需要考虑背景图适应屏幕大小.开发者可以用320像素的宽度作为基础宽度(高度可以固定),然后通过计算 ...

  6. zfs和ufs文件系统

    系统环境:freebsd 在zfs文件系统上的文件拷贝到ufs文件系统之后,大小翻了一倍.初步断定是文件系统导致的.不知道以后还会不会有新发现.come on!

  7. URAL 1057 Amount of Degrees (数位DP,入门)

    题意: 求给定区间[X,Y]中满足下列条件的整数个数:这个数恰好等于K个互不相等的,B的整数次幂之和.例如,设X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足了要求:  17 = 24+2 ...

  8. 报bug

    在打印输出seg的gt数据的时候,出现了gt数据突然很大突然很小的情况,一般这种都是访问了其他内存

  9. java中的同步与异步

    在多线程的环境中,经常会碰到数据的共享问题,即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某--时刻只能被-一个线程使用,否则,程序的运行结果将会是不可预料的,在这种情况下就必须对 ...

  10. StatementHandler-Mybatis源码系列

    内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分.因为,无论怎么封装,最终我们都是要使用JDBC和数 ...