硬件环境检视与核心功能要求

根据自己的需求来确定编译的选项

保持干净原始码: make mrproper

我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下载下来的原始码当中有没有保留目标文件 (*.o) 以及相关的配置文件 存在, 此时我们可以透过底下的方式来处理掉这些『编译过程的目标文件以及配置文件』:

[root@study ~]# cd /usr/src/kernels/linux-3.10.89/
[root@study linux-3.10.89]# make mrproper

请注意,这个动作会将你以前进行过的核心功能选择文件也删除掉, 所以几乎只有第一次执行核心 编译前才进行这个动作,其余的时刻,你想要删除前一次编译过程的残留数据, 只要下达:

[root@study linux-3.10.89]# make clean

开始挑选核心功能: make XXconfig

不知道你有没有发现 /boot/ 底下存在一个名为 config-xxx 的文件?那个文件其实就是核心功能列 表文件! 我们底下要进行的动作,其实就是作出该文件!而我们后续所要进行的编译动作,其实也就是透过这个文件来处理的! 核心功能的挑选,最后会在 /usr/src/kernels/linux-3.10.89/ 底下产 生一个名为 .config 的隐藏档, 这个文件就是 /boot/config-xxx 的文件啦!那么这个文件如何建立呢? 你可以透过非常多的方法来建立这个文件! 常见的方法有:

  • make menuconfig

最常使用的,是文本模式底下可以显示类似图形接口的方式,不需要启动 XWindow 就能够挑选核心功能 选单!

  • make oldconfig

透过使用已存在的 ./.config 文件内容,使用该文件内的设定值为默认值,只将新版本核心内的新功能选项 列出让用户选择, 可以简化核心功能的挑选过程!对于作为升级核心原始码后的功能挑选来说,是非常好用的一个项目!

  • make xconfig

透过以 Qt 为图形接口基础功能的图形化接口显示,需要具有 X window 的支持。

  • make gconfig

透过以 Gtk 为图形接口基础功能的图形化接口显示,需要具有 X window 的支持。

  • make config

最旧式的功能挑选方法,每个项目都以条列式一条一条的列出让你选择,如果设定错误只能够再次选择.


  • 透过既有的设定来处理核心项目与功能的选择

既然我们的 CentOS 7 已经有提供它的核心设定值,我 们也只是想要修改一些小细节而已, 那么能不能以 CentOS 7 的核心功能为底,然后来细部微调其 它的设定呢?当然可以啊!你只要这样做即可:

[root@study linux-3.10.89]# cp /boot/config-3.10.0-229.11.1.el7.x86_64 .config
# 上面那个版本请依据你自己的环境来填写~

接下来要开始调整啰!那么如何选择呢?以 make menuconfig 来说,出现的画面会有点像这样:

看到上面的图示之后,你会发现画面主要分为两大部分,一个是大框框内的反白光柱,另一个则是底 下的小框框, 里面有 select, exit 与 help 三个选项的内容。这几个组件的大致用法如下:

  • 左右箭头键』:可以移动最底下的 , , 项目;
  • 『上下箭头键』:可以移动上面大框框部分的反白光柱,若该行有箭头 (--->) 则表示该行内部还有其他细项需要来设定的意思;
  • 选定项目:以『上下键』选择好想要设定的项目之后,并以『左右键』选择 之后, 按下『 Enter 』 就可以进入该项目去作更进一步的细部设定啰;
  • 可挑选之功能:在细部项目的设定当中,如果前面有 [ ] 或 < > 符号时,该项目才可以选择, 而选择可以 使用『空格键』来选择;
  • 若为 [] <> 则表示编译进核心;若为 则表示编译成模块! 尽量在不知道该项目为何时,且有模块 可以选,那么就可以直接选择为模块啰!
  • 当在细项目选择 后,并按下 Enter ,那么就可以离开该细部项目啰!

基本上建议只要『上下左右的箭头键、空格键、Enter』这六个按键就好了!不要使用 Esc ,否则一 不小心就有可能按错的!另外,关于整个核心功能的选择上面,建议你可以这样思考:

  • 『肯定』核心一定要的功能,直接编译进核心内;
  • 『可能在未来会用到』的功能,那么尽量编译成为模块;
  • 『不知道那个东西要干嘛的,看 help 也看不懂』的话,那么就保留默认值,或者将他编译成为模块;

核心功能细项选择

  • General setup

与 Linux 最相关的程序互动、核心版本说明、是否使用发展中程序代码等信息都在这里设定的。 这 里的项目主要都是针对核心与程序之间的相关性来设计的,基本上,保留默认值即可!

(vbird) Local version - append to kernel release
[*] Automatically append version information to the version string
# 我希望我的核心版本成为 3.10.89.vbird ,那这里可以就这样设定!
Kernel compression mode (Bzip2) --->
# 建议选择成为 Bzip2 即可,因为压缩比较佳!
.....(其他保留默认值)..... <M> Kernel .config support
[ ] Enable access to .config through /proc/config.gz (NEW)
# 让 .config 这个核心功能列表可以写入实际的核心文件中!所以就不需要保留 .config 文件啰!
(20) Kernel log buffer size (16 => 64KB, 17 => 128KB)
# CentOS 7 增加了核心的登录文件容量!占用了 2 的 20 次方,大概用了 1MB 的容量!
.....(其他保留默认值)..... [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s)
# 这是一定要的!因为要支持开机时加载 initail RAM disk 嘛!
[ ] Optimize for size
# 减低核心的文件大小,其实 gcc 参数使用 -Os 而不是 -O2。不过我们不是嵌入式系统,不太需要!
[ ] Configure standard kernel features (expert users) --->
[ ] Embedded system
# 上面两个在决定是否支持嵌入式系统呢?我们这里是桌机,所以这个不用选择了!
.....(其他保留默认值).....
  • loadable module + block layer

要让你的核心能够支持动态的核心模块,那么底下的第一个设定就得要启动才行!至于第二个 block layer 则预设是启动的, 你也可以进入该项目的细项设定,选择其中你认为需要的功能即可!

[*] Enable loadable module support ---> <==底下为细项
--- Enable loadable module support
[*] Forced module loading
[*] Module unloading
[*] Forced module unloading # 其实这个项目可能可以选择的!免得常常无法卸除模块!
[*] Module versioning support
[*] Source checksum for all modules
[*] Module signature verification
[ ] Require modules to be validly signed
[*] Automatically sign all modules
Which hash algorithm should modules be signed with? # 可以选择 SHA256 即可!
================================================================================
-*- Enable the block layer ---> <===看吧!预设就是已经选择了!底下为细项
-*- Block layer SG support v4
-*- Block layer SG support v4 helper lib
[*] Block layer data integrity support
[*] Block layer bio throttling support
Partition Types ---> # 至少底下的数个项目要选择!
[*] Macintosh partition map support
[*] PC BIOS (MSDOS partition tables) support
[*] Windows Logical Disk Manager (Dynamic Disk) support
[*] SGI partition support
[*] EFI GUID Partition support
.....(其他保留預設值)..... IO Schedulers ---> # 磁盘队列的处理方式
<*> Deadline I/O scheduler # 鸟哥非常建议将此项目设定为核心功能!
<*> CFQ I/O scheduler
[*] CFQ Group Scheduling support
Default I/O scheduler (Deadline) ---> # 相当建议改为 Deadline

  • CPU 的类型与功能选择

进入『Processor type and features』后,请挑选你主机的实际 CPU 形式。

.....(其他保留預設值).....
[*] Linux guest support ---> # 提供 Linux 虚拟化功能
[*] Enable paravirtualization code # 至少底下这几样一定要有选择才好!
[*] Paravirtualization layer for spinlocks
[*] Xen guest support
[*] KVM Guest support (including kvmclock)
[*] Paravirtual steal time accounting
.....(其他保留預設值)..... Processor family (Generic-x86-64) ---> # 除非你是旧系统,否则就用他!
[*] Enable Maximum number of SMP Processors and NUMA Nodes
[*] Multi-core scheduler support
Preemption Model (No Forced Preemption (Server) ---> # 调整成 server 喔!原本是 desktop
.....(其他保留預設值)..... Timer frequency (300 HZ) ---> # server 設定成 300 即可!
# 这个项目则与核心针对某个事件立即回应的速度有关。Server 用途可以调整到
# 300Hz 即可,如果是桌面计算机使用,需要调整高一点,例如 1000Hz 较佳!
.....(其他保留預設值).....
  • 电源管理功能

如果选择了『Power management and ACPI options』之后,就会进入系统的电源管理机制中。

.....(其他保留預設值).....
[*] ACPI (Advanced Configuration and Power Interface) Support --->
# 对嵌入式系统来说,由于可能会增加核心容量故需要考虑考虑。至于 desktop/server 当然就选择啊
# 至于内容细项大致保持默认值即可
CPU Frequency scaling --->
# 决定 CPU 频率的一个重要项目,基本上的项目是 ondemand 与 performance 两者!
<M> CPU frequency translation statistics
[*] CPU frequency translation statistics details
Default CPUFreq governor (ondemand) ---> # 現在大家都建議用這個!
-*- 'performance' governor
<*> 'powersave' governor
<*> 'userspace' governor for userspace frequency scaling
-*- 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
x86 CPU frequency scaling drivers --->
# 这个子项目内全部都是省电机制,能编成模块的全部选择!要加入核心的都加入就对了!
  • 一些总线 (bus) 的选项

这个『Bus options (PCI etc.)』项目则与总线有关啦!分为最常见的 PCI 与 PCI-express 的支持,还 有笔记本电脑常见的 PCMCIA 插卡啊!要记住的是,那个 PCI-E 的界面务必要选取!不然你的新 显示适配器可能会捉不到!

[*] PCI support
[*] Support mmconfig PCI config space access
[*] PCI Express support
<*> PCI Express Hotplug driver
.....(其他在 PCI Express 底下的项目大多保留默认值).....
-*- Message Signaled Interrupts (MSI and MSI-X)
<*> PCI Stub driver # 如果要玩虚拟化,这个部份建议编进核心!
.....(其他保留默认值).....
  • 编译后执行档的格式

选择『Executable file formats / Emulations』会见到如下选项。 底下的选项必须要勾选才行喔!因为 是给 Linux 核心运作执行文件之用的数据。通常是与编译行为有关啦!

-*- Kernel support for ELF binaries
[*] Write ELF core dumps with partial segments
<*> Kernel support for scripts starting with #!
<M> Kernel support for MISC binaries
[*] IA32 Emulation
<M> IA32 a.out support
[*] x32 ABI for 64-bit mode
# 因为我们的 CentOS 已经是纯 64 位的环境!所以个人建议这里还是要选择仿真 32 位的功能!
# 不然若有些比较旧的软件,恐怕会无法被你的系统所执行喔!
  • 核心的网络功能

这个『Networking support』项目是相当重要的选项,因为他还包含了防火墙相关的项目!所以,千万注意了!

--- Networking support
Networking options --->
# 就是这个光啊!里面的数据全部都是重要的防火墙项目!尽量编成模块啰!
# 至于不晓得功能的部分,就尽量保留默认值即可!
# 底下的数据中,鸟哥只有列出原本没有选择,后来建议选择的部份
[*] Network packet filtering framework (Netfilter) --->
# 这个就是我们一直讲的防火墙部分!里面细项几乎全选择成为模块!
--- Network packet filtering framework (Netfilter)
Core Netfilter Configuration --->
<M> Transparent proxying support
================================================================================
[*] QoS and/or fair queueing ---> <==内容同样全为模块!
Network testing ---> <==保留成模块默认值
================================================================================
# 底下的则是一些特殊的网络设备,例如红外线啊、蓝芽啊!
# 如果不清楚的话,就使用模块吧!除非你真的知道不要该项目!
<M> Bluetooth subsystem support --->
# 这个是蓝芽支持,同样的,里面除了必选之外,其他通通挑选成为模块!
[*] Wireless --->
# 这个则是无线网络设备,里面保留默认值,但可编成模块的就选模块
<M> WiMAX Wireless Broadband support --->
# 新一代的无线网络,也请勾选成为模块!
<M> NFC subsystem support --->
# 跟卡片比较有关的芯片支持,建议编译成模块,内部数据也是编译成模块为佳!
  • 各项装置的驱动程序

进入『Device Drivers』这个是所有硬件装置的驱动程序库!

# 大部分都保留默认值,鸟哥只是就比较重要的部份拿出来做说明而已!
<M> Serial ATA and Parallel ATA drivers ---> # 就是 SATA/IDE 磁盘!大多数选择为模块!
[*] Multiple devices driver support (RAID and LVM) ---> # 就是 LVM 与 RAID !要选要选!
-*- Network device support ---> # 网络方面的设备,网卡与相关媒体啦!
-*- Network core driver support
<M> Bonding driver support # 与网卡整合有关的项目!要选!
<M> Ethernet team driver support ---> # 与 bonding 差不多的功能!要选!
<M> Virtio network driver # 虚拟化的网卡驱动程序!要选!
-*- Ethernet driver support ---> # 以太网卡!里面的一堆 10G 卡要选!
<M> Chelsio 10Gb Ethernet support
<M> Intel(R) PRO/10GbE support
<M> PPP (point-to-point protocol) support# 与拨接有关的协议!
USB Network Adapters ---> # 当然全部编译为模块!
[*] Wireless LAN ---> # 无线网卡也相当重要!里面全部变成模块!
================================================================================
[ ] GPIO Support ---> # 若有需要使用类似树莓派、香蕉派才需要这东西!
<M> Multimedia support ---> # 多媒体装置,如影像撷取、广播声卡等等
Graphics support ---> # 显示适配器!如果是作为桌上型使用,这里就重要了!
<M> Sound card support ---> # 声卡,同样的,桌面计算机使用时,比较重要!
[*] USB support ---> # 就是 USB!底下几个内部的细项要注意是勾选的!
<*> xHCI HCD (USB 3.0) support
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<M> InfiniBand support ---> # 较高阶的网络设备,速度通常达到 40Gb 以上!
<M> VFIO Non-Privileged userspace driver framework ---> # 作为 VGA passthrought 用!
[*] VFIO PCI support for VGA devices
[*] Virtualization drivers ---> # 虚拟化的驱动程序!
Virtio drivers ---> # 在虚拟机里面很重要的驱动程序项目!
[*] IOMMU Hardware Support ---> # 同样的与虚拟化相关性较高!

至于『 Firmware Drivers 』的项目,请视你的需求来选择~基本上就保留设定值即可!

  • 文件系统的支援

文件系统的支持也是很重要的一项核心功能!因为如果不支持某个文件系统,那么我们的 Linux kernel 就无法认识,当然也就无法使用啦!

# 底下仅有列出比较重要及与默认值不同的项目而已喔!所以项目少很多!
<M> Second extended fs support # 预设已经不支持 ext2/ext3,这里我们将他加回来!
<M> Ext3 journalling file system support
[*] Default to 'data=ordered' in ext3 (NEW)
[*] Ext3 extended attributes (NEW)
[*] Ext3 POSIX Access Control Lists
<M> The Extended 4 (ext4) filesystem # 一定要有的支持
<M> Reiserfs support
<M> XFS filesystem support # 一定要有的支持
[*] XFS Quota support
[*] XFS POSIX ACL support
[*] XFS Realtime subvolume support # 增加这一项好了!
<M> Btrfs filesystem support # 最好有支持!
[*] Quota support
<*> Quota format vfsv0 and vfsv1 support
<*> Kernel automounter version 4 support (also supports v3)
<M> FUSE (Filesystem in Userspace) support
DOS/FAT/NT Filesystems --->
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
(950) Default codepage for FAT # 要改成这样喔!中文支持!
(utf8) Default iocharset for FAT # 要改成这样喔!中文支持!
<M> NTFS file system support # 建议加上 NTFS 喔!
[*] NTFS write support # 让他可擦写好了!
Pseudo filesystems ---> # 类似 /proc ,保留默认值
-*- Miscellaneous filesystems ---> # 其他文件系统的支持,保留默认值
[*] Network File Systems ---> # 网络文件系统!很重要!也要挑挑!
<M> NFS client support
<M> NFS server support
[*] NFS server support for NFS version 4
<M> CIFS support (advanced network filesystem, SMBFS successor)
[*] Extended statistics
[*] Provide CIFS client caching support
-*- Native language support ---> # 选择预设的语系
(utf8) Default NLS Option
<M> Traditional Chinese charset (Big5)
  • 核心黑客、信息安全、密码应用

再接下来有个『Kernel hacking』的项目,那是与核心开发者比较有关的部分,这部分建议保留默认 值即可, 应该不需要去修改他!

  • 虚拟化与函式库

虚拟化是近年来非常热门的一个议题,因为计算机的能力太强,所以时常闲置在那边, 此时,我们 可以透过虚拟化技术在一部主机上面同时启动多个操作系统来运作,这就是所谓的虚拟化。Linux 核 心已经主动的纳入虚拟化功能喔!而 Linux 认可的虚拟化使用的机制为 KVM (Kernel base Virtual Machine)。 至于常用的核心函式库也可以全部编为模块啰!

[*] Virtualization  --->
--- Virtualization
<M> Kernel-based Virtual Machine (KVM) support
<M> KVM for Intel processors support
<M> KVM for AMD processors support
[*] Audit KVM MMU
[*] KVM legacy PCI device assignment support # 虽然已经有 VFIO,不过建议还是选起来!
<M> Host kernel accelerator for virtio net
================================================================================
Library routines --->
# 这部份全部保留默认值即可!

Linux学习-核心编译的前处理与核心功能选择的更多相关文章

  1. linux学习之编译-链接

    在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念.在学习Linux时,这些问题就暴露出来了. 实际上,我们应该严格区分一个程序从产生到执行 ...

  2. Linux学习之编译运行.c(C语言)文件

    在Linux命令行界面下,创建文件hello.c,进入vim编辑器,编辑一个简单的C语言文件 分解C语言文件执行过程,要经过预编译.编译.汇编.连接四个步骤后才能执行, 预编译:gcc -E hell ...

  3. Linux学习之编译安装apache

    疯狂吐槽腾某云..编译安装apache折腾了一下午..还是我不太熟练. 首先要先准备好安装apache的三个依赖包以及apache包.(一定要准备好!!折腾了一下午的小白握拳!!) -rw-r--r- ...

  4. Linux学习---GCC编译常见错误

    预处理错误: No such file or directory 出错原因:①包含错误:eg  #include <abc.h> //abc.h为用户自行编写文件 解决方法:⑴应改为#in ...

  5. Linux学习---GCC编译过程

    (一)GCC编译过程 预处理 cpp -o a.i a.c     //生成预处理文件 等同于[gcc -E] //预处理为将宏定义(#define)等进行替换. 编译 /user/lib/gcc/i ...

  6. Linux学习之十一、环境变量的功能

    环境变量的功能 可以利用两个命令来查阅,分别是 env 与 export 呢! 范例一:列出目前的 shell 环境下的所有环境变量与其内容. [root@www ~]# env SHELL 告知我们 ...

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

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

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

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

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

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

随机推荐

  1. SSIS 抽取excel出错:所请求的 OLE DB 访问接口 Microsoft.ACE.OLEDB.12.0 尚未注册

    如果是安装的office2010就要装这个,如果是2007就不用装! http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b ...

  2. Spark Mllib里如何将数据取消暂存在内存中(图文详解)

    不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第18章 决策树回归分类Bike Sharing数据集

  3. MCS-51单片机的定时器/计数器概念

    一.MCS-51单片机的定时器/计数器概念 单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,而花费的时间恰好是1微秒;只要相邻两个计数脉冲之间的时间间隔相等,则计 ...

  4. final关键字,类的自动加载,命名空间

    final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...

  5. SQL 索引查找

    索引查找信息 在非聚集索引里,会为每条记录存储一份非聚集索引索引键的值和一份聚集索引索引键 [在没有聚集索引的表格里,是RID值指向数据页面,有聚集索引的话指向聚集索引的键(在不使用include时) ...

  6. docker部署mysql远程连接 解决1251 client does not support ..

    现象:用虚拟机上Docker启动mysql之后无法在本地安装的navicat上远程连接已启动的mysql,错误截图: 原因:mysql 8.0 默认使用 caching_sha2_password 身 ...

  7. css:focus伪类的使用

    css中:focus伪类的使用,即给已获取焦点的元素设置样式 示例一 <!DOCTYPE html> <html lang="en"> <head&g ...

  8. ios 12 xcode10 新升级的编译报错libstdc++.6.0.9 Multiple commands produce

    问题一 编译报错 Showing Recent Messages :-1: Multiple commands produce '/Users/duning/Library/Developer/Xco ...

  9. Java-Web总结03

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX. a)DOM一次性将整个XML文件读到内存,形成 ...

  10. JavaScript_5_对象

    1. JavaScrip中所有事物都是对象:字符串.数字.日期.等等 2. 在javaScripe中,对象是拥有属性和方法的数据 <!DOCTYPE html> <html> ...