## 24.2 核心編譯的前處理與核心功能選擇
什么?核心編譯還要進行前處理?沒錯啦!事實上,核心的目的在管理硬件與提供系統核心功能,因此你必須要先找到你的系統硬件, 并且規劃你的主機未來的任務,這樣才能夠編譯出適合你這部主機的核心!所以,整個核心編譯的重要工作就是在“挑選你想要的功能”。 下面鳥哥就以自己的一部主機軟/硬件環境來說明,解釋一下如何處理核心編譯啰!
### 24.2.1 硬件環境檢視與核心功能要求
鳥哥的一部主機硬件環境如下 (在虛擬機中,通過 /proc/cpuinfo 及 lspci 觀察):
* CPU:Intel(R) Xeon(R) CPU E5-2650
* 主板芯片組: KVM 虛擬化仿真的主版 (Intel 440FX 相容)
* 顯卡: Red Hat, Inc. QXL paravirtual graphic card
* 內存: 2.0GB 內存
* 硬盤: KVM Virtio 界面磁盤 40G (非 IDE/SATA/SAS 喔!)
* 網卡: Red Hat, Inc Virtio network device
硬件大致如上,至于這部主機的需求,是希望做為未來在鳥哥上課時,可以通過虛擬化功能來處理學生的練習用虛擬機。 這部主機也是鳥哥用來放置學校上課教材的機器,因此,這部主機的 I/O 需求須要好一點,未來還需要打開防火墻、 WWW 服務器功能、FTP 服務器功能等,基本上,用途就是一部小型的服務器環境啰。大致上需要這樣的功能啦!
### 24.2.2 保持干凈源代碼: 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 clean 僅會刪除類似目標文件之類的編譯過程產生的中間文件,而不會刪除配置文件! 很重要的!千萬不要搞亂了喔!好了,既然我們是第一次進行編譯,因此,請下達“make mrproper”吧!
### 24.2.3 開始挑選核心功能: make XXconfig
不知道你有沒有發現 /boot/ 下面存在一個名為 config-xxx 的文件?那個文件其實就是核心功能列表文件! 我們下面要進行的動作,其實就是作出該文件!而我們后續小節所要進行的編譯動作,其實也就是通過這個文件來處理的! 核心功能的挑選,最后會在 /usr/src/kernels/linux-3.10.89/ 下面產生一個名為 .config 的隱藏文件, 這個文件就是 /boot/config-xxx 的文件啦!那么這個文件如何創建呢?你可以通過非常多的方法來創建這個文件! 常見的方法有:[[1]](#ps1)
* make menuconfig
最常使用的,是文字模式下面可以顯示類似圖形接口的方式,不需要啟動 X Window 就能夠挑選核心功能菜單!
* make oldconfig
通過使用已存在的 ./.config 文件內容,使用該文件內的設置值為默認值,只將新版本核心內的新功能選項列出讓使用者選擇, 可以簡化核心功能的挑選過程!對于作為升級核心源代碼后的功能挑選來說,是非常好用的一個項目!
* make xconfig
通過以 Qt 為圖形接口基礎功能的圖形化接口顯示,需要具有 X window 的支持。例如 KDE 就是通過 Qt 來設計的 X Window,因此你如果在 KDE 畫面中,可以使用此一項目。
* make gconfig
通過以 Gtk 為圖形接口基礎功能的圖形化接口顯示,需要具有 X window 的支持。例如 GNOME 就是通過 Gtk 來設計的 X Window,因此你如果在 GNOME 畫面中,可以使用此一項目。
* make config
最舊式的功能挑選方法,每個項目都以條列式一條一條的列出讓你選擇,如果設置錯誤只能夠再次選擇,很不人性化啊!
大致的功能選擇有上述的方法,更多的方式可以參考核心目錄下的 README 文件。鳥哥個人比較偏好 make menuconfig 這個項目啦!如果你喜歡使用圖形接口, 然后使用鼠標去挑選所需要的功能時,也能使用 make xconfig 或 make gconfig ,不過需要有相關的圖形接口支持! 如果你是升級核心源代碼并且需要重新編譯,那么使用 make oldconfig 會比較適當!
* 通過既有的設置來處理核心項目與功能的選擇
如果你跟鳥哥一樣懶,那可以這樣思考一下。既然我們的 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 來說,出現的畫面會有點像這樣:

**Tips** 注意,你可能會被要求安裝好多軟件,請自行使用 yum 來安裝喔!這里不再介紹了! 另外:“不要再使用 make mrproper ”喔!因為我們已經復制了 .config 啊!使用 make mrproper 會將 .config 刪除喔!
圖24.2.1、make menuconfig 核心功能挑選菜單示意圖
看到上面的圖示之后,你會發現畫面主要分為兩大部分,一個是大框框內的反白光柱,另一個則是下面的小框框, 里面有 select, exit 與 help 三個選項的內容。這幾個元件的大致用法如下:
* “左右方向鍵”:可以移動最下面的 <Select>, <Exit>, <Help>項目;
* “上下方向鍵”:可以移動上面大框框部分的反白光柱,若該行有箭頭 (--->) 則表示該行內部還有其他細項需要來設置的意思;
* 選定項目:以“上下鍵”選擇好想要設置的項目之后,并以“左右鍵”選擇 <Select> 之后, 按下“ Enter ”就可以進入該項目去作更進一步的細部設置啰;
* 可挑選之功能:在細部項目的設置當中,如果前面有 [ ] 或 < > 符號時,該項目才可以選擇, 而選擇可以使用“空白鍵”來選擇;
* 若為 [*] <*> 則表示編譯進核心;若為 <M> 則表示編譯成模塊! 盡量在不知道該項目為何時,且有模塊可以選,那么就可以直接選擇為模塊啰!
* 當在細項目選擇 <Exit> 后,并按下 Enter ,那么就可以離開該細部項目啰!
基本上建議只要“上下左右的方向鍵、空白鍵、Enter”這六個按鍵就好了!不要使用 Esc ,否則一不小心就有可能按錯的!另外,關于整個核心功能的選擇上面,建議你可以這樣思考:
* “肯定”核心一定要的功能,直接編譯進核心內;
* “可能在未來會用到”的功能,那么盡量編譯成為模塊;
* “不知道那個東西要干嘛的,看 help 也看不懂”的話,那么就保留默認值,或者將他編譯成為模塊;
總之,盡量保持核心小而美,剩下的功能就編譯成為模塊,尤其是“需要考慮到未來擴充性”, 像鳥哥之前認為螃蟹卡就夠我用的了,結果,后來竟然網站流量大增,鳥哥只好改換 3Com 的網卡。 不過,我的核心卻沒有相關的模塊可以使用~因為.....鳥哥自己編譯的核心忘記加入這個模塊了。 最后,只好重新編譯一次核心的模塊,呵呵!真是慘痛的教訓啊!
### 24.2.4 核心功能細項選擇
由上面的圖示當中,我們知道核心的可以選擇的項目有很多啊!光是第一面,就有 17 個項目,每個項目內還有不同的細項!哇!真是很麻煩啊~每個項目其實都可能有 <Help> 的說明,所以,如果看到不懂的項目,務必要使用 Help 查閱查閱! 好了,下面我們就一個一個項目來看看如何選擇吧!

**Tips** 在下面的案例中,因為鳥哥使用的是 CentOS 7.1 的核心配置文件來進行默認的設置, 所以基本上許多默認的設置都不用重新調整。下面只列出幾個鳥哥認為比較重要的設置項目。其他更詳細的核心功能項目,還請自行參考 help 的說明喔!
* General setup
與 Linux 最相關的程序互動、核心版本說明、是否使用發展中程序碼等信息都在這里設置的。 這里的項目主要都是針對核心與程序之間的相關性來設計的,基本上,保留默認值即可! 不要隨便取消下面的任何一個項目,因為可能會造成某些程序無法被同時執行的困境喔! 不過下面有非常多新的功能,如果你有不清楚的地方,可以按 <Help> 進入查閱,里面會有一些建議! 你可以依據 Help 的建議來選擇新功能的啟動與否!
```
(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 形式。鳥哥這里使用的是 Intel E5 的 CPU, 而且鳥哥的主機還有啟動 KVM 這個虛擬化的服務 (在一部主機上面同時啟動多個操作系統),因此,所以下面的選擇是這樣的:
```
.....(其他保留默認值).....
[*] 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”之后,就會進入系統的電源管理機制中。 其實電源管理機制還需要搭配主板以及 CPU 的相關省電功能,才能夠實際達到省電的效率啦! 不論是 Server 還是 Desktop 的使用,在目前電力不足的情況下,能省電就加以省電吧!
```
.....(其他保留默認值).....
[*] 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”項目是相當重要的選項,因為他還包含了防火墻相關的項目!就是未來在服務器篇會談到的防火墻 iptables 這個數據啊!所以,千萬注意了!在這個設置項目當中,很多東西其實我們在基礎篇還沒有講到, 因為大部分的參數都與網絡、防火墻有關!由于防火墻是在啟動網絡之后再設置即可,所以絕大部分的內容都可以被編譯成為模塊,而且也建議你編成模塊!有用到再載入到核心即可啊!
```
--- 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”這個是所有硬件設備的驅動程序庫!哇!光是看到里面這么多內容,鳥哥頭都昏了~ 不過,為了你自己的主機好,建議你還是得要一個項目一個項目的去挑選挑選才行~ 這里面的數據就與你主機的硬件有絕對的關系了!
在這里面真的很重要,因為很多數據都與你的硬件有關。核心推出時的默認值是比較符合一般狀態的, 所以很多數據其實保留默認值就可以編的很不錯了!不過,也因為較符合一般狀態, 所以核心額外的編譯進來很多跟你的主機系統不符合的數據,例如網卡設備~ 你可以針對你的主板與相關硬件來進行編譯。不過,還是要記得有“未來擴充性”的考慮! 之前鳥哥不是談過嗎,我的網卡由螃蟹卡換成 3Com 時,核心捉不到~ 因為...鳥哥并沒有將 3Com 的網卡編譯成為模塊啊! @_@
```
# 大部分都保留默認值,鳥哥只是就比較重要的部份拿出來做說明而已!
<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 就無法認識,當然也就無法使用啦!例如 Quota, NTFS 等等特殊的 filesystem 。 這部份也是有夠麻煩~因為涉及核心是否能夠支持某些文件系統,以及某些操作系統支持的 partition table 項目。在進行選擇時,也務必要特別的小心在意喔! 尤其是我們常常用到的網絡操作系統 (NFS/Samba 等等),以及基礎篇談到的 Quota 等, 你都得要勾選啊!否則是無法被支持的。如果你有興趣,也可以將 NTFS 的文件系統設置為可讀寫看看啰!
```
# 下面僅有列出比較重要及與默認值不同的項目而已喔!所以項目少很多!
<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”的項目,那是與核心開發者比較有關的部分,這部分建議保留默認值即可, 應該不需要去修改他!除非你想要進行核心方面的研究喔。然后下面有個“ Security Options ”,那是屬于信息安全方面的設置, 包括 SELinux 這個細部權限強化模塊也在這里編入核心的!這個部份只要記得 SELinux 作為默認值,且務必要將 NSA SELinux 編進核心即可, 其他的細部請保留默認值。
另外還有“ Cryptographic API ”這個密碼應用程序接口工具選項,以前的默認加密機制為 MD5,近年來則改用了 SHA 這種機制。 不過,反正默認已經將所有的加密機制編譯進來了,所以也是可以保留默認值啦!都不需要額外修改就是了!
* 虛擬化與函數庫
虛擬化是近年來非常熱門的一個議題,因為計算機的能力太強,所以時常閑置在那邊, 此時,我們可以通過虛擬化技術在一部主機上面同時啟動多個操作系統來運行,這就是所謂的虛擬化。 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 --->
# 這部份全部保留默認值即可!
```
現在請回到如[圖24.2.1](../Text/index.html#fig24.2.1) 的畫面中,在下方設置處移動到“Save”的選項,點選該項目, 在出現的窗口中確認文件名為 .config 之后,直接按下“OK”按鈕,這樣就將剛剛處理完畢的選項給記錄下來了。 接下來可以選擇離開菜單畫面,準備讓我們來進行編譯的行為啰。
要請你注意的是,上面的數據主要是適用在鳥哥的個人機器上面的, 目前鳥哥比較習慣使用原本 distributions 提供的默認核心,因為他們也會主動的進行更新, 所以鳥哥就懶的自己重編核心了~ ^_^
此外,因為鳥哥重視的地方在于“網絡服務器與虛擬化服務器”上面,所以里頭的設置少掉了相當多的個人桌上型 Linux 的硬件編譯!所以,如果你想要編譯出一個適合你的機器的核心, 那么可能還有相當多的地方需要來修正的!不論如何,請隨時以 Help 那個選項來看一看內容吧!反正 Kernel 重編的概率不大!花多一點時間重新編譯一次! 然后將該編譯完成的參數文件儲存下來,未來就可以直接將該文件叫出來讀入了! 所以花多一點時間安裝一次就好!那也是相當值得的!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀