日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

第二十六章、Linux 核心编译与管理

發(fā)布時(shí)間:2023/12/29 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二十六章、Linux 核心编译与管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們說(shuō)的 Linux 其實(shí)指的就是核心 (kernel) 而已。這個(gè)核心控制你主機(jī)的所有硬件并提供系統(tǒng)所有的功能, 所以說(shuō),他重不重要啊!我們啟動(dòng)的時(shí)候其實(shí)就是利用啟動(dòng)管理程序加載這個(gè)核心文件來(lái)偵測(cè)硬件, 在核心加載適當(dāng)?shù)尿?qū)動(dòng)程序后,你的系統(tǒng)才能夠順利的運(yùn)行。現(xiàn)今的系統(tǒng)由於強(qiáng)調(diào)線上升級(jí)機(jī)制,因此非常不建議自訂核心編譯! 但是,如果你想要將你的 Linux 安裝到 U盤(pán) 閃盤(pán)、想要將你的 Eee PC 小筆記本計(jì)算機(jī)安裝自己的 Linux , 想讓你的 Linux 可以驅(qū)動(dòng)你的小家電,此時(shí),核心編譯就是相當(dāng)重要的一個(gè)任務(wù)了! 這一篇比較進(jìn)階,如果你對(duì)系統(tǒng)移植沒(méi)有興趣的話(huà),這一篇可以先略過(guò)喔! ^_^
1.?編譯前的任務(wù):認(rèn)識(shí)核心與取得核心原始碼
  1.1?什么是核心 (Kernel)
  1.2?升級(jí)核心的目的
  1.3?核心的版本
  1.4?核心原始碼的取得方式:distributions 默認(rèn)、最新、patch
  1.5?核心原始碼的解壓縮/安裝/觀察
2.?核心編譯的前處理與核心功能選擇
  2.1?硬件環(huán)境檢視與核心功能要求
  2.2?保持干凈原始碼: make mrproper
  2.3?開(kāi)始挑選核心功能: make XXconfig
  2.4?核心功能細(xì)項(xiàng)選擇
    a.?一般配置(General setup):附加版本名稱(chēng)、IPC 通訊、程序相關(guān)等
    b.?核心模塊與 block layer 支持
    c.?CPU 的類(lèi)型與功能選擇(含虛擬化技術(shù))
    d.?電源管理功能
    e.?一些匯流排 (bus) 的選項(xiàng)
    f.?編譯后運(yùn)行檔的格式
    g.?核心的網(wǎng)絡(luò)功能
    h.?各項(xiàng)裝置的驅(qū)動(dòng)程序
    i.?文件系統(tǒng)的支持
    j.?核心黑客、資訊安全、口令應(yīng)用
    k.?虛擬化與函式庫(kù)
3.?核心的編譯與安裝
  3.1?編譯核心與核心模塊
  3.2?實(shí)際安裝模塊
  3.3?開(kāi)始安裝新核心與多重核心菜單 (grub)
4.?額外(單一)核心模塊編譯
  4.1?編譯前注意事項(xiàng)
  4.2?單一模塊編譯
  4.3?核心模塊管理
5.?重點(diǎn)回顧
6.?本章習(xí)題
7.?參考數(shù)據(jù)與延伸閱讀
8.?針對(duì)本文的建議:http://phorum.vbird.org/viewtopic.php?t=23899

編譯前的任務(wù):認(rèn)識(shí)核心與取得核心原始碼

我們?cè)诘谝徽吕锩婢驼勥^(guò) Linux 其實(shí)指的是核心!這個(gè)『核心 (kernel)』是整個(gè)操作系統(tǒng)的最底層,他負(fù)責(zé)了整個(gè)硬件的驅(qū)動(dòng),以及提供各種系統(tǒng)所需的核心功能,包括防火墻機(jī)制、是否支持 LVM 或 Quota 等文件系統(tǒng)等等,這些都是核心所負(fù)責(zé)的!所以羅,在第二十章的啟動(dòng)流程中,我們也會(huì)看到 MBR 內(nèi)的 loader 加載核心文件來(lái)驅(qū)動(dòng)整個(gè)系統(tǒng)的硬件呢! 也就是說(shuō),如果你的核心不認(rèn)識(shí)某個(gè)最新的硬件,那么該硬件也就無(wú)法被驅(qū)動(dòng),你當(dāng)然也就無(wú)法使用該硬件羅!


什么是核心 (Kernel)

這已經(jīng)是整個(gè) Linux 基礎(chǔ)的最后一篇了,所以,底下這些數(shù)據(jù)你應(yīng)該都要『很有概念』才行~ 不能只是『好像有印象』~好了,那就復(fù)習(xí)一下核心的相關(guān)知識(shí)吧!


  • Kernel

還記得我們?cè)诘谑徽碌?BASH shell?提到過(guò):計(jì)算機(jī)真正在工作的東西其實(shí)是『硬件』, 例如數(shù)值運(yùn)算要使用到 CPU、數(shù)據(jù)儲(chǔ)存要使用到硬盤(pán)、圖形顯示會(huì)用到顯卡、音樂(lè)發(fā)聲要有音效芯片、連接 Internet 可能需要網(wǎng)絡(luò)卡等等。那么如何控制這些硬件呢?那就是核心的工作了!也就是說(shuō),你所希望計(jì)算機(jī)幫你達(dá)成的各項(xiàng)工作, 都需要透過(guò)『核心』的幫助才行!當(dāng)然羅,如果你想要達(dá)成的工作是核心所沒(méi)有提供的, 那么你自然就沒(méi)有辦法透過(guò)核心來(lái)控制計(jì)算機(jī)使他工作羅!

舉例來(lái)說(shuō),如果你想要有某個(gè)網(wǎng)絡(luò)功能 (例如核心防火墻機(jī)制) ,但是你的核心偏偏忘記加進(jìn)去這項(xiàng)功能, 那么不論你如何『賣(mài)力』的配置該網(wǎng)絡(luò)套件,很抱歉!不來(lái)電!換句話(huà)說(shuō),你想要讓計(jì)算機(jī)進(jìn)行的工作,都必須要『核心有支持』才可以!這個(gè)標(biāo)準(zhǔn)不論在 Windows 或 Linux 這幾個(gè)操作系統(tǒng)上都相同!如果有一個(gè)人開(kāi)發(fā)出來(lái)一個(gè)『全新的硬件』,目前的核心不論 Windows 或 Linux 都不支持,那么不論你用什么系統(tǒng),哈哈!這個(gè)硬件都是英雄無(wú)用武之地啦! 那么是否了解了『核心』的重要了呢?所以我們才需要來(lái)了解一下如何編譯我們的核心啦!

那么核心到底是什么啊?其實(shí)核心就是系統(tǒng)上面的一個(gè)文件而已, 這個(gè)文件包含了驅(qū)動(dòng)主機(jī)各項(xiàng)硬件的偵測(cè)程序與驅(qū)動(dòng)模塊。在第二十章的啟動(dòng)流程分析中,我們也提到這個(gè)文件被讀入主內(nèi)存的時(shí)機(jī), 當(dāng)系統(tǒng)讀完 BIOS 并加載 MBR 內(nèi)的啟動(dòng)管理程序后,就能夠加載核心到內(nèi)存當(dāng)中。然后核心開(kāi)始偵測(cè)硬件, 掛載根目錄并取得核心模塊來(lái)驅(qū)動(dòng)所有的硬件,之后呼叫 /sbin/init 就能夠依序啟動(dòng)所有系統(tǒng)所需要的服務(wù)了!

這個(gè)核心文件通常被放置成 /boot/vmlinuz ,不過(guò)也不見(jiàn)得,?因?yàn)橐徊恐鳈C(jī)上面可以擁有多個(gè)核心文件,只是啟動(dòng)的時(shí)候僅能選擇一個(gè)來(lái)加載而已。 甚至我們也可以在一個(gè) distribution 上面放置多個(gè)核心,然后以這些核心來(lái)做成多重啟動(dòng)呢!


  • 核心模塊 (kernel module) 的用途

既然核心文件都已經(jīng)包含了硬件偵測(cè)與驅(qū)動(dòng)模塊,那么什么是核心模塊啊?要注意的是, 現(xiàn)在的硬件升級(jí)速度太快了,如果我的核心比較舊,但我換了新的硬件,那么,這個(gè)核心肯定無(wú)法支持! 怎么辦?重新拿一個(gè)新的核心來(lái)處理嗎?開(kāi)玩笑~核心的編譯過(guò)程可是很麻煩的~

所以羅,為了這個(gè)緣故,我們的 Linux 很早之前就已經(jīng)開(kāi)始使用所謂的模塊化配置了! 亦即是將一些不常用的類(lèi)似驅(qū)動(dòng)程序的咚咚獨(dú)立出核心,編譯成為模塊,然后, 核心可以在系統(tǒng)正常運(yùn)行的過(guò)程當(dāng)中加載這個(gè)模塊到核心的支持。如此一來(lái), 我在不需要更動(dòng)核心的前提之下,只要編譯出適當(dāng)?shù)暮诵哪K,并且加載他,呵呵!我的 Linux 就可以使用這個(gè)硬件啦!簡(jiǎn)單又方便!

那我的模塊放在哪里啊?可惡!怎么會(huì)問(wèn)這個(gè)傻問(wèn)題呢?當(dāng)然一定要知道的啦!就是?/lib/modules/$(uname -r)/kernel/?當(dāng)中啦!


  • 自制核心 - 核心編譯

剛剛上面談到的核心其實(shí)是一個(gè)文件,那么這個(gè)文件怎么來(lái)的?當(dāng)然是透過(guò)原始碼 (source code) 編譯而成的啊!因?yàn)楹诵氖侵苯颖蛔x入到主內(nèi)存當(dāng)中的,所以當(dāng)然要將他編譯成為系統(tǒng)可以認(rèn)識(shí)的數(shù)據(jù)才行!也就是說(shuō), 我們必須要取得核心的原始碼,然后利用第二十二章 Tarball?安裝方式提到的編譯概念來(lái)達(dá)成核心的編譯才行啊!(這也是本章的重點(diǎn)啊! ^_^)


  • 關(guān)於驅(qū)動(dòng)程序 - 是廠商的責(zé)任還是核心的責(zé)任?

現(xiàn)在我們知道硬件的驅(qū)動(dòng)程序可以編譯成為核心模塊,所以可以在不改變核心的前提下驅(qū)動(dòng)你的新硬件。 但是,很多朋友還是常常感到困惑,就是 Linux 上面針對(duì)最新硬件的驅(qū)動(dòng)程序總是慢了幾個(gè)腳步, 所以覺(jué)得好像 Linux 的支持度不足!其實(shí)不可以這么說(shuō)的,為什么呢?因?yàn)樵?Windows 上面,對(duì)於最新硬件的驅(qū)動(dòng)程序需求,基本上,也都是廠商提供的驅(qū)動(dòng)程序才能讓該硬件工作的, 因此,在這個(gè)『驅(qū)動(dòng)程序開(kāi)發(fā)』的工作上面來(lái)說(shuō),應(yīng)該是屬於硬件發(fā)展廠商的問(wèn)題, 因?yàn)樗覀冑I(mǎi)他的硬件,自然就要提供消費(fèi)者能夠使用的驅(qū)動(dòng)程序啦!

所以,如果大家想要讓某個(gè)硬件能夠在 Linux 上面跑的話(huà),那么似乎可以發(fā)起一人一信的方式,強(qiáng)烈要求硬件開(kāi)發(fā)商發(fā)展 Linux 上面的驅(qū)動(dòng)程序!這樣一來(lái),也可以促進(jìn) Linux 的發(fā)展呢!


升級(jí)核心的目的

除了 BIOS 之外,核心是操作系統(tǒng)中最早被加載到內(nèi)存的咚咚, 他包含了所有可以讓硬件與軟件工作的資訊,所以,如果沒(méi)有搞定核心的話(huà), 那么你的系統(tǒng)肯定會(huì)有點(diǎn)小問(wèn)題!好了,那么是不是將『所有目前核心有支持的東西都給他編譯進(jìn)去我的核心中, 那就可以支持目前所有的硬件與可運(yùn)行的工作啦!』!

這話(huà)說(shuō)的是沒(méi)錯(cuò)啦,但是你是否曾經(jīng)看過(guò)一個(gè)為了怕自己今天出門(mén)會(huì)口渴、會(huì)餓、會(huì)冷、會(huì)熱、會(huì)被車(chē)撞、 會(huì)摔跤、會(huì)被性騷擾,而在自己的大包包里面放了大瓶礦泉水、便當(dāng)、厚外套、短褲、防撞鋼梁、止滑墊、 電擊棒....等一大堆東西,結(jié)果卻累死在半路上的案例嗎?當(dāng)然有!但是很少啦!我相信不太有人會(huì)這樣做! (會(huì)這么做的人通常都已經(jīng)在醫(yī)院了~) 取而代之的是會(huì)看一下天氣,冷了就只帶外套, 熱了就只帶短衣、如果穿的漂亮一點(diǎn)又預(yù)計(jì)晚點(diǎn)回家就多帶個(gè)電擊棒、 出遠(yuǎn)門(mén)到?jīng)]有便利商店的地方才多帶礦泉水....

說(shuō)這個(gè)干什么!對(duì)啦!就是要你了解到,核心的編譯重點(diǎn)在於『你要你的 Linux 作什么?』,是啦!如果沒(méi)有必要的工作,就干脆不要加在你的核心當(dāng)中了!這樣才能讓你的 Linux 跑得更穩(wěn)、更順暢!這也是為什么我們要編譯核心的最主要原因了!


  • Linux 核心特色,與默認(rèn)核心對(duì)終端用戶(hù)的角色

Linux 的核心有幾個(gè)主要的特色,除了『Kernel 可以隨時(shí)、隨各人喜好而更動(dòng)』之外,Kernel 的『版本更動(dòng)次數(shù)太頻繁』也是一個(gè)特點(diǎn)!所以羅,除非你有特殊需求, 否則一次編譯成功就可以啦!不需要隨時(shí)保持最新的核心版本,而且也沒(méi)有必要 (編譯一次核心要粉久的ㄋㄟ!) 。話(huà)說(shuō)到這里又突然想到今天看到的一篇文章,大意是說(shuō)老板想要雇用的人會(huì)希望是 Linux 的老手,因?yàn)樗麄儽容^容易了解問(wèn)題的所在,除此之外,如果有任何問(wèn)題發(fā)生,由於其使用 Linux 是可以隨時(shí)修補(bǔ)漏洞的!但是如果是 Windows 的話(huà),就得要將機(jī)器關(guān)閉,直到 MS 推出修補(bǔ)套件后才能再激活~

那么是否『我就一定需要在安裝好了 Linux 之后就趕緊給他編譯核心呢?』, 老實(shí)說(shuō),『并不需要的』!這是因?yàn)閹缀趺恳粋€(gè) distribution 都已經(jīng)默認(rèn)編譯好了相當(dāng)大量的模塊了, 所以使用者常常或者可能會(huì)使用到的數(shù)據(jù)都已經(jīng)被編譯成為模塊,也因此,呵呵! 我們使用者確實(shí)不太需要重新來(lái)編譯核心!尤其是『一般的使用者, 由於系統(tǒng)已經(jīng)將核心編譯的相當(dāng)?shù)倪m合一般使用者使用了,因此一般入門(mén)的使用者,基本上, 不太需要編譯核心』。


  • 核心編譯的可能目的

OK!那么鳥(niǎo)哥閑閑沒(méi)事干跑來(lái)寫(xiě)個(gè)什么東西?既然都不需要編譯核心還寫(xiě)編譯核心的分享文章, 鳥(niǎo)哥賣(mài)弄才學(xué)呀?很抱歉,鳥(niǎo)哥雖然是個(gè)『不學(xué)有術(shù)』的混混,卻也不會(huì)平白無(wú)故的寫(xiě)東西請(qǐng)您來(lái)指教~ 當(dāng)然是有需要才會(huì)來(lái)編譯核心啦!編譯核心的時(shí)機(jī)可以歸納為幾大類(lèi):

  • 新功能的需求
    我需要新的功能,而這個(gè)功能只有在新的核心里面才有,那么為了獲得這個(gè)功能,只好來(lái)重新編譯我的核心了。例如 iptables 這個(gè)防火墻機(jī)制只有在 2.4.xx 以后的版本里面才有,而新開(kāi)發(fā)的主板芯片組, 很多也需要新的核心推出之后,才能正常而且有效率的工作!

  • 原本核心太過(guò)臃腫
    如果你是那種對(duì)於系統(tǒng)『穩(wěn)定性』很要求的人,對(duì)於核心多編譯了很多莫名其妙的功能而不太喜歡的時(shí)候, 那么就可以重新編譯核心來(lái)取消掉該功能羅;

  • 與硬件搭配的穩(wěn)定性
    由於原本 Linux 核心大多是針對(duì) Intel 的 CPU 來(lái)作開(kāi)發(fā)的,所以如果你的 CPU 是 AMD 的系統(tǒng)時(shí),有可能 (注意!只是有可能,不見(jiàn)得一定會(huì)如此) 會(huì)讓系統(tǒng)跑得『不太穩(wěn)!』。此外,核心也可能沒(méi)有正確的驅(qū)動(dòng)新的硬件,此時(shí)就得重新編譯核心來(lái)讓系統(tǒng)取得正確的模塊才好。?

  • 其他需求 (如嵌入式系統(tǒng))
    就是你需要特殊的環(huán)境需求時(shí),就得自行設(shè)計(jì)你的核心羅!( 像是一些商業(yè)的套裝軟件系統(tǒng),由於需要較為小而美的操作系統(tǒng), 那么他們的核心就需要更簡(jiǎn)潔有力了!)

另外,需要注意重新編譯核心雖然可以針對(duì)你的硬件作最佳化的步驟 (例如剛剛提到的 CPU 的問(wèn)題!) ,不過(guò)由於這些最佳化的步驟對(duì)於整體效能的影響是很小很小的, 因此如果是為了添加效能來(lái)編譯核心的話(huà),基本上,效益不大!然而,如果是針對(duì)『系統(tǒng)穩(wěn)定性』來(lái)考量的話(huà), 那么就有充分的理由來(lái)支持你重新編譯核心羅!

如果系統(tǒng)已經(jīng)運(yùn)行很久了,而且也沒(méi)有什么大問(wèn)題, 加上我又不添加冷門(mén)的硬件設(shè)備,那么建議就不需要重新編譯核心了』, 因?yàn)橹匦戮幾g核心的最主要目的是『想讓系統(tǒng)變的更穩(wěn)!』既然你的 Linux 主機(jī)已經(jīng)達(dá)到這個(gè)目的了,何必再編譯核心?不過(guò),就如同前面提到的, 由於默認(rèn)的核心不見(jiàn)得適合你的需要,加上默認(rèn)的核心可能并無(wú)法與你的硬件配備相配合, 此時(shí)才開(kāi)始考慮重新編譯核心吧!

Tips:
早期鳥(niǎo)哥是強(qiáng)調(diào)最好重新編譯核心的一群啦!不過(guò),最近這個(gè)想法改變了~ 既然原本的 distribution 都已經(jīng)幫我們考慮好如何使用核心了,那么, 我們也不需要再重新的編譯核心啦!尤其是 distribution 都會(huì)主動(dòng)的釋出新版的核心 RPM 版本, 所以,實(shí)在不需要自己重新編譯的!當(dāng)然啦,如同前面提到的, 如果你有特殊需求的話(huà),那就另當(dāng)別論嚕! ^_^

由於『核心的主要工作是在控制硬件!』所以編譯核心之前, 請(qǐng)先了解一下你的硬件配備,與你這部主機(jī)的未來(lái)功能!由於核心是『越簡(jiǎn)單越好!』所以只要將這部主機(jī)的未來(lái)功能給他編進(jìn)去就好了! 其他的就不用去理他啦!


核心的版本

核心的版本問(wèn)題,我們?cè)诘谝徽乱呀?jīng)談?wù)撨^(guò), 主要的版本定義為:『[主].[次].[釋出]-[修改]』的樣式。 你只要知道 2.6.x 是穩(wěn)定版本,2.5.x 是測(cè)試用版本即可。 我們要使用最新的核心來(lái)重新編譯核心時(shí),大多就是使用那種偶數(shù)的核心版本啦!不過(guò)這里還是要再提一遍!就是『?2.4.x 與 2.6.x 是兩個(gè)具有相當(dāng)大差異的核心版本, 兩者之間使用到的函式庫(kù)基本上已經(jīng)不相同了,所以在升級(jí)之前,如果你的核心原本是 2.4.xx 版,那么就升級(jí)到 2.4.xx 版本的最新版,不要由 2.4.xx 直接升級(jí)到 2.6.xx 版,否則到時(shí)可能會(huì)欲哭無(wú)淚~~』, 這個(gè)問(wèn)題在討論區(qū)一再地被提起!這里再次說(shuō)明!

Tips:
為什么不能從 2.4 升級(jí)到 2.6 呢?其實(shí)還是可以啦!只是過(guò)程很復(fù)雜! 我們知道軟件 (packages) 是架構(gòu)在系統(tǒng)核心上面來(lái)進(jìn)行編譯、安裝與運(yùn)行的, 也就是說(shuō),這些 packages 與核心之間,是有相關(guān)性的!這些 packages 會(huì)用到很多核心提供的功能。 但是不同的[主][次]版本之間,他們提供的功能架構(gòu)差異太大,因此,若你由 2.4 升級(jí)到 2.6 的話(huà), 那么絕大部分的軟件『都需要重新再編譯!』這樣了解為何不要在不同的版本間升級(jí)了吧?

此外,2.4.xx 與 2.6.xx 的比較中,并不是 2.6.xx 就一定比 2.4.xx 還要新,因?yàn)檫@兩種版本同時(shí)在進(jìn)行維護(hù)與升級(jí)的工作!如果有興趣的話(huà),可以前往 Linux 核心網(wǎng)站?http://www.kernel.org?一看究竟,你就可以了解目前的核心變動(dòng)情況了!

基本上,目前最新的 distributions ,包括 CentOS, FC, SuSE, Mandriva 等等,都使用 2.6 的核心, 所以,你可以直接由?http://www.kernel.org?下載最新的 2.6.xx 版本的核心來(lái)嘗試編譯啊!目前 (2009/07/27) 鳥(niǎo)哥可以查到的最新版本是 2.6.30 , 底下我們將主要以這個(gè)版本來(lái)測(cè)試。另外,由於較新的核心版本可能會(huì)多出一些選項(xiàng), 因此若有不同的項(xiàng)目也沒(méi)有關(guān)系!稍微查看一下說(shuō)明內(nèi)容就可以了解啦!


核心原始碼的取得方式

既然核心是個(gè)文件,要制作這個(gè)文件給系統(tǒng)使用則需要編譯,既然要有編譯,當(dāng)然就得要有原始碼啊! 那么原始碼怎么來(lái)?基本上,依據(jù)你的 distributions 去挑選的核心原始碼來(lái)源主要有:


  • 原本 distribution 提供的核心原始碼文件

事實(shí)上,各主要 distributions 在推出他們的產(chǎn)品時(shí),其實(shí)已經(jīng)都附上了核心原始碼了! 以我們的 CentOS 5.x 為例,你可以在國(guó)家高速網(wǎng)絡(luò)中心網(wǎng)站下載相關(guān)的核心 SRPM 的文件! 由於 CentOS 5.x 一直有在進(jìn)行升級(jí)動(dòng)作,因此你也可以在 update 的目錄底下找到核心原始碼喔!如下連結(jié)所示:

  • 原始推出核心碼:http://ftp.twaren.net/Linux/CentOS/5/os/SRPMS/
  • 升級(jí)碼:http://ftp.twaren.net/Linux/CentOS/5/updates/SRPMS/

你或許會(huì)說(shuō):既然要重新編譯,那么干嘛還要使用原本 distributions 釋出的原始碼啊?真沒(méi)創(chuàng)意~ 話(huà)不是這么說(shuō),因?yàn)樵镜?distribution 釋出的原始碼當(dāng)中,含有他們配置好的默認(rèn)配置值, 所以,我們可以輕易的就了解到當(dāng)初他們是如何選擇與核心及模塊有關(guān)的各項(xiàng)配置項(xiàng)目的參數(shù)值, 那么就可以利用這些可以配合我們 Linux 系統(tǒng)的默認(rèn)參數(shù)來(lái)加以修改,如此一來(lái), 我們就可以『修改核心,調(diào)整到自己喜歡的樣子』羅!而且編譯的難度也會(huì)比較低一點(diǎn)!


  • 取得最新的穩(wěn)定版核心原始碼

雖然使用 distribution 釋出的核心 source code 來(lái)重新編譯比較方便,但是,如此一來(lái), 新硬件所需要的新驅(qū)動(dòng)程序,也就無(wú)法藉由原本的核心原始碼來(lái)編譯啊! 所以羅,如果是站在要升級(jí)驅(qū)動(dòng)程序的立場(chǎng)來(lái)看,當(dāng)然使用最新的核心可能會(huì)比較好啊!

Linux 的核心目前是由其發(fā)明者 Linus Torvalds 所屬團(tuán)隊(duì)在負(fù)責(zé)維護(hù)的,而其網(wǎng)站在底下的站址上,在該網(wǎng)站上可以找到最新的 kernel 資訊!不過(guò),美中不足的是目前的核心越來(lái)越大了 (linux-2.6.30.3.tar.bz2 這一版,這一個(gè)文件大約 57MB 了!),所以如果你的 ISP 連外很慢的話(huà),那么使用臺(tái)灣的映射站臺(tái)來(lái)下載不失為一個(gè)好方法:

  • 核心官網(wǎng):http://www.kernel.org/
  • 交大資科:ftp://linux.cis.nctu.edu.tw/kernel/linux/kernel/
  • 國(guó)高中心:ftp://ftp.twaren.net/pub/Unix/Kernel/linux/kernel/


  • 保留原本配置:利用 patch 升級(jí)核心原始碼

如果 (1)你曾經(jīng)自行編譯過(guò)核心,那么你的系統(tǒng)當(dāng)中應(yīng)該已經(jīng)存在前幾個(gè)版本的核心原始碼, 以及上次你自行編譯的參數(shù)配置值才對(duì); (2)如果你只是想要在原本的核心底下加入某些特殊功能, 而該功能已經(jīng)針對(duì)核心原始碼推出 patch 補(bǔ)丁文件時(shí)。那你該如何進(jìn)行核心原始碼的升級(jí),以便后續(xù)的編譯呢?

其實(shí)每一次核心釋出時(shí),除了釋出完整的核心壓縮檔之外,也會(huì)釋出『該版本與前一版本的差異性 patch 文件』, 關(guān)於 patch 的制作我們已經(jīng)在第二十二章當(dāng)中提及, 你可以自行前往參考。這里僅是要提供給你的資訊是,每個(gè)核心的 patch 僅有針對(duì)前一版的核心來(lái)分析而已, 所以,萬(wàn)一你想要由 2.6.27 升級(jí)到 2.6.30 的話(huà),那么你就得要下載 patch-2.6.28, patch-2.6.29, patch-2.6.30 等文件,然后『依序』一個(gè)一個(gè)的去進(jìn)行 patch 的動(dòng)作后, 才能夠升級(jí)到 2.6.30 喔!這個(gè)重要!不要忘記了。

但是,如果你想要升級(jí) 2.6.30 的修改版本到 2.6.30.3 時(shí),由於修改版本是針對(duì) 2.6.30 來(lái)制作的, 因此你只要下載 patch-2.6.30.3 來(lái)直接將 2.6.30 升級(jí)至 2.6.30.3 即可。但反過(guò)來(lái)說(shuō),如果你要從 2.6.30.2 升級(jí)到 2.6.30.3 呢?很抱歉的是,并沒(méi)有 2.6.30.2 到 2.6.30.3 的補(bǔ)丁文件,所以你必須要將 2.6.30.2 還原至 2.6.30, 然后才能使用 patch-2.6.30.3 來(lái)升級(jí) 2.6.30 喔!注意這個(gè)差異!

同樣的,如果是某個(gè)硬件或某些非官方認(rèn)定的核心添加功能網(wǎng)站所推出的 patch 文件時(shí),你也必須要了解該 patch 文件所適用的核心版本,然后才能夠進(jìn)行 patch ,否則容易出現(xiàn)重大錯(cuò)誤喔!這個(gè)項(xiàng)目對(duì)於某些商業(yè)公司的工程師來(lái)說(shuō)是很重要的。 舉例來(lái)說(shuō),鳥(niǎo)哥的一個(gè)高中同學(xué)在業(yè)界服務(wù),他主要是進(jìn)行類(lèi)似 Eee PC 開(kāi)發(fā)的計(jì)畫(huà),然而該計(jì)畫(huà)的硬件是該公司自行推出的! 因此,該公司必須要自行搭配核心版本來(lái)設(shè)計(jì)他們自己的驅(qū)動(dòng)程序,而該驅(qū)動(dòng)程序并非 GPL 授權(quán),因此他們就得要自行將驅(qū)動(dòng)程序整合進(jìn)核心!如果改天他們要將這個(gè)驅(qū)動(dòng)程序釋出,那么就得要利用 patch 的方式, 將硬件驅(qū)動(dòng)程序文件釋出,我們就得要自行以 patch 來(lái)升級(jí)核心啦!

在進(jìn)行完 patch 之后,你可以直接檢查一下原本的配置值,如果沒(méi)有問(wèn)題, 就可以直接編譯,而不需要再重新的選擇核心的參數(shù)值,這也是一個(gè)省時(shí)間的方法啊! 至於 patch file 的下載,同樣是在 kernel 的相同目錄下,尋找檔名是 patch 開(kāi)頭的就是了。


核心原始碼的解壓縮/安裝/觀察

由於鳥(niǎo)哥是比較喜歡直接由核心官網(wǎng)取得原始核心的家伙,所以,底下的動(dòng)作是使用 2.6.30.3 這個(gè)版本的核心來(lái)安裝的! 如果你想要使用 distributions 提供的 SRPM 來(lái)處理的話(huà),得自行找到 SRPM 的相關(guān)安裝方法來(lái)處理羅! 其實(shí)看一下第二十二章就知道該如何處理啦。 總之,本章的核心原始碼是由底下的連結(jié)取得的:

  • ftp://linux.cis.nctu.edu.tw/kernel/linux/kernel/v2.6/linux-2.6.30.3.tar.bz2


  • 核心原始碼的解壓縮與放置目錄

鳥(niǎo)哥這里假設(shè)你也是下載上述的連結(jié)內(nèi)的文件,然后該文件放置到 /root 底下。由於 2.6.x 核心原始碼一般建議放置於 /usr/src/kernels/ 目錄底下,因此你可以這樣處理:

[root@www ~]# tar -jxvf linux-2.6.30.3.tar.bz2 -C /usr/src/kernels/

此時(shí)會(huì)在 /usr/src/kernels 底下產(chǎn)生一個(gè)新的目錄,那就是 linux-2.6.30.3 這個(gè)目錄羅! 我們?cè)谙聜€(gè)小節(jié)會(huì)談到的各項(xiàng)編譯與配置,都必須要在這個(gè)目錄底下進(jìn)行才行喔!好了,那么這個(gè)目錄底下的相關(guān)文件有啥咚咚? 底下就來(lái)談?wù)?#xff1a;


  • 核心原始碼下的次目錄

在上述核心目錄下含有哪些重要數(shù)據(jù)呢?基本上有底下這些東西:

  • arch :與硬件平臺(tái)有關(guān)的項(xiàng)目,大部分指的是 CPU 的類(lèi)別,例如 x86, x86_64, Xen 虛擬支持等;
  • block :與區(qū)塊裝置較相關(guān)的配置數(shù)據(jù),區(qū)塊數(shù)據(jù)通常指的是大量?jī)?chǔ)存媒體!還包括類(lèi)似 ext3 等文件系統(tǒng)的支持是否允許等。
  • crypto :核心所支持的加密的技術(shù),例如 md5 或者是 des 等等;
  • Documentation :與核心有關(guān)的一堆說(shuō)明文件,若對(duì)核心有極大的興趣,要瞧瞧這里!
  • drivers :一些硬件的驅(qū)動(dòng)程序,例如顯卡、網(wǎng)絡(luò)卡、PCI 相關(guān)硬件等等;
  • firmware :一些舊式硬件的微命令碼 (韌體) 數(shù)據(jù);
  • fs :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;
  • include :一些可讓其他程序呼叫的標(biāo)頭 (header) 定義數(shù)據(jù);
  • init :一些核心初始化的定義功能,包括掛載與 init 程序的呼叫等;
  • ipc :定義 Linux 操作系統(tǒng)內(nèi)各程序的溝通;
  • kernel :定義核心的程序、核心狀態(tài)、運(yùn)行緒、程序的排程 (schedule)、程序的訊號(hào) (signle) 等
  • lib :一些函式庫(kù);
  • mm :與內(nèi)存單元有關(guān)的各項(xiàng)數(shù)據(jù),包括 swap 與虛擬內(nèi)存等;
  • net :與網(wǎng)絡(luò)有關(guān)的各項(xiàng)協(xié)議數(shù)據(jù),還有防火墻模塊 (net/ipv4/netfilter/*) 等等;
  • security :包括 selinux 等在內(nèi)的安全性配置;
  • sound :與音效有關(guān)的各項(xiàng)模塊;
  • virt :與虛擬化機(jī)器有關(guān)的資訊,目前核心支持的是 KVM (Kernel base Virtual Machine)

這些數(shù)據(jù)先大致有個(gè)印象即可,至少未來(lái)如果你想要使用 patch 的方法加入額外的新功能時(shí), 你要將你的原始碼放置於何處?這里就能夠提供一些指引了。當(dāng)然,最好還是跑到 Documentation 那個(gè)目錄底下去瞧瞧正確的說(shuō)明, 對(duì)你的核心編譯會(huì)更有幫助喔!


核心編譯的前處理與核心功能選擇

什么?核心編譯還要進(jìn)行前處理?沒(méi)錯(cuò)啦!事實(shí)上,核心的目的在管理硬件與提供系統(tǒng)核心功能,因此你必須要先找到你的系統(tǒng)硬件, 并且規(guī)劃你的主機(jī)未來(lái)的任務(wù),這樣才能夠編譯出適合你這部主機(jī)的核心!所以,整個(gè)核心編譯的重要工作就是在『挑選你想要的功能』。 底下鳥(niǎo)哥就以自己的一部主機(jī)軟/硬件環(huán)境來(lái)說(shuō)明,解釋一下如何處理核心編譯羅!


硬件環(huán)境檢視與核心功能要求

鳥(niǎo)哥的一部主機(jī)硬件環(huán)境如下 (透過(guò) /proc/cpuinfo 及 lspci 觀察):

  • CPU:AMD 的 Athlon64 3000+ (舊式,不含虛擬化功能)
  • 主板芯片組: ALi M1689 K8 北橋 及 M5249, M1563 南橋芯片 (較冷門(mén)的硬件)
  • 顯卡: AGP 8X 的 NVidia GeForce 6600LE
  • 內(nèi)存: 2.0GB 內(nèi)存
  • 硬盤(pán): WD 2.5GB 硬盤(pán),使用 ALi, ULi 5289 SATA 介面
  • 電源控制器: ALi M7101 Power Management Controller (PMU)
  • 網(wǎng)絡(luò)卡: 3Com 3c905C-TX/TX-M (對(duì)外)
  • 網(wǎng)絡(luò)卡: Realtek Semiconductor RTL-8139/8139C/8139C+

硬件大致如上,至於這部主機(jī)的需求,是希望做為未來(lái)在鳥(niǎo)哥上課時(shí),可以透過(guò)虛擬化功能來(lái)處理學(xué)生的練習(xí)用虛擬機(jī)器。 這部主機(jī)也是鳥(niǎo)哥用來(lái)放置學(xué)校上課教材的機(jī)器,因此,這部主機(jī)的 I/O 需求須要好一點(diǎn),未來(lái)還需要開(kāi)啟防火墻、 WWW 服務(wù)器功能、FTP 服務(wù)器功能等,基本上,用途就是一部小型的服務(wù)器環(huán)境羅。大致上需要這樣的功能啦!


保持干凈原始碼: make mrproper

了解了硬件相關(guān)的數(shù)據(jù)后,我們還得要處理一下核心原始碼底下的殘留文件才行!假設(shè)我們是第一次編譯, 但是我們不清楚到底下載下來(lái)的原始碼當(dāng)中有沒(méi)有保留目標(biāo)文件 (*.o) 以及相關(guān)的配置檔存在, 此時(shí)我們可以透過(guò)底下的方式來(lái)處理掉這些編譯過(guò)程的目標(biāo)文件以及配置檔:

[root@www linux-2.6.30.3]# make mrproper

請(qǐng)注意,這個(gè)動(dòng)作會(huì)將你以前進(jìn)行過(guò)的核心功能選擇文件也刪除掉, 所以幾乎只有第一次運(yùn)行核心編譯前才進(jìn)行這個(gè)動(dòng)作,其余的時(shí)刻,你想要?jiǎng)h除前一次編譯過(guò)程的殘留數(shù)據(jù), 只要下達(dá):

[root@www linux-2.6.30.3]# make clean

因?yàn)?make clean 僅會(huì)刪除類(lèi)似目標(biāo)檔之類(lèi)的編譯過(guò)程產(chǎn)生的中間文件,而不會(huì)刪除配置檔! 很重要的!千萬(wàn)不要搞亂了喔!好了,既然我們是第一次進(jìn)行編譯,因此,請(qǐng)下達(dá)『make mrproper』吧!


開(kāi)始挑選核心功能: make XXconfig

不知道你有沒(méi)有發(fā)現(xiàn) /boot/ 底下存在一個(gè)名為 config-xxx 的文件?那個(gè)文件其實(shí)就是核心功能列表檔! 我們底下要進(jìn)行的動(dòng)作,其實(shí)就是作出該文件!而我們后續(xù)小節(jié)所要進(jìn)行的編譯動(dòng)作,其實(shí)也就是透過(guò)這個(gè)文件來(lái)處理的! 核心功能的挑選,最后會(huì)在 /usr/src/kernels/linux-2.6.30.3/ 底下產(chǎn)生一個(gè)名為 .config 的隱藏檔, 這個(gè)文件就是 /boot/config-xxx 的文件啦!那么這個(gè)文件如何創(chuàng)建呢?你可以透過(guò)非常多的方法來(lái)創(chuàng)建這個(gè)文件! 常見(jiàn)的方法有:(注1)

  • make menuconfig
    最常使用的,是文字模式底下可以顯示類(lèi)似圖形介面的方式,不需要啟動(dòng) X Window 就能夠挑選核心功能菜單!

  • make oldconfig
    透過(guò)使用已存在的 ./.config 文件內(nèi)容,使用該文件內(nèi)的配置值為默認(rèn)值,只將新版本核心內(nèi)的新功能選項(xiàng)列出讓使用者選擇, 可以簡(jiǎn)化核心功能的挑選過(guò)程!對(duì)於作為升級(jí)核心原始碼后的功能挑選來(lái)說(shuō),是非常好用的一個(gè)項(xiàng)目!

  • make xconfig
    透過(guò)以 Qt 為圖形介面基礎(chǔ)功能的圖形化介面顯示,需要具有 X window 的支持。例如 KDE 就是透過(guò) Qt 來(lái)設(shè)計(jì)的 X Window,因此你如果在 KDE 畫(huà)面中,可以使用此一項(xiàng)目。

  • make gconfig
    透過(guò)以 Gtk 為圖形介面基礎(chǔ)功能的圖形化介面顯示,需要具有 X window 的支持。例如 GNOME 就是透過(guò) Gtk 來(lái)設(shè)計(jì)的 X Window,因此你如果在 GNOME 畫(huà)面中,可以使用此一項(xiàng)目。

  • make config
    最舊式的功能挑選方法,每個(gè)項(xiàng)目都以條列式一條一條的列出讓你選擇,如果配置錯(cuò)誤只能夠再次選擇,很不人性化啊!

大致的功能選擇有上述的方法,不過(guò)鳥(niǎo)哥個(gè)人比較偏好 make menuconfig 這個(gè)項(xiàng)目啦!如果你喜歡使用圖形介面, 然后使用鼠標(biāo)去挑選所需要的功能時(shí),也能使用 make xconfig 或 make gconfig ,不過(guò)需要有相關(guān)的圖形介面支持! 如果你是升級(jí)核心原始碼并且需要重新編譯,那么使用 make oldconfig 會(huì)比較適當(dāng)!好了,那么如何選擇呢? 以 make menuconfig 來(lái)說(shuō),出現(xiàn)的畫(huà)面會(huì)有點(diǎn)像這樣:


圖 2.3.1 、 make menuconfig 核心功能挑選菜單示意圖

看到上面的圖示之后,你會(huì)發(fā)現(xiàn)畫(huà)面主要分為兩大部分,一個(gè)是大框框內(nèi)的反白光柱,另一個(gè)則是底下的小框框, 里面有 select, exit 與 help 三個(gè)選項(xiàng)的內(nèi)容。這幾個(gè)組件的大致用法如下:

  • 『左右方向鍵』:可以移動(dòng)最底下的 <Select>, <Exit>, <Help>項(xiàng)目;
  • 『上下方向鍵』:可以移動(dòng)上面大框框部分的反白光柱,若該行有箭頭 (--->) 則表示該行內(nèi)部還有其他細(xì)項(xiàng)需要來(lái)配置的意思;
  • 選定項(xiàng)目:以『上下鍵』選擇好想要配置的項(xiàng)目之后,并以『左右鍵』選擇 <Select> 之后, 按下『 Enter 』就可以進(jìn)入該項(xiàng)目去作更進(jìn)一步的細(xì)部配置羅;
  • 可挑選之功能:在細(xì)部項(xiàng)目的配置當(dāng)中,如果前面有 [ ] 或 < > 符號(hào)時(shí),該項(xiàng)目才可以選擇, 而選擇可以使用『空白鍵』來(lái)選擇;
  • 若為 [*] <*> 則表示編譯進(jìn)核心;若為 <M> 則表示編譯成模塊! 盡量在不知道該項(xiàng)目為何時(shí),且有模塊可以選,那么就可以直接選擇為模塊羅!
  • 當(dāng)在細(xì)項(xiàng)目選擇 <Exit> 后,并按下 Enter ,那么就可以離開(kāi)該細(xì)部項(xiàng)目羅!

基本上建議只要『上下左右的方向鍵、空白鍵、Enter』這六個(gè)按鍵就好了!不要使用 Esc ,否則一不小心就有可能按錯(cuò)的!另外,關(guān)於整個(gè)核心功能的選擇上面,建議你可以這樣思考:

  • 『肯定』核心一定要的功能,直接編譯進(jìn)核心內(nèi);
  • 『可能在未來(lái)會(huì)用到』的功能,那么盡量編譯成為模塊;
  • 『不知道那個(gè)東西要干嘛的,看 help 也看不懂』的話(huà),那么就保留默認(rèn)值,或者將他編譯成為模塊;

總之,盡量保持核心小而美,剩下的功能就編譯成為模塊,尤其是『需要考慮到未來(lái)擴(kuò)充性』, 像鳥(niǎo)哥之前認(rèn)為螃蟹卡就夠我用的了,結(jié)果,后來(lái)竟然網(wǎng)站流量大增,鳥(niǎo)哥只好改換 3Com 的網(wǎng)絡(luò)卡。 不過(guò),我的核心卻沒(méi)有相關(guān)的模塊可以使用~因?yàn)?....鳥(niǎo)哥自己編譯的核心忘記加入這個(gè)模塊了。 最后,只好重新編譯一次核心的模塊,呵呵!真是慘痛的教訓(xùn)啊!


核心功能細(xì)項(xiàng)選擇

由上面的圖示當(dāng)中,我們知道核心的可以選擇的項(xiàng)目有很多啊!光是第一面,就有 16 個(gè)項(xiàng)目,每個(gè)項(xiàng)目?jī)?nèi)還有不同的細(xì)項(xiàng)!哇!真是很麻煩啊~每個(gè)項(xiàng)目其實(shí)都可能有 <Help> 的說(shuō)明,所以,如果看到不懂的項(xiàng)目,務(wù)必要使用 Help 查閱查閱! 好了,底下我們就一個(gè)一個(gè)項(xiàng)目來(lái)看看如何選擇吧!


  • General setup

與 Linux 最相關(guān)的程序互動(dòng)、核心版本說(shuō)明、是否使用發(fā)展中程序碼等資訊都在這里配置的。 這里的項(xiàng)目主要都是針對(duì)核心與程序之間的相關(guān)性來(lái)設(shè)計(jì)的,基本上,保留默認(rèn)值即可! 不要隨便取消底下的任何一個(gè)項(xiàng)目,因?yàn)榭赡軙?huì)造成某些程序無(wú)法被同時(shí)運(yùn)行的困境喔! 不過(guò)底下有非常多新的功能,如果你有不清楚的地方,可以按 <Help> 進(jìn)入查閱,里面會(huì)有一些建議! 你可以依據(jù) Help 的建議來(lái)選擇新功能的啟動(dòng)與否!

[ ] Prompt for development and/or incomplete code/drivers# 這個(gè)建議不要選擇,因?yàn)槲覀儾皇呛诵膶?zhuān)家,不需要使用發(fā)展中或不完整的程序碼! (vbird) Local version - append to kernel release [*] Automatically append version information to the version string# 我希望我的核心版本成為 2.6.30.3.vbird ,那這里可以就這樣配置!Kernel compression mode (Bzip2) ---># 建議選擇成為 Bzip2 即可,因?yàn)閴嚎s比較佳! [*] Support for paging of anonymous memory (swap)# 任何人均可存取 swap 是合理的!所以這里務(wù)必要勾選! [*] System V IPC# IPC 是 Inter Process Communication (程序通訊) 縮寫(xiě),與程序溝通有關(guān),要選! [*] BSD Process Accounting [ ] BSD Process Accounting version 3 file format# 與標(biāo)準(zhǔn) Unix (BSD) 的程序支持有關(guān),但不要支持 version 3 ,可能有兼容性問(wèn)題 [ ] Export task/process statistics through netlink (EXPERIMENTAL)# 這個(gè)額外的進(jìn)階選項(xiàng)可以將他取消的! [*] Auditing support [*] Enable system-call auditing support# 上面這兩個(gè)是額外核心功能 (如 SELinux) 加載時(shí)所需要的配置!務(wù)必選擇RCU Subsystem --->RCU Implementation (Classic RCU) ---># 選擇標(biāo)準(zhǔn) RCU 即可,不需要使用大量 CPU 的整合功能。 <M> Kernel .config support [ ] Enable access to .config through /proc/config.gz (NEW)# 讓 .config 這個(gè)核心功能列表可以寫(xiě)入實(shí)際的核心文件中! (17) Kernel log buffer size (16 => 64KB, 17 => 128KB) [ ] Control Group support (NEW) ---># 整合 CPU 或分離裝置的功能,屬於進(jìn)階配置,我們先不要使用這功能。 [*] Create deprecated sysfs layout for older userspace tools (NEW)# 如果使用支持舊式裝置,如 /sys/devices 者,這里要勾選!但如果是 2008 # 年后的 distribution ,這里可能需要取消喔! CentOS 5.x 要選的! -*- Kernel->user space relay support (formerly relayfs) -*- Namespaces support [*] UTS namespace (NEW) [*] IPC namespace (NEW)# 使用 uname 時(shí),會(huì)輸出較多的資訊,所以可以嘗試選擇看看。 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support () Initramfs source file(s)# 這是一定要的!因?yàn)橐С謫?dòng)時(shí)加載 initail RAM disk 嘛! [*] Optimize for size # 可以減低核心的文件大小,其實(shí)是 gcc 參數(shù)使用 -Os 而不是 -O2 [ ] Configure standard kernel features (for small systems) ---># 給嵌入式系統(tǒng)使用的,我們用 PC ,所以這里不選。 [ ] Strip assembler-generated symbols during link (NEW) [ ] Disable heap randomization (NEW)# 2000 年后推出的版本,可以取消這個(gè)項(xiàng)目!Choose SLAB allocator (SLAB) ---> [*] Profiling support (EXPERIMENTAL) [ ] Activate markers (NEW) <M> OProfile system profiling (EXPERIMENTAL) [ ] OProfile AMD IBS support (EXPERIMENTAL) (NEW) [*] Kprobes


  • loadable module + block layer

要讓你的核心能夠支持動(dòng)態(tài)的核心模塊,那么底下的第一個(gè)配置就得要啟動(dòng)才行!至於第二個(gè) block layer 則默認(rèn)是啟動(dòng)的, 你也可以進(jìn)入該項(xiàng)目的細(xì)項(xiàng)配置,選擇其中你認(rèn)為需要的功能即可!

[*] Enable loadable module support ---> <==底下為細(xì)項(xiàng)--- Enable loadable module support[ ] Forced module loading <==大概就是這個(gè)不要選,其他的都選起來(lái)![*] Module unloading[*] Module versioning support[*] Source checksum for all module ================================================================================ -*- Enable the block layer ---> <==看吧!默認(rèn)就是已經(jīng)選擇了!底下為細(xì)項(xiàng)[ ] Block layer data integrity support <==特殊儲(chǔ)存裝置支持,可以不選IO Schedulers ---><*> Anticipatory I/O scheduler <==較復(fù)雜的一種I/O排程<*> Deadline I/O scheduler <==較適用於 database 的加載<*> CFQ I/O scheduler <==較適用於 desktop 的環(huán)境Default I/O scheduler (Deadline) ---> <==適用於鳥(niǎo)哥環(huán)境


  • CPU 的類(lèi)型與功能選擇

進(jìn)入『Processor type and features』后,請(qǐng)?zhí)暨x你主機(jī)的實(shí)際 CPU 形式。鳥(niǎo)哥這里使用的是 Athlon 64 的 CPU, 而且鳥(niǎo)哥的主機(jī)還有啟動(dòng) Xen 這個(gè)虛擬化的服務(wù) (在一部主機(jī)上面同時(shí)啟動(dòng)多個(gè)操作系統(tǒng)),因此,所以底下的選擇是這樣的:

[*] Tickless System (Dynamic Ticks) <==可添加些許省電功能 [ ] High Resolution Timer Support [*] Symmetric multi-processing support <==多核心 CPU 環(huán)境必選 [ ] Support sparse irq numbering [*] Enable MPS table <==讓多 CPU 支持 ACPI [ ] Support for extended (non-PC) x86 platforms [*] Single-depth WCHAN output [*] Paravirtualized guest support ---> <==支持半虛擬化功能--- Paravirtualized guest support <==底下為 Xen 與 KVM 兩種虛擬機(jī)器支持![*] Xen guest support(32) Maximum allowed size of a domain in gigabytes[*] Enable Xen debug and tuning parameters in debugfs[*] KVM paravirtualized clock[*] KVM Guest support-*- Enable paravirtualization code ================================================================================ [ ] paravirt-ops debugging (NEW) <==不需要具有 debug 的功能 [ ] MemtestProcessor family (Opteron/Athlon64/Hammer/K8) ---> <==要選對(duì)啊! [*] AMD IOMMU support <==啟動(dòng) AMD 的 IOMMU 功能! (8) Maximum number of CPUs [ ] SMT (Hyperthreading) scheduler support <==Intel CPU 的超運(yùn)行緒功能 [*] Multi-core scheduler support <==多核心功能的支持Preemption Model (No Forced Preemption (Server)) ---># 這是與程序有關(guān)的配置項(xiàng)目,鳥(niǎo)哥這里創(chuàng)建 Server 主機(jī),因此選這項(xiàng)!# 如果是桌上型計(jì)算機(jī)的使用,建議進(jìn)入選擇 desktop 項(xiàng)目。 [ ] Reroute for broken boot IRQs [*] Machine Check Exception <==可將核心偵測(cè)之錯(cuò)誤回報(bào)到終端機(jī)顯示! [*] Intel MCE features (NEW) [*] AMD MCE features (NEW) < > Dell laptop support <M> /dev/cpu/microcode - microcode support [ ] Intel microcode patch loading support [*] AMD microcode patch loading support <M> /dev/cpu/*/msr - Model-specific register support <*> /dev/cpu/*/cpuid - CPU information support < > /sys/kernel/debug/x86/cpu/* - CPU Debug support [ ] Numa Memory Allocation and Scheduler SupportMemory model (Sparse Memory) ---> [*] Sparse Memory virtual memmap <==可強(qiáng)化些許核心效能 [ ] Allow for memory hot-add [*] Add LRU list to track non-evictable pages (65536) Low address space to protect from user allocation [ ] Check for low memory corruption [*] Reserve low 64K of RAM on AMI/Phoenix BIOSen <==重新偵測(cè) BIOS 資訊 [*] MTRR (Memory Type Range Register) support# 可以讓 CPU 具有讀取內(nèi)存特殊區(qū)塊的能力,尤其在高效能的顯卡方面,# 可以增進(jìn)不少效能。這個(gè)項(xiàng)目會(huì)產(chǎn)生 /proc/mtrr ,X 會(huì)讀取這個(gè)咚咚喔。 [*] MTRR cleanup support (0) MTRR cleanup enable value (0-1) (1) MTRR cleanup spare reg num (0-7) [ ] x86 PAT support [ ] EFI runtime service support [*] Enable seccomp to safely compute untrusted bytecodeTimer frequency (300 HZ) ---># 這個(gè)項(xiàng)目則與核心針對(duì)某個(gè)事件立即回應(yīng)的速度有關(guān)。Server 用途可以調(diào)整到# 300Hz 即可,如果是桌上型計(jì)算機(jī)使用,需要調(diào)整高一點(diǎn),例如 1000Hz 較佳! [*] kexec system call [ ] kernel crash dumps -*- Support for hot-pluggable CPUs [ ] Compat VDSO support <==舊式功能,可以不要選擇 [ ] Built-in kernel command line <==正常啟動(dòng)菜單 (grub) 環(huán)境,不需要此項(xiàng)功能


  • 電源管理功能

如果選擇了『Power management and ACPI options』之后,就會(huì)進(jìn)入系統(tǒng)的電源管理機(jī)制中。 其實(shí)電源管理機(jī)制還需要搭配主板以及 CPU 的相關(guān)省電功能,才能夠?qū)嶋H達(dá)到省電的效率啦! 不論是 Server 還是 Desktop 的使用,在目前電力不足的情況下,能省電就加以省電吧!

[*] Power Management support [ ] Power Management Debug Support [*] Suspend to RAM and standby [ ] Hibernation (aka 'suspend to disk') [*] ACPI (Advanced Configuration and Power Interface) Support ---># 這是個(gè)較新的電源管理模塊,由於選擇后會(huì)添加核心約 70K ,所以# 對(duì)嵌入式系統(tǒng)來(lái)說(shuō),可能需要考慮考慮。至於 desktop/server 當(dāng)然就選擇啊--- ACPI (Advanced Configuration and Power Interface) Support[ ] Deprecated /proc/acpi files[*] Deprecated power /proc/acpi directories[*] Future power /sys interface[*] Deprecated /proc/acpi/event support<M> AC Adapter<M> Battery<M> Button-M- Video<*> Fan<*> Processor<*> Thermal Zone[ ] Debug Statements<M> PCI slot detection driver<M> Smart Battery System ================================================================================CPU Frequency scaling ---># 可以經(jīng)過(guò)核心修改 CPU 的運(yùn)行頻率,在說(shuō)明檔當(dāng)中也提及,還需要啟動(dòng)底下的# dynamic cpufreq governor 才可以順利的啟動(dòng)這個(gè)項(xiàng)目。[*] CPU Frequency scaling[*] Enable CPUfreq debugging<M> CPU frequency translation statistics[*] CPU frequency translation statistics detailsDefault CPUFreq governor (userspace) --->-*- 'performance' governor<M> 'powersave' governor<M> 'userspace' governor for userspace frequency scaling<M> 'ondemand' cpufreq policy governor-*- 'conservative' cpufreq governor*** CPUFreq processor drivers ***<M> ACPI Processor P-States driver<*> AMD Opteron/Athlon64 PowerNow! <==因?yàn)槲覀兪?AMD 的 CPU 啊!<M> Intel Enhanced SpeedStep (deprecated)< > Intel Pentium 4 clock modulation ================================================================================ -*- CPU idle PM supportMemory power savings --->


  • 一些匯流排 (bus) 的選項(xiàng)

這個(gè)項(xiàng)目則與匯流排有關(guān)啦!分為最常見(jiàn)的 PCI 與 PCI-express 的支持,還有筆記本計(jì)算機(jī)常見(jiàn)的 PCMCIA 插卡啊!要記住的是,那個(gè) PCI-E 的介面務(wù)必要選取!不然你的新顯卡可能會(huì)捉不到!

[*] PCI support [*] Support mmconfig PCI config space access [*] PCI Express support <M> PCI Express Hotplug driver [*] Root Port Advanced Error Reporting support -*- Message Signaled Interrupts (MSI and MSI-X) [*] Enable deprecated pci_find_* API [ ] PCI Debugging <M> PCI Stub driver [*] Interrupts on hypertransport devices [*] PCI IOV support <==與虛擬化有關(guān)!請(qǐng)加選此項(xiàng)! < > PCCard (PCMCIA/CardBus) support ---> <==鳥(niǎo)哥的主機(jī)不是 notebook,所以不選。 <*> Support for PCI Hotplug ---> <==不關(guān)機(jī)情況下,熱拔插 PCI 裝置--- Support for PCI Hotplug<M> Fake PCI Hotplug driver<M> ACPI PCI Hotplug driver<M> ACPI PCI Hotplug driver IBM extensions[ ] CompactPCI Hotplug driver<M> SHPC PCI Hotplug driver


  • 編譯后運(yùn)行檔的格式

選擇『Executable file formats / Emulations』會(huì)見(jiàn)到如下選項(xiàng)。 底下的選項(xiàng)必須要勾選才行喔!因?yàn)槭墙o Linux 核心運(yùn)行運(yùn)行檔之用的數(shù)據(jù)。通常是與編譯行為有關(guān)啦!

[*] Kernel support for ELF binaries [ ] Write ELF core dumps with partial segments <*> Kernel support for MISC binaries [*] IA32 Emulation <==因?yàn)槲覀冞@里是 64 位,因此 32 位為模擬結(jié)果 <M> IA32 a.out support


  • 核心的網(wǎng)絡(luò)功能

這個(gè)『Networking support』項(xiàng)目是相當(dāng)重要的選項(xiàng),因?yàn)樗€包含了防火墻相關(guān)的項(xiàng)目!就是未來(lái)在服務(wù)器篇會(huì)談到的防火墻 iptables 這個(gè)數(shù)據(jù)啊!所以,千萬(wàn)注意了!在這個(gè)配置項(xiàng)目當(dāng)中,很多東西其實(shí)我們?cè)诨A(chǔ)篇還沒(méi)有講到, 因?yàn)榇蟛糠值膮?shù)都與網(wǎng)絡(luò)、防火墻有關(guān)!由於防火墻是在啟動(dòng)網(wǎng)絡(luò)之后再配置即可,所以絕大部分的內(nèi)容都可以被編譯成為模塊,而且也建議你編成模塊!有用到再加載到核心即可啊!

--- Networking supportNetworking options ---># 就是這個(gè)光啊!里面的數(shù)據(jù)全部都是重要的防火墻項(xiàng)目!盡量編成模塊羅!# 至於不曉得功能的部分,就盡量保留默認(rèn)值即可!<*> Packet socket <==網(wǎng)絡(luò)封包,當(dāng)然要選擇啊![*] Packet socket: mmapped IO<*> Unix domain sockets <==Unix 插槽檔,也一定要選擇啊!<*> Transformation user configuration interface<M> PF_KEY sockets[*] TCP/IP networking <==能不選擇 TCP/IP 嗎?[*] IP: multicasting[*] IP: advanced routerChoose IP: FIB lookup algorithm (FIB_HASH) --->[*] IP: policy routing[*] IP: equal cost multipath[*] IP: verbose route monitoring[ ] IP: kernel level autoconfiguration<M> IP: tunneling<M> IP: GRE tunnels over IP[*] IP: broadcast GRE over IP[*] IP: multicast routing[*] IP: PIM-SM version 1 support[*] IP: PIM-SM version 2 support[*] IP: TCP syncookie support (disabled per default)<M> IP: AH transformation<M> IP: ESP transformation<M> IP: IPComp transformation<M> IP: IPsec transport mode<M> IP: IPsec tunnel mode<*> IP: IPsec BEET mode-*- Large Receive Offload (ipv4/tcp)<M> INET: socket monitoring interface[*] TCP: advanced congestion control ---> <==內(nèi)部細(xì)項(xiàng)全為模塊<M> The IPv6 protocol ---> <==除必選外,內(nèi)部細(xì)項(xiàng)全為模塊[*] NetLabel subsystem support-*- Security Marking[*] Network packet filtering framework (Netfilter) ---># 這個(gè)就是我們一直講的防火墻部分!里面細(xì)項(xiàng)幾乎全選擇成為模塊!--- Network packet filtering framework (Netfilter)[ ] Network packet filtering debugging <==debug 部分不選![*] Advanced netfilter configuration[*] Bridged IP/ARP packets filteringCore Netfilter Configuration ---><M> IP virtual server support --->IP: Netfilter Configuration --->IPv6: Netfilter Configuration ---><M> Ethernet Bridge tables (ebtables) support ---># 上面的細(xì)項(xiàng),除了必選外其他的都編成模塊喔!原始沒(méi)選的也請(qǐng)選為模塊 ================================================================================<M> Asynchronous Transfer Mode (ATM)<M> Classical IP over ATM[ ] Do NOT send ICMP if no neighbour<M> LAN Emulation (LANE) support< > Multi-Protocol Over ATM (MPOA) support<M> RFC1483/2684 Bridged protocols[ ] Per-VC IP filter kludge<M> 802.1d Ethernet Bridging<M> 802.1Q VLAN Support[ ] GVRP (GARP VLAN Registration Protocol) support<M> DECnet Support<M> ANSI/IEEE 802.2 LLC type 2 Support[ ] IPX: Full internal IPX network (NEW)<M> Appletalk protocol support< > Appletalk interfaces support<M> Phonet protocols family[*] QoS and/or fair queueing ---> <==內(nèi)容同樣全為模塊![ ] Data Center Bridging supportNetwork testing ---> <==保留成模塊默認(rèn)值 ================================================================================ # 底下的則是一些特殊的網(wǎng)絡(luò)設(shè)備,例如紅外線啊、藍(lán)芽啊! # 如果不清楚的話(huà),就使用模塊吧!除非你真的知道不要該項(xiàng)目! [ ] Amateur Radio support ---> < > CAN bus subsystem support ---> < > IrDA (infrared) subsystem support ---> <M> Bluetooth subsystem support ---># 這個(gè)是藍(lán)芽支持,同樣的,里面除了必選之外,其他通通挑選成為模塊! [*] Wireless ---># 這個(gè)則是無(wú)線網(wǎng)絡(luò)設(shè)備,里面保留默認(rèn)值,但可編成模塊的就選模塊 <M> WiMAX Wireless Broadband support ---># 新一代的無(wú)線網(wǎng)絡(luò),也請(qǐng)勾選成為模塊! {M} RF switch subsystem support --->


  • 各項(xiàng)裝置的驅(qū)動(dòng)程序

進(jìn)入『Device Drivers』這個(gè)是所有硬件裝置的驅(qū)動(dòng)程序庫(kù)!哇!光是看到里面這么多內(nèi)容,鳥(niǎo)哥頭都昏了~ 不過(guò),為了你自己的主機(jī)好,建議你還是得要一個(gè)項(xiàng)目一個(gè)項(xiàng)目的去挑選挑選才行~ 這里面的數(shù)據(jù)就與你主機(jī)的硬件有絕對(duì)的關(guān)系了!

在這里面真的很重要,因?yàn)楹芏鄶?shù)據(jù)都與你的硬件有關(guān)。核心推出時(shí)的默認(rèn)值是比較符合一般狀態(tài)的, 所以很多數(shù)據(jù)其實(shí)保留默認(rèn)值就可以編的很不錯(cuò)了!不過(guò),也因?yàn)檩^符合一般狀態(tài), 所以核心額外的編譯進(jìn)來(lái)很多跟你的主機(jī)系統(tǒng)不符合的數(shù)據(jù),例如網(wǎng)絡(luò)卡裝置~ 你可以針對(duì)你的主板與相關(guān)硬件來(lái)進(jìn)行編譯。不過(guò),還是要記得有『未來(lái)擴(kuò)充性』的考量! 之前鳥(niǎo)哥不是談過(guò)嗎,我的網(wǎng)絡(luò)卡由螃蟹卡換成 3Com 時(shí),核心捉不到~ 因?yàn)?..鳥(niǎo)哥并沒(méi)有將 3Com 的網(wǎng)絡(luò)卡編譯成為模塊啊! @_@

Generic Driver Options ---> <==與韌體有關(guān),保留默認(rèn)值即可 <*> Connector - unified userspace <-> kernelspace linker ---># 與使用者/核心層級(jí)的資訊溝通有關(guān),務(wù)必要選擇啊! <M> Memory Technology Device (MTD) support ---># 例如閃存(拇指碟之類(lèi))之支持,通常與嵌入式系統(tǒng)有關(guān)!# 但由於我們也會(huì)用到閃盤(pán),所以里面的數(shù)據(jù)全編為模塊! <M> Parallel port support ---># 平行序列埠的支持,例如早期的 25 針打印機(jī)與 9 針鼠標(biāo)等,細(xì)項(xiàng)全編為模塊! -*- Plug and Play support ---> <==不羅唆!當(dāng)然要選擇這個(gè)項(xiàng)目! [*] Block devices ---> <==區(qū)塊裝置,就是一些儲(chǔ)存媒體!細(xì)項(xiàng)內(nèi)容請(qǐng)全編為模塊 [*] Misc devices ---> <==一些較冷門(mén)的設(shè)備,建議還是全部編為模塊! <*> ATA/ATAPI/MFM/RLL support ---> <==IDE 介面相關(guān)的芯片組!# 這個(gè)其實(shí)與主板的南橋芯片有關(guān)!由於鳥(niǎo)哥的主機(jī)為 ALi 的板子,所以:<*> ALI M15x3 chipset support# 除了可以保留默認(rèn)值之外,你也可以將沒(méi)用到的驅(qū)動(dòng)程序取消選擇。較重要的還有:[ ] Support for SATA (deprecated; conflicts with libata SATA driver)# 這個(gè)一定不能選!因?yàn)?SATA 的模塊是在 SCSI 中!<*> Include IDE/ATAPI CDROM support# IDE 的 CDROM 最好直接編譯進(jìn)核心!# 其余的驅(qū)動(dòng)程序鳥(niǎo)哥幾乎都選擇成為模塊了!沒(méi)用到的芯片也將 * 也改成 M 哩! ================================================================================SCSI device support ---> # 這部份是 SCSI 儲(chǔ)存媒體的驅(qū)動(dòng)程序!請(qǐng)一定要選擇!因?yàn)?#xff1a;# 1. 因?yàn)?U盤(pán) 裝置用的就是模擬 SCSI 啊!# 2. 因?yàn)?SATA 的配置項(xiàng)目就在這里面!<M> RAID Transport Class{M} SCSI device support[*] legacy /proc/scsi/ support*** SCSI support type (disk, tape, CD-ROM) ***<M> SCSI disk support <==幾乎全編為模塊即可!<M> SCSI tape support<M> SCSI OnStream SC-x0 tape support<M> SCSI CDROM support[*] Enable vendor-specific extensions (for SCSI CDROM)<M> SCSI generic support<M> SCSI media changer support<M> SCSI Enclosure Support*** Some SCSI devices (e.g. CD jukebox) support multiple LUNs ***[*] Probe all LUNs on each SCSI device[*] Verbose SCSI error reporting (kernel size +=12K)[*] SCSI logging facility[*] Asynchronous SCSI scanningSCSI Transports ---> <==細(xì)項(xiàng)保留默認(rèn)值[*] SCSI low-level drivers ---> <==主要是磁盤(pán)陣列卡,細(xì)項(xiàng)可全選為模塊<M> SCSI Device Handlers ---> <==細(xì)項(xiàng)全選為模塊< > OSD-Initiator library ================================================================================ <M> Serial ATA (prod) and Parallel ATA (experimental) drivers ---># SATA 之類(lèi)的磁碟驅(qū)動(dòng)程序!這里的模塊與 SCSI 模塊是有相依屬性的關(guān)系!# 底下的細(xì)項(xiàng)全部選擇模塊,尤其是 ALi 的這個(gè)項(xiàng)目,對(duì)鳥(niǎo)哥來(lái)說(shuō),是一定要勾選的<M> ALi PATA support [*] Multiple devices driver support (RAID and LVM) ---># RAID 與 LVM 怎可不選!我們第十五章才講過(guò)這東西!細(xì)項(xiàng)均保留默認(rèn)值即可 [ ] Fusion MPT device support ---># 一種高階的 SCSI 控制器,可選可不選!因?yàn)轼B(niǎo)哥這里不會(huì)用到,所以不選!IEEE 1394 (FireWire) support ---># 這個(gè)就是俗稱(chēng)的『火線』,許多外接式設(shè)備可能會(huì)用這個(gè)介面,因此,# 在此部分內(nèi)的細(xì)項(xiàng)部分,請(qǐng)務(wù)必配置為模塊喔!不要忘了! <M> I2O device support ---> <==細(xì)項(xiàng)亦全選為模塊! [ ] Macintosh device drivers ---> <==我們是 PC ,所以不需支持麥金塔周邊 [*] Network device support ---> <==網(wǎng)絡(luò)設(shè)備的支持是必選!--- Network device support[*] Enable older network device API compatibility<M> Intermediate Functional Block support<M> Dummy net driver support<M> Bonding driver support<M> EQL (serial line load balancing) support<M> Universal TUN/TAP device driver support<M> Virtual ethernet pair device<M> General Instruments Surfboard 1000< > ARCnet support ---> <==較早期的網(wǎng)卡規(guī)格,可不選擇!{M} PHY Device support and infrastructure ---> <==細(xì)項(xiàng)全為模塊[*] Ethernet (10 or 100Mbit) --->[*] Ethernet (1000 Mbit) --->[*] Ethernet (10000 Mbit) ---># 上面三個(gè)以太網(wǎng)絡(luò)網(wǎng)卡支持,不論是否用的到,細(xì)項(xiàng)請(qǐng)全編為模塊來(lái)待命吧!< > Token Ring driver support ---> <==IBM 的 LAN ,可不選!Wireless LAN --->WiMAX Wireless Broadband devices --->U盤(pán) Network Adapters ---># 上面三個(gè)為現(xiàn)階段很熱門(mén)的無(wú)線網(wǎng)絡(luò)設(shè)備,所以全部?jī)?nèi)容的細(xì)項(xiàng)全選擇# 為模塊!免得未來(lái)你的主機(jī)加上新的無(wú)線設(shè)備時(shí)會(huì)找不到驅(qū)動(dòng)程序![ ] Wan interfaces support ---> <==WAN 的廣域網(wǎng)絡(luò)設(shè)備應(yīng)該就不用選擇了![ ] ATM drivers ---> <==高階的 ATM 設(shè)備也不用選吧!<*> Xen network device frontend driver<*> FDDI driver support<M> Digital DEFTA/DEFEA/DEFPA adapter support[ ] Use MMIO instead of PIO (NEW)<M> SysKonnect FDDI PCI support<M> PLIP (parallel port) support<M> PPP (point-to-point protocol) support[*] PPP filtering<M> PPP support for async serial ports<M> PPP support for sync tty ports<M> PPP Deflate compression<M> PPP BSD-Compress compression<M> PPP over ATM# 如果你有 ADSL 撥接的話(huà),呵呵!PPP 的裝置也要選擇上喔!<M> SLIP (serial line) support[*] CSLIP compressed headers[*] Keepalive and linefill[ ] Six bit SLIP encapsulation[*] Fibre Channel driver support ================================================================================ [ ] ISDN support ---> < > Telephony support ---># 這兩個(gè)設(shè)備沒(méi)用到,所以也可以不要選擇!Input device support ---># 這里面含有鼠標(biāo)、鍵盤(pán)、搖桿、觸控版等輸入裝置,盡量全選為模塊吧!Character devices ---># 周邊組件設(shè)備部分,也全選為模塊吧! {M} I2C support ---># 還記得我們?nèi)蓽y(cè)主板的溫度與壓力吧?呵呵!那就是透過(guò)核心的這個(gè) I2C # 的模塊功能!ALi 默認(rèn)沒(méi)有被編入核心,所以請(qǐng)進(jìn)入選擇成模塊! [ ] SPI support ---> [ ] GPIO Support ---> < > Dallas's 1-wire support ---> -*- Power supply class support ---># 絕大部分都沒(méi)有用到的咚咚,所以保留默認(rèn)值,不選擇! <M> Hardware Monitoring support ---># 硬件偵測(cè)器的支持,記得也要挑選,然后內(nèi)容全為模塊! -*- Generic Thermal sysfs driver ---> [*] Watchdog Timer Support ---> <==需搭配 watchdog 服務(wù)# 若搭配 watchdog 服務(wù),可以配置在某些特定狀況下重新啟動(dòng)主機(jī)!Sonics Silicon Backplane --->Multifunction device drivers ---># 鳥(niǎo)哥沒(méi)有這樣的設(shè)備,所以也沒(méi)有選擇! [ ] Voltage and Current Regulator Support --->Multimedia devices ---># 一堆多媒體裝置如影像擷取卡、FM 廣播聲卡。但如果你的 Linux 是桌上型計(jì)算機(jī),# 里面需要挑選成模塊較佳!因?yàn)橐淮蠖讯嗝襟w介面卡!Graphics support ---> <==這就重要了!顯卡選擇!# 嘿嘿!重點(diǎn)之一,顯卡的芯片組~剛剛前面提到的都是主板的對(duì)顯卡的# 匯流排支持 (PCI-E 與 AGP) ,這里則是針對(duì)顯卡芯片!鳥(niǎo)哥的顯卡是 NVidia # 的,所以將他選擇即可!其他的可以編成模塊! <M> Sound card support ---># 聲卡部分,也全部選擇成為模塊啦!反正編成模塊又不用錢(qián)~ [*] HID Devices ---> <==人機(jī)介面裝置,保留默認(rèn)值即可(也可不選) [*] U盤(pán) support ---># 不能不選的 U盤(pán) ,內(nèi)容也全部是模塊即可!尤其底下這三個(gè):<M> EHCI HCD (U盤(pán) 2.0) support<M> OHCI HCD support<M> UHCI HCD (most Intel and VIA) support <M> MMC/SD/SDIO card support ---> <==多媒體介面卡,保留默認(rèn)值 < > Sony MemoryStick card support (EXPERIMENTAL) ---> -*- LED Support ---> [ ] Accessibility support ---> <M> InfiniBand support ---> <==高階網(wǎng)絡(luò)設(shè)備 [*] EDAC - error detection and reporting ---> <M> Real Time Clock ---> <==內(nèi)容選為模塊吧! [ ] DMA Engine support ---> [ ] Auxiliary Display support ---> < > Userspace I/O drivers ---> [*] Xen memory balloon driver [*] Scrub pages before returning them to system <*> Xen filesystem [*] Create compatibility mount point /proc/xen [ ] Staging drivers ---> [ ] X86 Platform Specific Device Drivers ---># 一堆筆記本計(jì)算機(jī)的驅(qū)動(dòng),可以不選啦!

底下則與 Firmware Drivers 有關(guān)喔!基本上,都保留默認(rèn)值就好了!

<M> BIOS Enhanced Disk Drive calls determine boot disk [ ] Sets default behavior for EDD detection to off (NEW) <M> BIOS update support for DELL systems via sysfs <M> Dell Systems Management Base Driver [*] Export DMI identification via sysfs to userspace [*] iSCSI Boot Firmware Table Attributes <M> iSCSI Boot Firmware Table Attributes module


  • 文件系統(tǒng)的支持

文件系統(tǒng)的支持也是很重要的一項(xiàng)核心功能!因?yàn)槿绻恢С帜硞€(gè)文件系統(tǒng),那么我們的 Linux kernel 就無(wú)法認(rèn)識(shí),當(dāng)然也就無(wú)法使用啦!例如 Quota, NTFS 等等特殊的 filesystem 。 這部份也是有夠麻煩~因?yàn)樯婕昂诵氖欠衲軌蛑С帜承┪募到y(tǒng),以及某些操作系統(tǒng)支持的 partition table 項(xiàng)目。在進(jìn)行選擇時(shí),也務(wù)必要特別的小心在意喔! 尤其是我們常常用到的網(wǎng)絡(luò)操作系統(tǒng) (NFS/Samba 等等),以及基礎(chǔ)篇談到的 Quota 等, 你都得要勾選啊!否則是無(wú)法被支持的。比較有趣的是 NTFS 在這一版的核心里面竟然有支持可寫(xiě)入的項(xiàng)目, 著實(shí)讓鳥(niǎo)哥嚇了一跳了!^_^

<*> Second extended fs support [*] Ext2 extended attributes [*] Ext2 POSIX Access Control Lists [*] Ext2 Security Labels [*] Ext2 execute in place support <*> Ext3 journalling file system support <==建議這里直接編進(jìn)核心 [ ] Default to 'data=ordered' in ext3 (legacy option) [*] Ext3 extended attributes [*] Ext3 POSIX Access Control Lists [*] Ext3 Security Labels <M> The Extended 4 (ext4) filesystem [*] Enable ext4dev compatibility [*] Ext4 extended attributes (NEW) [*] Ext4 POSIX Access Control Lists [*] Ext4 Security Labels # 上面是傳統(tǒng)的 EXT2/EXT3 及進(jìn)階的 EXT4 支持!除了 EXT4 外,其他編入核心吧! ================================================================================ [ ] JBD (ext3) debugging support [ ] JBD2 (ext4) debugging support (NEW) <M> Reiserfs support [ ] Enable reiserfs debug mode (NEW) [ ] Stats in /proc/fs/reiserfs (NEW) [ ] ReiserFS extended attributes (NEW) < > JFS filesystem support <M> XFS filesystem support [*] XFS Quota support [*] XFS POSIX ACL support [*] XFS Realtime subvolume support < > OCFS2 file system support [*] Dnotify support [*] Inotify file change notification support [*] Inotify support for userspace [*] Quota support [ ] Report quota messages through netlink interface [*] Print quota warnings to console (OBSOLETE) < > Old quota format support <*> Quota format v2 support <M> Kernel automounter support <M> Kernel automounter version 4 support (also supports v3) < > FUSE (Filesystem in Userspace) support # XFS 以及 Reiserfs 與 Quota 建議也是選擇起來(lái)放啦! ================================================================================Caches --->CD-ROM/DVD Filesystems ---> <==CD內(nèi)的文件格式,默認(rèn)值即可DOS/FAT/NT Filesystems ---> <==有支持 NTFS ,要進(jìn)入挑挑!<M> MSDOS fs support<M> VFAT (Windows-95) fs support(950) Default codepage for FAT <==支持繁體中文(utf8) Default iocharset for FAT <==支持萬(wàn)國(guó)碼<M> NTFS file system support[ ] NTFS debugging support (NEW)[*] NTFS write support ================================================================================Pseudo filesystems ---> <==類(lèi)似 /proc ,保留默認(rèn)值 [*] Miscellaneous filesystems ---> <==其他文件系統(tǒng)的支持,保留默認(rèn)值 [*] Network File Systems ---> <==網(wǎng)絡(luò)文件系統(tǒng)!很重要!也要挑挑!--- Network File Systems<M> NFS client support[*] NFS client support for NFS version 3[*] NFS client support for the NFSv3 ACL protocol extension<M> NFS server support[*] NFS server support for NFS version 3[*] NFS server support for the NFSv3 ACL protocol extension< > SMB file system support (OBSOLETE, please use CIFS)<M> CIFS support (advanced network filesystem, SMBFS successor) # 最重要就這幾項(xiàng),其他保留默認(rèn)值即可! ================================================================================Partition Types ---> <==分割類(lèi)型,也是保持默認(rèn)值即可! -*- Native language support ---> <==選擇默認(rèn)的語(yǔ)系--- Native language support(utf8) Default NLS Option<*> Traditional Chinese charset (utf-8)# 除了上述這兩個(gè)之外,其他的請(qǐng)選擇成為模塊即可!


  • 核心黑客、資訊安全、口令應(yīng)用

再接下來(lái)有個(gè)『Kernel hacking』的項(xiàng)目,那是與核心開(kāi)發(fā)者比較有關(guān)的部分,這部分建議保留默認(rèn)值即可, 應(yīng)該不需要去修改他!除非你想要進(jìn)行核心方面的研究喔。然后底下有個(gè)『 Security Options 』,那是屬於資訊安全方面的配置, 包括 SELinux 這個(gè)細(xì)部權(quán)限強(qiáng)化模塊也在這里編入核心的!這部分可以作一些額外的配置。 另外還有『 Cryptographic API 』這個(gè)口令應(yīng)用程序介面工具選項(xiàng),也是可以保留默認(rèn)值啦! 我們來(lái)看看有什么比較特殊的地方吧!

Security options ---> [*] Enable access key retention support [*] Enable the /proc/keys file by which keys may be viewed [*] Enable different security models [ ] Enable the securityfs filesystem [*] Socket and Networking Security Hooks [*] XFRM (IPSec) Networking Security Hooks [ ] Security hooks for pathname based access control [ ] File POSIX Capabilities [ ] Root Plug Support [*] NSA SELinux Support [*] NSA SELinux boot parameter (1) NSA SELinux boot parameter default value [*] NSA SELinux runtime disable [*] NSA SELinux Development Support [*] NSA SELinux AVC Statistics (1) NSA SELinux checkreqprot default value [ ] NSA SELinux maximum supported policy format version [ ] Simplified Mandatory Access Control Kernel Support [ ] TOMOYO Linux Support [ ] Integrity Measurement Architecture(IMA) # 基本上,這部分保留默認(rèn)值就對(duì)了!你也會(huì)發(fā)現(xiàn) NSA 的數(shù)據(jù)都是直接編進(jìn)核心! ================================================================================ Cryptographic API ---> # 基本上,除了底下這兩個(gè)編譯進(jìn)核心之外,其他的通通選擇成為模塊吧! {*} MD5 digest algorithm {*} SHA1 digest algorithm

在口令應(yīng)用程序介面方面,一般我們使用的帳號(hào)口令登陸利用的就是 MD5 這個(gè)加密機(jī)制,要讓核心有支持才行啊!幾乎所有的項(xiàng)目都給他做成模塊即可! 不過(guò) MD5 與 SHA1 必須要直接由核心支持比較好!


  • 虛擬化與函式庫(kù)

虛擬化是近年來(lái)非常熱門(mén)的一個(gè)議題,因?yàn)橛?jì)算機(jī)的能力太強(qiáng),所以時(shí)常閑置在那邊, 此時(shí),我們可以透過(guò)虛擬化技術(shù)在一部主機(jī)上面同時(shí)啟動(dòng)多個(gè)操作系統(tǒng)來(lái)運(yùn)行,這就是所謂的虛擬化。 Linux 核心已經(jīng)主動(dòng)的納入虛擬化功能喔!而 Linux 認(rèn)可的虛擬化使用的機(jī)制為 KVM (Kernel base Virtual Machine)。 至於常用的核心函式庫(kù)也可以全部編為模塊羅!

[*] Virtualization --->--- Virtualization<M> Kernel-based Virtual Machine (KVM) support<M> KVM for Intel processors support<M> KVM for AMD processors support[ ] KVM trace support (NEW)<M> Virtio balloon driver (EXPERIMENTAL) ================================================================================ Library routines --->{M} CRC-CCITT functions{M} CRC16 functions{M} CRC calculation for the T10 Data Integrity Field{M} CRC ITU-T V.41 functions-*- CRC32 functions<M> CRC7 functions{*} CRC32c (Castagnoli, et al) Cyclic Redundancy-Check

最后,還有底下這兩個(gè)項(xiàng)目,這兩個(gè)項(xiàng)目與核心功能無(wú)關(guān),但是與挑選時(shí)的配置文件有關(guān):

Load an Alternate Configuration File Save an Alternate Configuration File

這兩個(gè)項(xiàng)目分別是儲(chǔ)存剛剛做好的所有項(xiàng)目的配置數(shù)據(jù),另一個(gè)則是將來(lái)自其他人作的選擇給他讀入! 事實(shí)上,剛剛我們所做的配置只要在離開(kāi)時(shí)選擇 SAVE ,那么這些項(xiàng)目?通通會(huì)記錄到目前這個(gè)目錄下的 .config 文件內(nèi)。 而我們也可以使用上面提到的 Save Configuration 這個(gè)項(xiàng)目來(lái)將剛剛做完的配置儲(chǔ)存成另外的文件, 做成這個(gè)文件的好處是,你可以在下次在其他版本的核心作選擇時(shí),直接以 Load 來(lái)將這個(gè)文件的配置項(xiàng)目讀入,這樣可以減少你還要重新挑選一遍的困境啊!

要請(qǐng)你注意的是,上面的數(shù)據(jù)主要是適用在鳥(niǎo)哥的個(gè)人機(jī)器上面的, 目前鳥(niǎo)哥比較習(xí)慣使用原本 distributions 提供的默認(rèn)核心,因?yàn)樗麄円矔?huì)主動(dòng)的進(jìn)行升級(jí), 所以鳥(niǎo)哥就懶的自己重編核心了~ ^_^

此外,因?yàn)轼B(niǎo)哥重視的地方在於『網(wǎng)絡(luò)服務(wù)器』上面,所以里頭的配置少掉了相當(dāng)多的個(gè)人桌上型 Linux 的硬件編譯!所以,如果你想要編譯出一個(gè)適合你的機(jī)器的核心, 那么可能還有相當(dāng)多的地方需要來(lái)修正的!不論如何,請(qǐng)隨時(shí)以 Help 那個(gè)選項(xiàng)來(lái)看一看內(nèi)容吧!反正 Kernel 重編的機(jī)率不大!花多一點(diǎn)時(shí)間重新編譯一次! 然后將該編譯完成的參數(shù)文件儲(chǔ)存下來(lái),未來(lái)就可以直接將該文件叫出來(lái)讀入了! 所以花多一點(diǎn)時(shí)間安裝一次就好!那也是相當(dāng)值得的!


核心的編譯與安裝

將最復(fù)雜的核心功能選擇完畢后,接下來(lái)就是進(jìn)行這些核心、核心模塊的編譯了!而編譯完成后,當(dāng)然就是需要使用嚕~ 那如何使用新核心呢?就得要考慮 grub 這個(gè)玩意兒啦!底下我們就來(lái)處理處理:


編譯核心與核心模塊

核心與核心模塊需要先編譯起來(lái),而編譯的過(guò)程其實(shí)非常簡(jiǎn)單,你可以先使用『 make help 』去查閱一下所有可用編譯參數(shù), 就會(huì)知道有底下這些基本功能:

[root@www linux-2.6.30.3]# make vmlinux <==未經(jīng)壓縮的核心 [root@www linux-2.6.30.3]# make modules <==僅核心模塊 [root@www linux-2.6.30.3]# make bzImage <==經(jīng)壓縮過(guò)的核心(默認(rèn)) [root@www linux-2.6.30.3]# make all <==進(jìn)行上述的三個(gè)動(dòng)作

我們常見(jiàn)的在 /boot/ 底下的核心文件,都是經(jīng)過(guò)壓縮過(guò)的核心文件,因此,上述的動(dòng)作中比較常用的是 modules 與 bzImage 這兩個(gè),其中 bzImage 第三個(gè)字母是英文大寫(xiě)的 I 喔!bzImage 可以制作出壓縮過(guò)后的核心, 也就是一般我們拿來(lái)進(jìn)行系統(tǒng)啟動(dòng)的資訊羅!所以,基本上我們會(huì)進(jìn)行的動(dòng)作是:

[root@www linux-2.6.30.3]# make clean <==先清除緩存檔 [root@www linux-2.6.30.3]# make bzImage <==先編譯核心 [root@www linux-2.6.30.3]# make modules <==再編譯模塊

上述的動(dòng)作會(huì)花費(fèi)非常長(zhǎng)的時(shí)間,編譯的動(dòng)作依據(jù)你選擇的項(xiàng)目以及你主機(jī)硬件的效能而不同。 最后制作出來(lái)的數(shù)據(jù)是被放置在 /usr/src/kernels/linux-2.6.30.3/ 這個(gè)目錄下,還沒(méi)有被放到系統(tǒng)的相關(guān)路徑中喔!在上面的編譯過(guò)程當(dāng)中,如果有發(fā)生任何錯(cuò)誤的話(huà), 很可能是由於核心項(xiàng)目的挑選選擇的不好,可能你需要重新以 make menuconfig 再次的檢查一下你的相關(guān)配置喔! 如果還是無(wú)法成功的話(huà),那么或許將原本的核心數(shù)據(jù)內(nèi)的 .config 文件,復(fù)制到你的核心原始檔目錄下, 然后據(jù)以修改,應(yīng)該就可以順利的編譯出你的核心了。最后注意到,下達(dá)了 make bzImage 后,最終的結(jié)果應(yīng)該會(huì)像這樣:

Root device is (8, 1) Setup is 12696 bytes (padded to 12800 bytes). System is 2207 kB CRC 7701ab0e Kernel: arch/x86/boot/bzImage is ready (#1) [root@www linux-2.6.30.3]# ll arch/x86/boot/bzImage -rw-r--r-- 1 root root 2272432 7月 30 13:35 arch/x86/boot/bzImage

可以發(fā)現(xiàn)你的核心已經(jīng)編譯好而且放置在 /usr/src/kernels/linux-2.6.30.3/arch/x86/boot/bzImage 里面羅~那個(gè)就是我們的核心文件!最重要就是他啦!我們等一下就會(huì)安裝到這個(gè)文件哩! 然后就是編譯模塊的部分羅~ make modules 進(jìn)行完畢后,就等著安裝啦! ^_^


實(shí)際安裝模塊

安裝模塊前有個(gè)地方得要特別強(qiáng)調(diào)喔!我們知道模塊是放置到 /lib/modules/$(uname -r) 目錄下的,那如果同一個(gè)版本的模塊被反覆編譯后來(lái)安裝時(shí),會(huì)不會(huì)產(chǎn)生沖突呢?舉例來(lái)說(shuō),鳥(niǎo)哥這個(gè) 2.6.30.3 的版本第一次編譯完成且安裝妥當(dāng)后,發(fā)現(xiàn)有個(gè)小細(xì)節(jié)想要重新處理,因此又重新編譯過(guò)一次,那兩個(gè)版本一模一樣時(shí), 模塊放置的目錄會(huì)一樣,此時(shí)就會(huì)產(chǎn)生沖突了!如何是好?有兩個(gè)解決方法啦:

  • 先將舊的模塊目錄更名,然后才安裝核心模塊到目標(biāo)目錄去;
  • 在 make menuconfig 時(shí),那個(gè)?General setup?內(nèi)的 Local version 修改成新的名稱(chēng)。

鳥(niǎo)哥建議使用第二個(gè)方式,因?yàn)槿绱艘粊?lái),你的模塊放置的目錄名稱(chēng)就不會(huì)相同,這樣也就能略過(guò)上述的目錄同名問(wèn)題羅! 好,那么如何安裝模塊到正確的目標(biāo)目錄呢?很簡(jiǎn)單,同樣使用 make 的功能即可:

[root@www linux-2.6.30.3]# make modules_install [root@www linux-2.6.30.3]# ll /lib/modules/ drwxr-xr-x 3 root root 4096 7月 30 14:31 2.6.30.3vbird

看到否,最終會(huì)在 /lib/modules 底下創(chuàng)建起你這個(gè)核心的相關(guān)模塊喔!不錯(cuò)吧!模塊這樣就已經(jīng)處理妥當(dāng)羅~ 接下來(lái),就是準(zhǔn)備要進(jìn)行核心的安裝了!哈哈!又跟 grub 有關(guān)羅~


開(kāi)始安裝新核心與多重核心菜單 (grub)

現(xiàn)在我們知道核心文件放置在 /usr/src/kernels/linux-2.6.30.3/arch/x86/boot/bzImage ,但是其實(shí)系統(tǒng)核心理論上都是擺在 /boot 底下,且為 vmlinuz 開(kāi)頭的檔名。 此外,我們也曉得一部主機(jī)是可以做成多重啟動(dòng)系統(tǒng)的!這樣說(shuō),應(yīng)該知道鳥(niǎo)哥想要干嘛了吧? 對(duì)啦!我們將同時(shí)保留舊版的核心,并且新增新版的核心在我們的主機(jī)上面。


  • 移動(dòng)核心到 /boot 且保留舊核心文件

保留舊核心有什么好處呢?最大的好處是可以確保系統(tǒng)能夠順利啟動(dòng)啦!因?yàn)楹诵碾m然被編譯成功了, 但是并不保證我們剛剛挑選的核心項(xiàng)目完全適合於目前這部主機(jī)系統(tǒng), 可能有某些地方我們忘記選擇了,這將導(dǎo)致新核心無(wú)法順利驅(qū)動(dòng)整個(gè)主機(jī)系統(tǒng),更差的情況是, 你的主機(jī)無(wú)法成功啟動(dòng)成功!此時(shí),如果我們保留舊的核心,呵呵!若新核心測(cè)試不通過(guò),就用舊核心來(lái)啟動(dòng)啊!嘿嘿! 保證比較不會(huì)有問(wèn)題嘛!新核心通??梢赃@樣作的:

[root@www ~]# cp /usr/src/kernels/linux-2.6.30.3/arch/x86/boot/bzImage \ > /boot/vmlinuz-2.6.30.3vbird <==實(shí)際核心 [root@www ~]# cp /usr/src/kernels/linux-2.6.30.3/.config \ > /boot/config-2.6.30.3vbird <==建議配置檔也復(fù)制備份


  • 創(chuàng)建相對(duì)應(yīng)的 Initial Ram Disk (initrd)

還記得第二十章談過(guò)的 initrd?這個(gè)玩意兒吧! 由於鳥(niǎo)哥的系統(tǒng)使用 SATA 磁碟,加上剛剛 SATA 磁碟支持的功能并沒(méi)有直接編譯到核心去,所以當(dāng)然要使用 initrd 來(lái)加載才行! 使用如下的方法來(lái)創(chuàng)建 initrd 吧!記得搭配正確的核心版本喔!

[root@www ~]# mkinitrd -v /boot/initrd-2.6.30.3vbird.img 2.6.30.3vbird ....(前面省略).... Adding module ehci-hcd Adding module ohci-hcd Adding module uhci-hcd ....(后面省略)....


  • 編輯啟動(dòng)菜單 (grub)

鳥(niǎo)哥這部測(cè)試機(jī)之前是使用 Xen 的核心來(lái)啟動(dòng)的,但因?yàn)?Xen 核心的制作比較復(fù)雜,本章并沒(méi)有實(shí)作出 Xen 虛擬機(jī)器的核心。 底下鳥(niǎo)哥使用的是剛剛編譯成功的核心來(lái)進(jìn)行啟動(dòng)菜單的配置,你會(huì)看到的配置檔與你的環(huán)境可能會(huì)有不一樣喔! 那就來(lái)看看吧!

[root@www ~]# vim /boot/grub/menu.lst default=0 timeout=10 splashimage=(hd0,0)/boot/grub/splash.xpm.gz #hiddenmenu title CentOS (2.6.18-128.2.1.el5xen)root (hd0,0)kernel /boot/xen.gz-2.6.18-128.2.1.el5module /boot/vmlinuz-2.6.18-128.2.1.el5xen ro root=LABEL=/ rhgb quietmodule /boot/initrd-2.6.18-128.2.1.el5xen.img title CentOS testing kernel from vbirdroot (hd0,0)kernel /boot/vmlinuz-2.6.30.3vbird ro root=LABEL=/ rhgbinitrd /boot/initrd-2.6.30.3vbird.img

新增上述的特殊字體到你的配置檔當(dāng)中。另外,你會(huì)發(fā)現(xiàn)我上頭的 default 并沒(méi)有修改到最新的那個(gè)核心的菜單上, 因?yàn)槲冶仨氁獪y(cè)試一下新核心能否順利啟動(dòng)!如果順利啟動(dòng)且運(yùn)行沒(méi)有問(wèn)題后,那么才來(lái)修訂這個(gè) default 的值吧!


  • 重新以新核心啟動(dòng)、測(cè)試、修改

如果上述的動(dòng)作都成功后,接下來(lái)就是重新啟動(dòng)并選擇新核心來(lái)啟動(dòng)系統(tǒng)啦!如果系統(tǒng)順利啟動(dòng)之后,你使用 uname -a 會(huì)出現(xiàn)類(lèi)似底下的數(shù)據(jù):

[root@www ~]# uname -a Linux www.vbird.tsai 2.6.30.3vbird #1 SMP Thu Jul 30 13:34:31 CST 2009 x86_64 x86_64 x86_64 GNU/Linux

包括核心版本與支持的硬件平臺(tái)都是 OK 的!嘿嘿!那你所編譯的核心就是差不多成功的啦! 如果運(yùn)行一陣子后,你的系統(tǒng)還是穩(wěn)定的情況下,那就能夠?qū)?default 值使用這個(gè)新的核心來(lái)作為默認(rèn)啟動(dòng)羅! 這就是核心編譯!那你也可以自己處理嵌入式系統(tǒng)的核心編譯羅! ^_^


額外(單一)核心模塊編譯

我們現(xiàn)在知道核心所支持的功能當(dāng)中,有直接編譯到核心內(nèi)部的,也有使用外掛模塊的,外掛模塊可以簡(jiǎn)單的想成就是驅(qū)動(dòng)程序?啦!那么也知道這些核心模塊依據(jù)不同的版本,被分別放置到 /lib/modules/$(uname -r)/kernel/ 目錄中,各個(gè)硬件的驅(qū)動(dòng)程序則是放置到 /lib/modules/$(uname -r)/kernel/drivers/ 當(dāng)中!換個(gè)角度再來(lái)思考一下,如果剛剛我自己編譯的數(shù)據(jù)中,有些驅(qū)動(dòng)程序忘記編譯成為模塊了,那是否需要重新進(jìn)行上述的所有動(dòng)作? 又如果我想要使用硬件廠商釋出的新驅(qū)動(dòng)程序,那該如何是好?


編譯前注意事項(xiàng)

由於我們的核心原本就有提供很多的核心工具給硬件開(kāi)發(fā)商來(lái)使用, 而硬件開(kāi)發(fā)商也需要針對(duì)核心所提供的功能來(lái)設(shè)計(jì)他們的驅(qū)動(dòng)程序模塊,因此, 我們?nèi)绻胍孕惺褂糜布_(kāi)發(fā)商所提供的模塊來(lái)進(jìn)行編譯時(shí),就需要使用到核心所提供的原始檔當(dāng)中, 所謂的標(biāo)頭文件 (header include file) 來(lái)取得驅(qū)動(dòng)模塊所需要的一些函式庫(kù)或標(biāo)頭的定義啦! 也因此我們常常會(huì)發(fā)現(xiàn)到,如果想要自行編譯核心模塊時(shí),就得要擁有核心原始碼嘛!

那核心原始碼我們知道他是可能放置在 /usr/src/ 底下,早期的核心原始碼被要求一定要放置到 /usr/src/linux/ 目錄下,不過(guò),如果你有多個(gè)核心在一個(gè) Linux 系統(tǒng)當(dāng)中,而且使用的原始碼并不相同時(shí), 呵呵~問(wèn)題可就大了!所以,在 2.6 版以后,核心使用比較有趣的方法來(lái)設(shè)計(jì)他的原始碼放置目錄, 那就是以 /lib/modules/$(uname -r)/build 及 /lib/modules/$(uname -r)/source 這兩個(gè)連結(jié)檔來(lái)指向正確的核心原始碼放置目錄。如果以我們剛剛由 kernel 2.6.30.3 創(chuàng)建的核心模塊來(lái)說(shuō), 那么他的核心模塊目錄底下有什么咚咚?

[root@www ~]# ll -h /lib/modules/2.6.30.3vbird/ lrwxrwxrwx 1 root root 31 7月 30 14:29 build -> /usr/src/kernels/linux-2.6.30.3 drwxr-xr-x 10 root root 4.0K 7月 30 14:30 kernel -rw-r--r-- 1 root root 337K 7月 30 14:31 modules.alias -rw-r--r-- 1 root root 69 7月 30 14:31 modules.ccwmap -rw-r--r-- 1 root root 224K 7月 30 14:31 modules.dep ....(中間省略).... lrwxrwxrwx 1 root root 31 7月 30 14:29 source -> /usr/src/kernels/linux-2.6.30.3

比較有趣的除了那兩個(gè)連結(jié)檔之外,還有那個(gè) modules.dep 文件也挺有趣的, 那個(gè)文件是記錄了核心模塊的相依屬性的地方,依據(jù)該文件,我們可以簡(jiǎn)單的使用 modprobe 這個(gè)命令來(lái)加載模塊呢!至於核心原始碼提供的標(biāo)頭檔,在上面的案例當(dāng)中, 則是放置到 /usr/src/kernels/linux-2.6.30.3/include/ 目錄中,當(dāng)然就是藉由 build/source 這兩個(gè)連結(jié)文件來(lái)取得目錄所在的啦!^_^

由於核心模塊的編譯其實(shí)與核心原本的原始碼有點(diǎn)關(guān)系的,因此如果你需要重新編譯模塊時(shí), 那除了 make, gcc 等主要的編譯軟件工具外,你還需要的就是 kernel-devel 這個(gè)軟件!記得一定要安裝喔!而如果你想要在默認(rèn)的核心底下新增模塊的話(huà),那么就得要找到 kernel 的 SRPM 文件了! 將該文件給他安裝,并且取得 source code 后,才能夠順利的編譯喔!


單一模塊編譯

想像兩個(gè)情況:

  • 如果我的默認(rèn)核心忘記加入某個(gè)功能,而且該功能可以編譯成為模塊,不過(guò), 默認(rèn)核心卻也沒(méi)有將該項(xiàng)功能編譯成為模塊,害我不能使用時(shí),該如何是好?

  • 如果 Linux 核心原始碼并沒(méi)有某個(gè)硬件的驅(qū)動(dòng)程序 (module) ,但是開(kāi)發(fā)該硬件的廠商有提供給 Linux 使用的驅(qū)動(dòng)程序原始碼,那么我又該如何將該項(xiàng)功能編進(jìn)核心模塊呢?

很有趣對(duì)吧!不過(guò),在這樣的情況下其實(shí)沒(méi)有什么好說(shuō)的,反正就是 『去取得原始碼后,重新編譯成為系統(tǒng)可以加載的模塊』啊!很簡(jiǎn)單,對(duì)吧!^_^! 但是,上面那兩種情況的模塊編譯行為是不太一樣的,不過(guò),都是需要 make, gcc 以及核心所提供的 include 標(biāo)頭檔與函式庫(kù)等等。


  • 硬件開(kāi)發(fā)商提供的額外模塊

很多時(shí)候,可能由於核心默認(rèn)的核心驅(qū)動(dòng)模塊所提供的功能你不滿(mǎn)意,或者是硬件開(kāi)發(fā)商所提供的核心模塊具有更強(qiáng)大的功能, 又或者該硬件是新的,所以默認(rèn)的核心并沒(méi)有該硬件的驅(qū)動(dòng)模塊時(shí),那你只好自行由硬件開(kāi)發(fā)商處取得驅(qū)動(dòng)模塊, 然后自行編譯羅!

如果你的硬件開(kāi)發(fā)商有提供驅(qū)動(dòng)程序的話(huà),那么真的很好解決,直接下載該原始碼,重新編譯, 將他放置到核心模塊該放置的地方后就能夠使用了!舉個(gè)例子來(lái)說(shuō),為了省電,鳥(niǎo)哥在 2009 年初買(mǎi)了整合型主板來(lái)架設(shè)家用的服務(wù)器,沒(méi)想到 CentOS 5.1 以前的版本對(duì)鳥(niǎo)哥新買(mǎi)的主板內(nèi)建網(wǎng)卡支持度不足, 使用的網(wǎng)卡驅(qū)動(dòng)程序 r8169 有問(wèn)題!搜尋了 google 才發(fā)現(xiàn)大家都有這個(gè)問(wèn)題。解決方法就是到 Realtek 官網(wǎng)下載網(wǎng)卡驅(qū)動(dòng)程序來(lái)編譯即可。

  • Realtek 的 r8168 網(wǎng)卡驅(qū)動(dòng)程序:http://www.realtek.com.tw/downloads/
  • 選擇『Communications Network ICs』-->『Network Interface Controlllers』--> 『10/100/1000M Gigabit Ethernet』--> 『PCI Express』--> 『Software』就能夠下載了!

你可以利用各種方法將他下載后,假設(shè)這個(gè)文件放置到 /root ,那么直接將他解壓縮吧! 之后就可以讀一讀 INSTALL/README ,然后找一下 Makefile ,就能夠編譯了。整體流程有點(diǎn)像這樣:

# 1. 將文件解壓縮: [root@www ~]# cd /usr/local/src [root@www src]# tar -jxvf /root/r8168-8.013.00.tar.bz2 [root@www src]# cd r8168-8.013.00/# 2. 開(kāi)始進(jìn)行編譯與安裝: [root@www r8168-8.013.00]# vi readme <==注意查一下該文件內(nèi)容 [root@www r8168-8.013.00]# make clean modules [root@www r8168-8.013.00]# ll src/*.ko <==創(chuàng)建底下的模塊檔! -rw-r--r-- 1 root root 112216 7月 31 01:11 src/r8168.ko [root@www r8168-8.013.00]# make install install -m 744 -c r8168.ko /lib/modules/2.6.30.3vbird/kernel/drivers/net/ # 重點(diǎn)在上面這行!會(huì)發(fā)現(xiàn)模塊已經(jīng)被移動(dòng)到核心模塊目錄!4. 升級(jí)模塊相依屬性! [root@www r8168-8.013.00]# depmod -a

有趣吧!透過(guò)這樣的動(dòng)作,我們就可以輕易的將模塊編譯起來(lái),并且還可以將他直接放置到核心模塊目錄中, 同時(shí)以 depmod 將模塊創(chuàng)建相關(guān)性,未來(lái)就能夠利用 modprobe 來(lái)直接取用啦! 但是需要提醒你的是,當(dāng)自行編譯模塊時(shí), 若你的核心有升級(jí) (例如利用自動(dòng)升級(jí)機(jī)制進(jìn)行線上升級(jí)) 時(shí),則你必須要重新編譯該模塊一次, 重復(fù)上面的步驟才行!因?yàn)檫@個(gè)模塊僅針對(duì)目前的核心來(lái)編譯的啊!對(duì)吧!


  • 利用舊有的核心原始碼進(jìn)行編譯

如果你后來(lái)發(fā)現(xiàn)忘記加入某個(gè)模塊功能了,那該如何是好?其實(shí)如果僅是重新編譯模塊的話(huà), 那么整個(gè)過(guò)程就會(huì)變的非常簡(jiǎn)單!我們先到目前的核心原始碼所在目錄下達(dá) make menuconfig , 然后將 NTFS 的選項(xiàng)配置成為模塊,之后直接下達(dá):

make fs/ntfs/

那么 ntfs 的模塊 (ntfs.ko) 就會(huì)自動(dòng)的被編譯出來(lái)了! 然后將該模塊復(fù)制到 /lib/modules/2.6.30.3vbird/kernel/fs/ntsf/ 目錄下, 再運(yùn)行 depmod -a ,呵呵~就可以在原來(lái)的核心底下新增某個(gè)想要加入的模塊功能羅~ ^_^


核心模塊管理

核心與核心模塊是分不開(kāi)的,至於驅(qū)動(dòng)程序模塊在編譯的時(shí)候,更與核心的原始碼功能分不開(kāi)~ 因此,你必須要先了解到:核心、核心模塊、驅(qū)動(dòng)程序模塊、核心原始碼與標(biāo)頭文件的相關(guān)性, 然后才有辦法了解到為何編譯驅(qū)動(dòng)程序的時(shí)候老是需要找到核心的原始碼才能夠順利編譯! 然后也才會(huì)知道,為何當(dāng)核心升級(jí)之后,自己之前所編譯的核心模塊會(huì)失效~

此外,與核心模塊有相關(guān)的,還有那個(gè)很常被使用的 modprobe 命令, 以及啟動(dòng)的時(shí)候會(huì)讀取到的模塊定義數(shù)據(jù)文件 /etc/modprobe.conf , 這些數(shù)據(jù)你也必須要了解才行~相關(guān)的命令說(shuō)明我們已經(jīng)在第二十章內(nèi)談過(guò)了, 你應(yīng)該要自行前往了解喔! ^_^


重點(diǎn)回顧
  • 其實(shí)核心就是系統(tǒng)上面的一個(gè)文件而已,這個(gè)文件包含了驅(qū)動(dòng)主機(jī)各項(xiàng)硬件的偵測(cè)程序與驅(qū)動(dòng)模塊;
  • 上述的核心模塊放置於:/lib/modules/$(uname -r)/kernel/
  • 『驅(qū)動(dòng)程序開(kāi)發(fā)』的工作上面來(lái)說(shuō),應(yīng)該是屬於硬件發(fā)展廠商的問(wèn)題
  • 一般的使用者,由於系統(tǒng)已經(jīng)將核心編譯的相當(dāng)?shù)倪m合一般使用者使用了,因此一般入門(mén)的使用者,基本上,不太需要編譯核心
  • 編譯核心的一般目的:新功能的需求、原本的核心太過(guò)臃腫、與硬件搭配的穩(wěn)定性、其他需求(如嵌入式系統(tǒng))
  • 編譯核心前,最好先了解到您主機(jī)的硬件,以及主機(jī)的用途,才能選擇好核心功能;
  • 編譯前若想要保持核心原始碼的干凈,可使用 make mrproper 來(lái)清除緩存檔與配置檔;
  • 挑選核心功能與模塊可用 make 配合:menuconfig, oldconfig, xconfig, gconfig 等等
  • 核心功能挑選完畢后,一般常見(jiàn)的編譯過(guò)程為:make bzImage, make modules
  • 模塊編譯成功后的安裝方式為: make modules_install
  • 核心的安裝過(guò)程中,需要移動(dòng) bzImage 文件、創(chuàng)建 initrd 文件、編輯 /boot/grub/menu.lst 等動(dòng)作;
  • 我們可以自行由硬件開(kāi)發(fā)商之官網(wǎng)下載驅(qū)動(dòng)程序來(lái)自行編譯核心模塊!

本章習(xí)題
( 要看答案請(qǐng)將鼠標(biāo)移動(dòng)到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
  • 簡(jiǎn)單說(shuō)明核心編譯的步驟為何?
  • 先下載核心原始碼,可以從 http://www.kernel.org 或者是 distributions 的 SRPM 來(lái)著手;
  • 以下以 Tarball 來(lái)處理,解開(kāi)原始碼到 /usr/src/kernels 目錄下;
  • 先進(jìn)行舊數(shù)據(jù)刪除的動(dòng)作:『make mrproper』;
  • 開(kāi)始挑選核心功能,可以利用『make menuconfig』、『make oldconfig』、『make gconfig』等等;
  • 清除過(guò)去的中間緩存檔數(shù)據(jù):『make clean』
  • 開(kāi)始核心文件與核心模塊的編譯:『make bzImage』、『make modules』
  • 開(kāi)始核心模塊的安裝:『make modules_install』
  • 開(kāi)始核心文件的安裝,可以使用的方式有:『make install』或者是透過(guò)手動(dòng)的方式復(fù)制核心文件到 /boot/grub 當(dāng)中;
  • 創(chuàng)建 initrd 文件;
  • 修改 /boot/grub/menu.lst 文件;
  • 如果你利用新編譯的核心來(lái)操作系統(tǒng),發(fā)現(xiàn)系統(tǒng)并不穩(wěn)定,你想要移除這個(gè)自行編譯的核心該如何處理? 首先,可以將原始碼刪除:rm -rf /usr/src/kernels/linux-2.6.30
    再者,刪除掉核心模塊的目錄: rm -rf /lib/modules/2.6.30
    最后刪除掉 /boot/ 內(nèi)的核心文件與 initrd 文件,以及 /boot/grub/menu.lst 內(nèi)的 title 配置即可。

參考數(shù)據(jù)與延伸閱讀
  • 注1:透過(guò)在 /usr/src/kernels/linux-2.6.30.3 底下的 README 以及『 make help 』可以得到相當(dāng)多的解釋
  • 核心編譯的功能:可以用來(lái)測(cè)試 CPU 效能喔!因?yàn)?compile 非常耗系統(tǒng)資源!
  • http://lxr.xensource.com/lxr/source/README?a=x86_64

總結(jié)

以上是生活随笔為你收集整理的第二十六章、Linux 核心编译与管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

色婷婷激情 | 99精品欧美一区二区三区黑人哦 | 国产福利久久 | 美女视频a美女大全免费下载蜜臀 | 国产精品欧美日韩在线观看 | 欧美伦理一区 | 欧美色精品天天在线观看视频 | 日韩a在线播放 | 国产国语在线 | 国产一区二区日本 | 毛片3| 狠狠网亚洲精品 | 欧美一区二区伦理片 | 日本h视频在线观看 | 激情婷婷欧美 | 人人爱爱 | 国产精品综合久久久 | 久久综合五月天婷婷伊人 | 欧美日韩亚洲在线观看 | 国产无套精品久久久久久 | 日韩一区二区三区免费视频 | 天天干天天干天天干 | 色噜噜在线观看 | 91九色porny蝌蚪视频 | 久久久久久久久久久国产精品 | av成人动漫在线观看 | 日韩高清在线一区二区 | 99中文字幕 | 色亚洲激情 | 久久国产精品一国产精品 | 久久精品三 | 日韩欧美一区二区三区免费观看 | 天天射天天操天天干 | 国产午夜三级一二三区 | 国产精品福利无圣光在线一区 | 久久精品视频中文字幕 | 中文字幕 国产专区 | 国内精品视频一区二区三区八戒 | av免费电影网站 | 91系列在线 | 亚洲日日夜夜 | 久热电影 | 中国美女一级看片 | 在线观看免费视频你懂的 | 欧美日韩精品网站 | 亚洲男男gⅴgay双龙 | 在线小视频国产 | 久久久黄视频 | 午夜在线看片 | 婷婷六月色 | 69av网| 日韩美女久久 | 国产中文字幕av | 天天天天爽 | 色国产精品一区在线观看 | 国产精品久久久久久久久久久久冷 | 国产一级做a | 国产91精品高清一区二区三区 | 又黄又刺激又爽的视频 | 蜜臀一区二区三区精品免费视频 | 91精品黄色 | 国内精品在线看 | 亚洲一区视频在线播放 | 91激情视频在线 | 日本久久中文 | 婷婷网站天天婷婷网站 | 激情欧美日韩一区二区 | 久久永久免费 | 黄色网大全 | 成人网在线免费视频 | 人人狠 | 成人久久18免费网站 | 欧美精品久久久久久久久久白贞 | 麻花豆传媒mv在线观看 | 久久人人爽人人人人片 | 精品夜夜嗨av一区二区三区 | 久久国产精品视频免费看 | 久操视频在线观看 | 久久免费成人精品视频 | 欧美一级裸体视频 | 操处女逼| 精品国产自在精品国产精野外直播 | 三级在线视频观看 | 久久久免费视频播放 | 免费亚洲黄色 | 深爱激情婷婷网 | 成人91视频| 毛片二区| 99热精品视| 99操视频| 亚洲动漫在线观看 | 日韩在线一二三区 | 中文在线a在线 | 国产免费久久精品 | 亚洲精品乱码久久久久 | 九色视频网站 | 日韩欧美在线国产 | 91av在线免费观看 | 婷婷伊人综合亚洲综合网 | 国产精品爽爽爽 | 91精品国产91久久久久福利 | 最近高清中文在线字幕在线观看 | 国产免费亚洲高清 | 欧美成人h版电影 | 国产在线高清 | 黄色影院在线免费观看 | 欧美激情精品久久久久 | 一区二区三区免费在线观看 | 国产欧美精品一区二区三区 | 欧美日韩在线观看视频 | 色九九影院 | 99精品视频一区二区 | 色姑娘综合网 | 中文字幕精品一区二区三区电影 | 五月婷婷.com | 天堂网一区二区三区 | 精品在线观看一区二区 | 精品国产诱惑 | 亚洲欧美日韩在线看 | 午夜精品久久久久久 | 日本精品视频在线播放 | 中文字幕在线网址 | 国产精品综合在线 | 少妇bbb好爽 | 亚洲免费精品一区二区 | 五月婷婷激情综合网 | 99精品欧美一区二区三区 | 九九久久电影 | 国产精品免费久久久久 | 日本中文字幕在线播放 | av黄色在线观看 | 国产精品观看在线亚洲人成网 | 大型av综合网站 | 日韩在线免费观看视频 | 欧美日韩另类在线 | 在线免费观看麻豆 | 免费亚洲黄色 | 福利一区视频 | 91黄视频在线 | 精品国产一区二区三区久久久蜜臀 | av动图| 久久久电影 | 国产午夜精品一区二区三区嫩草 | 国产99精品 | 香蕉网在线播放 | 色婷婷色| 日本黄色免费观看 | 日韩视频免费在线观看 | 欧美一级大片在线观看 | 在线观看黄色小视频 | 国产中文字幕一区二区 | 久久丁香网| www.色五月.com| 丁香 婷婷 激情 | 人成在线免费视频 | 天天摸天天操天天舔 | 天天人人 | 欧美激情精品久久久久久免费 | 国产精品精品久久久久久 | 色大片免费看 | 久久艹久久 | 亚洲电影图片小说 | 99视频在线观看一区三区 | 久久综合导航 | 欧美激情精品久久久久久免费 | 免费三级骚 | 婷婷久久一区二区三区 | 久久综合婷婷国产二区高清 | 免费av小说 | 国产成人一区二区三区影院在线 | 久久精品激情 | 久久天天躁夜夜躁狠狠躁2022 | 久久久久亚洲精品中文字幕 | 四虎国产永久在线精品 | 国产资源网 | 免费av在线 | 国产一级电影免费观看 | av线上看 | 国产原厂视频在线观看 | 视频一区视频二区在线观看 | 久草精品国产 | 国产最新在线视频 | 麻豆系列在线观看 | 成片视频免费观看 | 国产区在线 | 欧美一级性生活片 | 福利视频导航网址 | 九色视频网址 | 99精品视频在线播放免费 | 波多野结衣电影久久 | 综合激情网| 日本性久久 | 日韩视频中文字幕在线观看 | 免费高清在线观看成人 | 亚洲成人黄色在线 | 国产午夜三级一区二区三桃花影视 | 在线国产视频 | 久草在线资源免费 | 日韩精品中文字幕一区二区 | 欧美日韩国产伦理 | 国产精品久久久久久久电影 | a亚洲视频 | 久久人人干 | 四虎永久网站 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产午夜三级一区二区三 | 黄色电影网站在线观看 | 亚洲一级黄色 | 日韩免费在线一区 | 在线黄色免费 | 亚洲成人二区 | 天天伊人网 | 亚洲精品小区久久久久久 | 五月开心婷婷 | 中文字幕一区二区三区乱码在线 | 欧美色噜噜噜 | 在线观看一区 | 91桃色国产在线播放 | 成在线播放 | 91精品国产99久久久久 | 精品一区二区三区在线播放 | 国产精品theporn | 精品国产乱码久久久久久1区二区 | 中文字幕久久精品 | 亚洲狠狠操| 日日干网址 | 国产亚洲一级高清 | 欧美日韩国产色综合一二三四 | 精品国产乱码久久久久久1区二区 | 久久天天躁狠狠躁亚洲综合公司 | 久久国产精品精品国产色婷婷 | 色就是色综合 | 中文欧美字幕免费 | 日本二区三区在线 | 亚洲电影一区二区 | 欧美色婷婷 | 91免费版在线 | www五月天com | 国产精品成人久久久 | 久久久影院一区二区三区 | 91精品久久久久久粉嫩 | av片一区| 日韩欧美在线一区二区 | 国产精品一区二区精品视频免费看 | 日韩精品不卡 | 91精品国产91久久久久福利 | 999在线精品 | 五月婷婷黄色 | 婷婷综合久久 | 97**国产露脸精品国产 | 中文字幕一区二区三区久久 | 国产在线观看91 | 欧美成天堂网地址 | 黄网站色视频免费观看 | 久久精品中文 | 91成人精品一区在线播放 | 中文字幕日韩在线播放 | 在线日韩av | 最近日韩中文字幕中文 | 91九色丨porny丨丰满6 | 亚洲国产精品久久久久久 | 精品亚洲va在线va天堂资源站 | 亚洲精品1234区 | 亚洲精品国产精品国自产观看浪潮 | 国产精品日韩欧美 | 亚洲精品一区二区三区新线路 | 日日操天天操夜夜操 | 视频在线在亚洲 | 一区二区视频欧美 | 国产精品色在线 | 日韩免费在线一区 | 国产亲近乱来精品 | 天天操网址 | 国产成人精品一区二区三区免费 | 国产精品一区二区美女视频免费看 | 97超碰在线播放 | 久久国产影视 | 黄色三级免费观看 | 中文字幕视频一区二区 | 国产色妞影院wwwxxx | 亚洲日本在线视频观看 | 东方av在线免费观看 | 国产成人精品一区二区三区福利 | 91视频在线国产 | 久艹在线免费观看 | 青青草国产精品视频 | 免费网站黄| 国产99精品| 天天干,天天射,天天操,天天摸 | 精品国产片 | 国产精品久久久久av福利动漫 | 成人视屏免费看 | 欧美日韩国产一区二 | 国产视频精品久久 | 国产日韩精品久久 | 日韩视 | 青春草国产视频 | 99精品一区二区 | 99精品免费在线 | 不卡av免费在线观看 | 亚洲最新视频在线 | 久草线 | 日本精品午夜 | 精品久久中文 | 亚洲美女在线国产 | 特级毛片网站 | 999久久久免费精品国产 | 日日添夜夜添 | 97夜夜澡人人双人人人喊 | 中文字幕一区在线观看视频 | 欧美精品亚洲精品日韩精品 | 久久免费视频这里只有精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲欧洲成人精品av97 | 99re热精品视频 | 免费在线色视频 | 国产精品自产拍在线观看桃花 | 91av观看| 999视频网站| 久久免费精彩视频 | 久久久久久久18 | 国产在线精品一区二区 | 免费看黄色大全 | 99久久爱| 国产69久久久欧美一级 | a在线观看国产 | 81国产精品久久久久久久久久 | 久久视频这里有久久精品视频11 | 91视频在线播放视频 | 国产精品第二十页 | 热99在线视频 | 波多野结衣综合网 | 99久久精品免费 | 精品久久久久久国产偷窥 | 超碰资源在线 | 欧美日韩精品影院 | 337p日本大胆噜噜噜噜 | 狠狠操在线 | 99午夜| 国产91在线免费视频 | 久久伦理| 日韩黄在线观看 | 97超碰人人爱 | 91精品91| 激情综合色图 | 九九综合久久 | 999成人 | 国产免费一区二区三区最新 | 中文资源在线观看 | 国产成人香蕉 | 偷拍视频一区 | 黄色看片 | 亚洲黄色小说网址 | 国产精品高潮呻吟久久av无 | 九九久久久久久久久激情 | 在线观看久久 | 国产精品毛片久久久久久 | 久久精品国产亚洲精品 | 亚洲精品小区久久久久久 | 国产精品美女久久久久久久 | 欧美一级性生活 | 精品视频资源站 | 日韩欧美国产激情在线播放 | 高清国产在线一区 | 97视频在线观看播放 | 亚洲六月丁香色婷婷综合久久 | 国产精品久久久久久婷婷天堂 | 黄污网站在线观看 | 九九热视频在线播放 | 精品国产乱码一区二区三区在线 | 最近最新中文字幕 | 国产精品久久久久影院日本 | www.黄色片网站 | 色婷婷丁香 | 嫩草av在线 | 黄网站色视频 | 综合色综合 | 人人爱人人做人人爽 | 国产欧美精品一区二区三区 | 天天射天 | 天天综合色天天综合 | 久久国内精品视频 | 黄色av三级在线 | 91精品久久香蕉国产线看观看 | 天天射综合 | 97在线公开视频 | 97超碰在线久草超碰在线观看 | 国产精品国产三级国产 | 国产精品每日更新 | 97在线精品 | 免费观看mv大片高清 | 国内精品久久影院 | 五月婷婷香蕉 | 亚洲国产操 | 欧美性性网 | av线上免费观看 | 九色精品免费永久在线 | 亚洲国产97在线精品一区 | 国产精品一区一区三区 | 麻豆视频一区二区 | 精品久久久99 | 1000部国产精品成人观看 | 欧美性极品xxxx做受 | 国产精品二区三区 | 91在线网址 | 在线免费观看黄色大片 | 午夜三级毛片 | 国产精品久久久久三级 | 精品国产aⅴ一区二区三区 在线直播av | 欧美三级高清 | 成人亚洲精品国产www | 一级黄色av | 久久久久久久久久久久久国产精品 | 欧美精品久久久久a | 69av免费视频 | 久久国产精品精品国产色婷婷 | 九九热免费在线观看 | 久草在线视频资源 | 国产在线一区二区三区播放 | 六月色丁香 | www.国产在线视频 | 天天操天天射天天插 | 国产va饥渴难耐女保洁员在线观看 | 成人午夜片av在线看 | 色综合久久五月 | 久久艹影院 | 又黄又爽的视频在线观看网站 | 久久手机免费视频 | 国产精品久久久久久久久久ktv | 日韩videos高潮hd | 欧美电影在线观看 | 91麻豆精品国产自产在线游戏 | 伊人春色电影网 | 免费观看完整版无人区 | 二区三区中文字幕 | 国产亚洲精品女人久久久久久 | 久久调教视频 | 色婷婷国产精品 | 国产理论片在线观看 | 偷拍福利视频一区二区三区 | 日韩成人在线一区二区 | 成人中文字幕+乱码+中文字幕 | 欧美一级性生活视频 | 亚洲精品456在线播放第一页 | 国产精品毛片完整版 | 91网址在线看| 欧美激情另类 | 国产福利电影网址 | 91 中文字幕 | 色网址99| 久久国产女人 | 狠狠色丁香婷综合久久 | 在线观看免费黄色 | 亚洲五月婷婷 | 成年人在线免费看视频 | 日韩av影视在线观看 | 久久国产精品精品国产色婷婷 | 成人a视频片观看免费 | 成人在线免费小视频 | 久久 一区 | 操操操日日日干干干 | 中文字幕久久精品一区 | 婷婷久久精品 | 一区二区三区久久 | www.色五月 | www.久久久久 | 亚洲片在线观看 | 五月婷婷中文 | 亚洲一区久久 | 亚洲欧洲精品在线 | www.五月激情.com | 欧美特一级片 | 国产成人精品三级 | 久久精品国亚洲 | 中文字幕在线观看网址 | 精品一二区 | 51久久成人国产精品麻豆 | 亚洲 欧美 精品 | 制服丝袜一区二区 | 日韩精品一区二区三区中文字幕 | 日韩欧美专区 | 91成人在线免费观看 | 久久久色 | 性日韩欧美在线视频 | 三级性生活视频 | 国产精品久久综合 | 日本中文字幕电影在线免费观看 | 中文字幕 国产精品 | 午夜影院在线观看18 | 免费成人在线观看 | 日韩在线第一区 | 国产99久久久久久免费看 | 中文字幕在线免费97 | 在线观看mv的中文字幕网站 | 国产精品视频最多的网站 | 久久精品123 | 久久成人在线 | 人人揉人人揉人人揉人人揉97 | 日韩精品91偷拍在线观看 | 久草久热| 日本激情视频中文字幕 | 国产成人777777| a级国产毛片 | 欧美日韩性 | 成人一区二区三区在线观看 | 国内精品亚洲 | 欧美另类一二三四区 | 亚洲永久精品国产 | av在线com| 久久视精品 | 在线免费观看视频一区 | 欧美孕交vivoestv另类 | 亚洲成人精品久久 | 欧美成人精品三级在线观看播放 | 国产九色91 | 美女性爽视频国产免费app | 久久久久一区 | 综合亚洲视频 | 99综合影院在线 | 美女一级毛片视频 | 九九精品久久 | 激情丁香5月 | 国产精品视频免费在线观看 | 日韩中出在线 | 国产成人在线免费观看 | 五月天久久久久 | 激情五月播播久久久精品 | 久久不卡免费视频 | 国产精品一区二区三区免费视频 | 美女视频一区二区 | 97国产视频 | 亚洲国产精品视频在线观看 | 久精品在线 | 欧美性色网站 | 日日日视频 | 黄色大片免费网站 | 日韩电影久久久 | 免费在线观看成年人视频 | 国产手机在线观看 | 欧美精品久久99 | 久久99婷婷 | 久久99网 | 911亚洲精品第一 | 久草精品视频在线播放 | 欧美精品网站 | 99国产精品视频免费观看一公开 | 国产成人精品久久久 | 亚洲国产精品一区二区久久hs | 99r在线视频 | 看片黄网站 | 在线观看国产成人av片 | 丁香花在线视频观看免费 | 欧美性色综合网站 | 中文字幕av在线播放 | 国产色婷婷精品综合在线手机播放 | 99久久婷婷国产一区二区三区 | 久久99国产精品 | 午夜在线资源 | 成人中文字幕+乱码+中文字幕 | 中文字幕文字幕一区二区 | 成人中文字幕在线 | 免费视频一级片 | 五月天伊人网 | 安徽妇搡bbbb搡bbbb | 最近最新中文字幕视频 | 国产无区一区二区三麻豆 | 国产在线1区 | 午夜色性片 | 精品嫩模福利一区二区蜜臀 | 国产免费久久av | 正在播放五月婷婷狠狠干 | 国产综合精品一区二区三区 | 激情久久网 | 毛片激情永久免费 | 国产综合在线视频 | 色丁香综合 | 一区二区三区手机在线观看 | 天天干,夜夜操 | 亚洲黄网址 | 欧美成人按摩 | 国产在线精品一区二区三区 | 成年人在线免费视频观看 | 亚洲国产成人精品在线观看 | 91精品国产一区 | 日韩欧美电影在线 | 成人在线播放网站 | 久久99亚洲精品 | 狠狠狠狠狠色综合 | 91精品在线观看入口 | 香蕉免费在线 | 综合铜03 | 婷婷精品国产一区二区三区日韩 | 日韩高清一二区 | 深夜免费福利在线 | 91av成人 | 夜夜澡人模人人添人人看 | 久久免费国产精品1 | 欧美婷婷色 | 日韩极品在线 | 中文字幕频道 | 99久热在线精品 | av不卡在线看 | 福利视频一区二区 | 久久综合导航 | 欧美一级在线观看视频 | 国产自在线 | 亚洲精品视频大全 | 天天综合入口 | 国产一区精品在线 | 久久免费毛片视频 | 亚洲狠狠丁香婷婷综合久久久 | 91成年人网站 | 四虎最新入口 | 成年人三级网站 | 国产精品国产三级国产 | 超碰个人在线 | 久久午夜精品 | 在线观看电影av | 国产精品久久久久久久久久久久午夜 | 成人免费观看大片 | 在线观看免费一区 | 国产手机免费视频 | 黄色软件在线观看免费 | 欧美日韩xxx | 国产精品成人久久久 | 91网免费看| 亚洲资源视频 | 香蕉视频网站在线观看 | 天天综合网久久综合网 | 国产视频一区在线免费观看 | 最近日本中文字幕 | 日韩h在线观看 | 中文字幕欧美激情 | 好看的国产精品视频 | 综合网五月天 | 免费在线激情电影 | 国产精品久久久久久久妇 | 高清不卡一区二区三区 | 91精品在线观看视频 | 91精品一区二区三区蜜臀 | 97精品久久人人爽人人爽 | 久久久精品 一区二区三区 国产99视频在线观看 | 日韩电影在线一区二区 | 日韩电影一区二区在线 | 久久激情影院 | 日本激情中文字幕 | 黄色的网站免费看 | 五月天色站 | 久久香蕉国产精品麻豆粉嫩av | 顶级bbw搡bbbb搡bbbb | 中文资源在线官网 | 黄色一级在线免费观看 | 中文字幕 在线看 | 久草av在线播放 | 在线观看成人福利 | 日韩黄色中文字幕 | 四虎影视成人永久免费观看亚洲欧美 | 国产中文在线字幕 | 天天操天天操天天操 | 亚洲精品高清在线 | 97国产精品亚洲精品 | 啪啪免费观看网站 | 91九色视频在线播放 | 夜夜骑日日 | 亚洲午夜久久久久久久久电影网 | 国产视频18| 在线小视频 | 精品国产aⅴ麻豆 | 91在线精品视频 | 亚洲四虎在线 | 国产一级在线免费观看 | 天堂资源在线观看视频 | 人人爽人人爽人人片av免 | 欧美日韩国产精品一区二区 | 亚洲2019精品 | 婷婷丁香在线 | 五月天亚洲综合小说网 | 欧美疯狂性受xxxxx另类 | 色婷婷av一区 | 国产成人精品日本亚洲999 | 国产91电影在线观看 | 美国三级黄色大片 | 美腿丝袜一区二区三区 | 91九色精品女同系列 | 欧美a在线免费观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 成年人在线观看 | 亚洲精品网页 | 国产免费久久av | 欧美国产视频在线 | 91麻豆精品国产自产在线 | 男女免费av | 亚洲91精品在线观看 | 黄色午夜网站 | 国产成人久久精品一区二区三区 | 国产一区二区不卡视频 | 欧美日韩视频在线观看免费 | 在线播放视频一区 | 久久久久久欧美二区电影网 | 国产亚洲精品日韩在线tv黄 | 国产黄色片一级三级 | 日韩在线观看你懂得 | 日韩av高清在线观看 | 久久免费电影网 | 又粗又长又大又爽又黄少妇毛片 | 久久爱992xxoo| 国产日韩欧美网站 | 天天综合狠狠精品 | 亚洲一级理论片 | 香蕉久久久久久久 | 久久精品精品电影网 | 欧美一区二区三区在线看 | 免费看网站在线 | 99精品免费久久久久久久久 | www.狠狠插.com | 日韩理论片在线 | 一区二区三区在线播放 | 在线观看91久久久久久 | 色com网| 国产午夜精品视频 | 日本精品久久久一区二区三区 | 在线播放日韩 | 久草电影在线观看 | 五月婷婷丁香激情 | 免费久久精品视频 | 香蕉视频网站在线观看 | 久久99电影 | 国产成人精品一区二区在线观看 | 国产精品区二区三区日本 | 中文字幕丝袜制服 | 亚洲乱码在线观看 | 亚洲成av人片在线观看香蕉 | 婷婷亚洲五月色综合 | 丁香九月激情综合 | 奇米网网址 | 久久一本综合 | 亚洲精品免费观看视频 | 亚洲天天在线日亚洲洲精 | 麻豆超碰| 国产一区二区三区免费在线观看 | 黄色av免费看| 国产精品福利午夜在线观看 | 97电影院在线观看 | 亚洲每日更新 | 亚洲免费观看在线视频 | 青草草在线 | 国产在线综合视频 | 天天干,天天插 | 国产视频欧美视频 | 狠狠色噜噜狠狠狠合久 | 精品视频在线视频 | 91chinesexxx| 国产成人综合图片 | 国产成人精品日本亚洲999 | 日韩专区中文字幕 | 亚洲精品在线视频观看 | 91视频 - x99av | 国产精品不卡视频 | 日韩丝袜视频 | www五月 | 欧美日韩国产一区二 | 亚洲国产成人精品在线 | 亚洲欧洲成人精品av97 | 国产原厂视频在线观看 | 精品国产免费久久 | 国产人成在线视频 | 99精品国产兔费观看久久99 | 国产xvideos免费视频播放 | 色多多污污在线观看 | 国产精品对白一区二区三区 | 男女啪啪视屏 | 国产亚洲欧洲 | 1000部18岁以下禁看视频 | 中文字幕资源在线 | 欧美色图30p | 成人一级黄色片 | av线上免费看 | 久久av在线播放 | 婷婷av网站 | 亚洲免费视频观看 | 又黄又爽又刺激视频 | 日本在线免费看 | 国内久久精品 | 日韩精品中文字幕有码 | 一区二区三区四区五区在线视频 | 911国产在线观看 | 久久久麻豆 | 久久艹精品| 久久久久综合精品福利啪啪 | 日本黄区免费视频观看 | 免费三级在线 | 精品美女在线视频 | 天天综合网久久综合网 | 97超碰国产精品女人人人爽 | 国产一区二区三区免费在线 | 91资源在线播放 | 国产日韩精品视频 | av综合在线观看 | 国产亚洲综合精品 | 午夜美女福利直播 | aaa毛片视频 | 日韩午夜视频在线观看 | 97精品在线 | 免费av成人在线 | 国产视频91在线 | 肉色欧美久久久久久久免费看 | 日韩在线观看中文字幕 | 日本xxxxav | 97人人艹 | 成人在线免费观看网站 | 激情久久一区二区三区 | www九九热 | 日韩三级视频在线观看 | 国产在线观看99 | 国产精品男女 | www.色午夜 | 蜜臀久久99静品久久久久久 | 又黄又爽又色无遮挡免费 | 国产亚洲精品无 | 伊人六月| 午夜av网站 | 97视频免费观看2区 亚洲视屏 | 福利视频 | 久热久草 | 色综合天天 | 在线观看中文 | 99热这里精品| 激情五月五月婷婷 | 精品国产乱码一区二 | 美女福利视频在线 | 天天操天天干天天插 | 91在线免费公开视频 | 天天干天天操av | 国产一级片不卡 | 色狠狠综合天天综合综合 | 骄小bbw搡bbbb揉bbbb | 欧洲一区精品 | 国产一区二区高清 | 在线电影av | caobi视频 | 久久精品一区二区 | 中文字幕日韩伦理 | 精精国产xxxx视频在线播放 | 国产在线精 | 中文字幕永久在线 | 亚洲 欧美 精品 | 国产精品激情 | 在线午夜电影神马影院 | 国产黄a三级三级 | 亚洲精选在线观看 | 午夜精品电影一区二区在线 | 91丨porny丨九色 | 亚洲狠狠干 | 亚洲女人av| 97在线免费观看 | 欧美一区二区免费在线观看 | 国产一区二区三区久久久 | 亚洲国产日韩在线 | 天天爱天天操天天射 | 亚洲精品久久久蜜桃 | 69国产盗摄一区二区三区五区 | 在线观看完整版免费 | 国产精品99久久久久人中文网介绍 | 日韩精品一区二区三区不卡 | 69精品视频 | 网址你懂的在线观看 | 黄色在线免费观看网站 | 欧美一区二区三区四区夜夜大片 | 久久伊人国产精品 | 国产精品久久久久久久久久久不卡 | 高清av免费一区中文字幕 | 香蕉日日| 欧美激情精品久久久 | av在线播放国产 | 最近中文字幕视频完整版 | 免费在线观看日韩 | 天天干夜夜擦 | 午夜电影中文字幕 | 中文乱幕日产无线码1区 | 国产精品一区二区免费视频 | 日韩激情影院 | 麻豆免费视频 | 日韩在线观看视频网站 | 国产色视频123区 | 成人av久久| 久久五月天婷婷 | 亚洲观看黄色网 | 五月开心激情 | 国产精品免费观看在线 | 久久综合九色综合久久久精品综合 | 五月天综合色激情 | 91精品国产99久久久久久红楼 | 久久精品99久久久久久2456 | 天天干天天干天天操 | 日韩影视大全 | 欧美激情第八页 | 国产一线在线 | a黄色影院 | 黄色看片 | 麻豆果冻剧传媒在线播放 | 亚洲电影免费 | 男女激情网址 | 丁香午夜婷婷 | 久久久久亚洲精品 | 在线观看视频福利 | 久久高清片 | 人人澡人人干 | 亚洲精品国产精品乱码不99热 | 日韩美女免费线视频 | 久久精品男人的天堂 | 看片在线亚洲 | 日韩精品一区二区三区中文字幕 | 久久久久久国产精品999 | 欧美福利片在线观看 | 精品在线观看免费 | 亚洲国产精品视频在线观看 | 国产精品久久久一区二区三区网站 | 夜夜躁日日躁狠狠久久88av | 在线观看www.| 国产午夜激情视频 | 久久免费片 | 激情视频在线观看网址 | 国产成人久久久77777 | 亚洲三级毛片 | 久久综合免费 | 视频一区二区在线观看 | 一级片色播影院 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线色网站| 91av播放| www.狠狠操.com| 97热在线观看 | 久久人人爽人人爽人人片av免费 | 九九热国产| 久久国产精品久久国产精品 | 久久伊人精品一区二区三区 | 免费av在线播放 | 亚洲激情电影在线 | 干干日日| 久久久精品视频成人 | 亚洲精品动漫成人3d无尽在线 | 99精品在线免费在线观看 | 人人干人人超 | 日韩一级片观看 | 成人网色 | 国产精品久久久久久久久久新婚 | 狠狠狠狠狠操 | 天天色中文| 玖玖在线观看视频 | 日韩高清在线一区二区 | 91色蜜桃| 久久久久久久久久久成人 | 在线免费观看黄网站 | 国产精品女主播一区二区三区 | av中文字幕日韩 | 一级精品视频在线观看宜春院 | 免费看日韩 | 91成人破解版 | 国产专区视频在线 | 美女网站色 | 亚洲精品麻豆视频 | 国产视频久久久 | 天天玩天天操天天射 | 97超碰超碰久久福利超碰 | 日韩欧美高清一区二区三区 | 国产伦理久久精品久久久久_ | 久艹在线免费观看 | 在线免费观看视频一区 | 麻豆视频免费网站 | 97精品国产aⅴ | 天天操夜夜叫 | av.com在线| 97成人啪啪网 | av在线电影免费观看 | 亚洲一区日韩在线 | 精品一区 精品二区 | 最新色视频 | 99久久99久久精品免费 | 久久久久久久久免费 | 国产特级毛片aaaaaa高清 | 91麻豆精品 | 日韩免费电影网站 | 久久久免费在线观看 | 精品自拍网 | 天天射天天射天天 | 国产精品丝袜在线 | 激情在线网址 | 成年人视频免费在线 | 成年人黄色免费网站 | 一区二区三区在线看 | 亚洲精品乱码 | 国产精品成人一区 | 国产美女视频一区 | 精品xxx| 香蕉手机在线 | 夜夜操天天干 | 欧美精品久久久久久久久久白贞 | 久久免费视频6 |