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)
Linux学习-编译前的任务:认识核心与取得核心原始码的更多相关文章
- Linux 下编译Android-VLC开源播放器详解(附源码下载)
这两天需要做音视频播放相关的东西,所以重新找了目前android下的解码库.Android自带的解码库支持不全,因此很多第三方播放器都是自带解码器,绝大部分都是使用FFMpeg作为解码库.我11年的时 ...
- linux学习笔记-前篇
大学毕业已经快三年了,从事嵌入式开发的工作也快三年了. 不过,老干些裸机开发,感觉很是枯燥,一咬牙一跺脚,决定从今天开始学习Linux操作系统,顺便记录下学习过程中所遇到的问题与心得. 自己从前完全没 ...
- Linux学习-Tarball 的管理与建议
使用原始码管理软件所需要的基础软件 从原始码的说明我们晓得要制作一个 binary program 需要很多咚咚的呢!这包括底下这些基础的软件: gcc 或 cc 等 C 语言编译程序 (compil ...
- Linux学习-开放源码的软件安装与升级简介
什么是开放源码.编译程序与可执行文件 我们说过,在 Linux 系统上面,一个文件能不能被执行看的是有没有可执行的那个权限 (具有 x permission),不过,Linux 系统上真 正认识的可执 ...
- Linux学习-软件管理员简介
Linux 界的两大主流: RPM 与 DPKG 目前在 Linux 界软件安装方式最常见的有两种,分别是: dpkg: 这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg ...
- Linux学习-额外(单一)核心模块编译
编译前注意事项 由于我们的核心原本就有提供很多的核心工具给硬件开发商来使用, 而硬件开发商也需要针对核心 所提供的功能来设计他们的驱动程序模块,因此, 我们如果想要自行使用硬件开发商所提供的模块 来进 ...
- Linux学习-核心的编译与安装
编译核心与核心模块 核心与核心模块需要先编译起来,而编译的过程其实非常简单,你可以先使用『 make help 』去查 阅一下所有可用编译参数, 就会知道有底下这些基本功能: [root@study ...
- Linux学习-核心编译的前处理与核心功能选择
硬件环境检视与核心功能要求 根据自己的需求来确定编译的选项 保持干净原始码: make mrproper 我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下 ...
- Linux学习-以最新核心版本编译 CentOS 7.x 的核心
为了某些缘故需要最新的 4.x.y 的核心版本来实作某些特定的功能时,那该 如何是好?没办法,只好使用最新的核心版本来编译你可以依照上面的程序来一个一个处理, 没有问题~不过,你也可以根据 ELRep ...
随机推荐
- 举例实用详解sc.textFile()和wholeTextFiles()
谈清楚区别,说明白道理,从案例开始: 1 数据准备 用hdfs存放数据,且结合的hue上传准备的数据,我的hue截图: 每个文件下的数据: 以上是3个文件的数据,每一行用英文下的空格隔开: 2 测试 ...
- 关于小米手机USB传输稍大点的文件老中断的问题解决方法!
关于小米手机USB传输稍大点的文件老中断的问题解决方法! 这是一个很痛苦的事情,当你传输大文件的时候,传输到一半就会莫名其妙的中断,拔插数据线很多次以后,好不容易没准可以成功传输一次. 后来使用了36 ...
- oracle备份imp命令大全
oracle中imp命令详细解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...
- P4876 近似排列计数50
时间限制:1s 内存限制:256MB [问题描述] 对于一个1-n的排列,如果满足第i个数|ai-i|<=k,则称该排列为K-近似排列. 现在排列的若干位置已经确定,你需要计算剩下的数有多少种排 ...
- JVM垃圾回收机制四
GCRoots与可达性分析 Java中的四种引用 强引用.软引用.弱引用.虚引用.这四种引用的强度是逐渐减弱的,JVM垃圾回收的力度是逐渐增强的. 四种引用的作用 1.可以让程序员通过代码来控制对象的 ...
- 零基础逆向工程22_PE结构06_导入表
导入表结构 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstTh ...
- iOS - runtime 常用方法举例说明
使用的自定义类,如下: #import <Foundation/Foundation.h> @interface Person : NSObject @property(nonatomic ...
- 【虚拟机-可用性集】ARM 中可用性集使用的注意事项
Azure 目前有两种部署模型:经典部署模型 (ASM) 和资源管理器 (ARM).如果您之前使用过 ASM 模式下的可用性集,那么很可能在使用 ARM 模式下的可用性集时,会遇到一些问题或者疑惑.这 ...
- sizeof(int)
sizeof()操作符检测的是系统为后面()中的类型.变量等分配的内存空间的字节数,这里()中是int,就是求系统为int类型的变量分配几个字节. 在16位int平台下是2:在32位int平台下是4: ...
- 恢复为TrustedInstaller权限
每次我们要改动系统文件/文件夹时,都会被提示权限不够,而这个文件的所有者就是TrustInstaller.所以,就出现各种各样的教程,甚至傻瓜式的一键操作,让大家把自己设为文件的所有者,让自己得到最高 ...