zoukankan      html  css  js  c++  java
  • Linux学习-编译前的任务:认识核心与取得核心原始码

    什么是核心 (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)
  • 相关阅读:
    python自动化测试,将测试结果的报告写入本地中(HTMLTestRunner)
    谷歌+selenuim ide导出python代码 详细代码
    谷歌+selenium插件的安装
    C# List转DataTable(支持匿名类型)
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    Unity3D游戏开发入门引导:Unity3D收费方案和版本、下载地址、安装教程
  • 原文地址:https://www.cnblogs.com/uetucci/p/7794561.html
Copyright © 2011-2022 走看看