天天看點

Linux 核心編譯 全功略

1.将核心源碼包linux-2.4.22.tar.bz2 copy至/usr/src目錄下: #cp linux-2.4.22.tar.bz2 /usr/src #cd /usr/src

2.用以下指令解開壓縮包 #bzip2 -d linux-2.4.22.tar.bz2 #tar -xvf linux-2.4.22.tar

3.進入到以後編譯時用的工作目錄下:

     #cd /usr/src/linux-2.4.22 6.

     #make mrproper  // 該指令保證源代碼目錄下沒有不正确的.o檔案(即object檔案,編譯c語言時生成的,目的是 下一步編譯成可執行碼時link之用)以及檔案的互相 倚賴關系.第一次編譯剛下載下傳的源碼包不用此指令,但如果多次使用這些源碼編譯核心,那麼一定要先運作本指令.

 4. 開始編譯核心

   4.1. 在X Window下編譯核心: #make xconfig  假如在在文本模式下編譯: #make menuconfig

   4.2接下來就是根據自己的實際情況進行選擇需要注意的事:

        1:如果你的linux的檔案格式是ext3的那麼檔案系統中的ext3一定要選擇上,不要作為可選擇子產品。不這樣的話,你的系統就可能啟不來。

        2:本機的一些必要的驅動程式最好也直接加在,不要編譯在可加載子產品中。是以在編譯核心之前最後把準備工作做好,看清楚自己機子的硬體裝置、驅動程式。

         3:下面給出一些編譯核心的具體選項的内容和含義,不同版本的可能選項有所不同具體可以使用“?“來看某項功能是否對自己有用。

         1.Code maturity level options:代碼成熟等級。 1.1.prompt for development and/or incomplete code/drivers. 在Linux的世界裡,每天都有許多人為它發展支援的driver和加強它的核心。但是有些driver還沒進入穩定的階段。但其作者很歡迎其他人去測試這些driver并提出一些bugs。很多參考書上說這是那些開發人員認為還不是很穩定的功能。但是我個人認為,這個是應該選的一個選項,系統預設是N,我建議還是選擇Y,因為會使性能有所提高。 如果要減少核心的大小可以把所有字尾試驗性質的代碼全部不選。         

        2.Loadable module support:對子產品的支援。 2.1.Enable loadable module support. 啟動動态載入額外子產品的功能,系統預設為Y,建議選擇該功能。 2.2.Set version information on all module symbols. 通常,我們更新核心版本之後,子產品要重新的編譯。這個選項可以為某個版本的核心編譯的子產品在另一個核心下使用,但通常用不到,可以不選,系統預設為Y。 2.3.Kernel module loader. 讓核心在啟動時有自己裝入必需子產品的能力,建議選上。注意:在開機就會 mount 上來的 partition 的 FS 、device driver 記得要 compiler 進 kernel,不能把它弄成 modules。請不要誇張到為了完全模組化而忘了把ext2fs和IDE dirver compiler 進 kernel 裡。通常的建議是如果可能,将核心代碼編譯成可加載子產品,因為這樣可以使核心更小,而且更穩定。警告!千萬不要将檔案系統(File System)部分的代碼編譯為可加載子產品,如果你犯了這個錯誤,将檔案系統(File System)部分的代碼編譯為可加載子產品,結果将是核心無法讀取它自己的檔案系統。 然後核心無法加載它自己的配置檔案——一些很明顯是在正常啟動Linux時所必需的東西。 

      3.Processor type and features:處理器類型和特色 3.1.Processor family. 它會對每種CPU做最佳化,是以要選擇正确的CPU否則會對該機的性能有一定的影響。不過,如果您的gCC編譯器是2.7.0版以前的。那麼隻能選擇386或是486。通常“/dev/cpu”選項更進階,多數使用者并不需要選擇它。需要注意的是不能選擇比你的CPU類型還進階的CPU,否則可能不能正常工作。 3.2.High Memory Support. 隻有當你的計算機有超過1GB記憶體時才是必須的。是以“High Memory Support”通常并不使用。 3.3.Math emulation. 這項詢問是否需L1nux核心模拟數學浮點運算器。如果有486Dx、AMD以及Pentium機器的話,這個選項就不必選了,因為它們都有内建的浮點運算器。系統預設為N。 3.4.MTTR (memory type range register)support. 這項允許在PCI或者AGP總線衆進行更快速的通訊。 由于現在所有系統都将它們的顯示卡接在PCI或AGP總線上,你通常需要選擇“MTRR”:無論如何,打開這個選項通常都是安全的——即使你的機器沒有使用PCI或AGP總線的顯示卡 3.5.Symmetric multi-processing support. 同步處理器支援該選項保證核心能夠以最佳方式加載多處理器。假如被編譯的計算機上有多個CPU。一般使用者選擇N。 3.6.Mutiquad NUMA system. 通常也需要多處理器,但它通常是關閉的。

      4.General setup:正常核心選項。 4.1. Networking support. Linux網絡支援,建議選上,否則可能導緻核心無法編譯。 4.2. PCI support. 現在的所有系統都使用PCI總線,系統預設為Y。 4.3. PCI access mode. PCI存取模式。可供選擇的有BIOS、Direct和Any,選Any吧。 4.4. Support for hot-pluggabel devices. 熱插拔裝置支援。支援的不是太好,可不選。 4.5. PCMCIA/CardBus support------>PCMCIA/CardBus support. 有PCMCIA就必選了。/n4.6. System V IPC. 如果将來想編譯dosemu(DOS模拟器),它是一個讓各個程式(process)同步且能彼此交換資料的函數庫和一些系統的調用,建議選擇Y。 4.7. BSD Process Accounting. 4.8. Sysctl support. 除非你的記憶體少的可憐,否則你應該啟動這個功能,啟用該選項後核心會大8K,但能讓你直接改變核心的參數而不必重新開機。以上三項是有關程序處理/IPC調用的,主要就是System V和BSD兩種風格。如果你不是使用BSD,就按照預設吧。 4.9. Kernel core (/proc/kcore/) format. 現在的Linux發行版以ELF格式作為它們的“核心核心格式”。 4.10. Kernel support for A.OUT binaries. a.out的執行檔案是比較古老的可執行碼,用在比較早期的UNIX系統上。Linux最初也是使用這種碼來執行程式,一直到ELF格式的可執行碼出來後,有愈來俞多的程式碼随着ELF格式的優點而變成了ELF的可執碼。将來勢必完全取代a.out格式的可執行碼。但目前由于沿有許多的程式還沒有取代過來,是以隻好選擇Y,等将來有一天,全部的程式都變成了ELF的天下時,那時再disable掉。 4.11. Power Management support. 電源管理支援。 4.12. Advanced Power Management BIOS support. 進階電源管理BIOS支援。這通常是用在筆記本電腦上的東西,如果您有APM的BIOS,支援省電的裝置的(有電池的那種),那麼您可以選上這項,一般人這一項是選n,以避免一些可能會發生的問題。後有8個選項。ATX主機闆需要這兩個選項來自動關閉計算機(turn off the computer,包括關閉電源)。

        5.Memory Technology Devices (MTD):配置儲存設備。 5.1. Memory Technology Devices (MTD) support. 你需要這個選項來使Linux可以讀取閃存卡(Flash Card)之類的存儲器。 閃存卡通常用于數位相機。 通過這個選項,Linux可以讀取閃存卡(從特殊的裝置中,比如讀卡機),并且将圖檔儲存為.jpg格式。除非你确定你需要它,否則不必打開它:如果你發現自己需要,你可以在以後加上。

        6.Parallel port support:配置并口。 6.1. Parallel port support. 如果不打算使用,就别選了。

        7.Plug and Play configuration:即插即用支援。 7.1. Plug and Playsupport. 幾乎所有人都有即插即用裝置,是以需要這個選項的支援。 打開這個選項使核心能夠自動配置即插即用裝置并且使它們在系統中能夠使用。 有時需要在BIOS中打開“Plug & Play OS”,否則Linux(當然Windows也一樣)無法配置即插即用裝置。 7.2. ISA Plug & Play support. 選項需要以即插即用模式運作的ISA卡(ISA Card)。 例如AWE64聲霸卡。假如有這個裝置的話可以選擇Y。

        8.Block devices:塊裝置支援。 8.1. Normal PC floppy disk support. 普通PC軟碟支援。大部分人都要使用軟碟(floppy),是以這個選項要選擇Y 8.2. XT hard disk support. 支援XT的古董硬碟,這是IBM電腦時代的東西,如果您還有這種很舊很舊的硬碟。那麼,您可以把它編進核心或是編成一個子產品。大部分的人這個選項都是選擇N的。 8.3. Loopback device support. 這個選項的意思是說,可以将一個檔案挂成一個檔案系統。如果要燒CD光牒片的,那麼您很有可能在把一個檔案燒進去之前,看看這個檔案是否符合IS09660的檔案系統的内容,是否符合您的需求。而且,可以對這個檔案系統加以保護。不過,如果您想做到這點的話,您必須有最新的mount程式,版本是在2.5X版以上的。而且如果您希望對這個檔案系統加上保護,則您必須有des.1.tar.gz這個程式。

       9.Multiple devices driver support:多裝置驅動支援。 9.1. Multiple devices driver support. 普通Linux使用者通常不需要RAID(廉價備援磁盤陣列)或者LVM支援。 普通使用者選擇N。

       10.Networking options:網絡選項。 10.1. Packet Socket. 選擇“Y”,你需要這個選項來與網卡進行通信而不需要在核心中實作網絡協定。 在這裡我可以簡捷一些:一般情況下,打開這個選項。 大多數選項是關閉的,除非你需要特殊的支援。 10.2. TCP/IP networking. 選擇“Y”,核心将支援TCP/IP協定。建議使用者選擇Y。 10.3. IP:multicasting. 所謂的multicasting是群組廣播,它是用在視訊會議上的協定,如果想送一個網絡封包(網絡的資料),同樣的一份資料将送往十部機器上。您可以連續送十次給十台機器(點對點的傳送),也可以同時送一次,然後讓十台機器同時接收到。當然後者比前者好,由于視訊會議要求是最好每個人都能同時收到同一份資訊,是以如果您有類似的需要,這個選項就要打開。同時您還必須去找相關的軟體。

        11.Telephony Support:電話支援。 11.1.Linux Telephony Support. 這個選項隻有當你在計算機中使用電話卡的時候才有用,比如在Internet上打電話。 大多數普通使用者沒有電話卡,是以不需要這個選項。

        12.ATA/IDE/MFM/RLL support:配置對ATA,IDE,MFM和RLL的支援。 12.1. ATA/IDE/MFM/RLL support. 幾乎每個人都需要這些協定,除非你的機器隻有SCSI硬碟而沒有其他任何類型的硬碟。 是以,大多數使用者都應該把它打開。 點選它下面的那一欄将會出現一個有更詳細配置選項的菜單。仔細填寫它們:它們極為重要! 12.2.Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support. 選項是每個使用IDE/ATAPI界面的人都需要的。 包括硬碟,錄音帶機,ZIP盤,光驅(CDROM)和刻錄機(CD-R(W))。 基本上現在的所有計算機(譯者注:這裡指的是PC)都使用IDE/ATAPI界面,是以這個選項必須打開。 12.3. Include IDE/ATA-2 DISK support. 選項在支援硬碟的時候需要。 是以這個選項也必須打開,除非你的機器是一個純粹的SCSI系統。 其它的就使用預設的選項吧,如果你使用了比較特殊的裝置,比如PCMCIA等,就到裡面找相應的選項吧。

      13.SCSI support:SCSI裝置的支援。 13.1. SCSI support. 如果你有一塊SCSI卡,你當然需要打開相關選項。這張截圖隻顯示了當你為你的CD-R(W)選擇“SCSI emulation support” 13.2. SCSI disk support. 指硬碟而言,如果有SCSI硬碟,那麼就要選這個選項。 13.3. SCSI tape support. 指錄音帶機而言,如果您有SCSI的錄音帶機,那麼就要選這個選項。 13.4. SCSI CDROM support. 指CDROM,如果您有SCSI光驅,這一項一定要選。 13.5. SCSI generic support. 指其他有關SCSI的東西,也許您有一台SCSI的掃描器或是燒錄機,或是其他有關SCSI的配備,您就要選這一項。而且,除此之外,您還必須準備關于這些配備的軟體。 13.6. Probe a11 LUNs on each SCSI device. 通常這個選項大部分的人都不會選。我們舉個例子來說,如果您的SCSI光驅是那種多片裝的,就是一台光驅,但可以一次放好幾片CD光牒片的那種。這種我們叫做Lun。 13.7. Verbose SCSI error reporting(kernel size+=12K). 如果認為您的SCSI硬體配備有些問題,想了解一下它出現的錯誤資訊。那麼您可以把這個選項選y,Linux核心會告訴您有關于您的SCSI配備的問題(如果有的話)。不過,它會增加核心約 12KB左右。 13.8. SCSI low—level drivers. 下面總共有接近30張的SCSI卡,您可以依需求做選擇SCSI卡牌子。

       14.I2O Device Support:I20裝置支援。 14.1. I2O Device Support. 如果你有I2O界面,你必須選擇這個選項。大多數人沒有,如果你也沒有的話,可以直接将它關閉。

      15.Network Device Support:網絡裝置支援。 15.1. Network Device Support. 網絡裝置支援。上面選好協定了,現在該選裝置了,可想而知,内容肯定多得很。還好還好,裡面大概分類了,有ARCnet裝置、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support幾大類。我用的是10/100M的以太網,看來隻需要選則這個了。還是10/100M的以太網裝置熟悉,内容雖然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,為了免得麻煩,編譯到核心裡面好了,不選M了,選Y。耐心點,一般說來你都能找到自己用的網卡。如果沒有,你隻好自己到廠商那裡去要驅動了。 15.2. Dummy net driver support. 如果有SLIP或PPP的傳輸協定,那麼要把這一項打開。 15.3. PPP(point-to-point)support. 點對點協定。 15.4. SLIP(serial line) support. 這是MODEM族常用的一種通訊協定,必須通過一台Server(叫ISP)擷取一個IP位址,然後利用這個IP位址,可以模拟以太網絡,使用有關TCP/IP的程式。/n15.5.1. Ethernet(10 or 100Mbit). 如果您使用網絡卡,那麼這個選項一定要選y,否則以下對網絡卡的選擇将不會出現。或是您有網絡卡,這時您同樣的也要選y。像我們平常用的都是NE2000相容卡。/n15.5.2. EISA, VLB, PCI and on board controllers. 選擇網絡卡,包括直接附在主機闆上的那種。如果選擇y,則底下會列出其他的網絡卡讓您做選擇,這些卡對于一般人來說很少會去用到。是以大部分的人這項是選N的。/n15.5.3. Pocket and portable adaptors. 通常用在可攜式的電腦上,這類型的網絡卡(口袋型的),由于體積很小在安裝和取下方面很友善,是以筆記本相關電腦上便常常采用這種網絡卡。 15.5.4. Token Ring driver support. Token Ring是 IBM電腦上的網絡。它叫令牌環網絡,和以太網絡是很類似的東西。如果您希望使用的Token Ring網絡卡以便連接配接到這種網絡,那麼選Y,一般人都選N。 15.5.5. ARCnet support. 這也是一種網絡卡,通常一般人用不到,是以選n。

         16.Amateur Radio support:配置業餘廣播支援。 16.1. Amateur Radio support. 如果你希望使用業餘廣播支援,應該打開這個選項,并且打開相應的驅動。 多數人不需要這個選項。

        17.IrDA(infrared)support:配置紅外線(無線)通訊支援。 17.1. IrDA(infrared)support. 如果你有無線裝置,比如無線滑鼠或無線鍵盤,你應該打開這個選項。 多數桌面機器不需要這個選項。

       18.ISDN subsystem:配置ISDN。 18.1. ISDN support. 如果使用ISDN上網,這個就必不可少了。

        19.Old CD-ROM drivers(not SCSI、not IDE):配置老CDROM。 在486和386機器中,CDROM并不是通過硬碟IDE(ATAPI)控制器連接配接的,而是通過聲霸卡或一塊特殊的闆卡。 使用這些老CDROM需要選擇對應的驅動。這個選項在現在的系統中顯得多餘。

        20.Input Core Support: 這個選項提供了2.4.x核心中最重要的特性之一的USB支援。 Input core support是處于核心與一些USB裝置之間的層(Layer)。如果你擁有其中一種USB裝置,你必須打開“input core support”選項。 現在所有的主機闆都有USB接口,是以,原則上你應該打開它。

        21.Character devices:字元裝置。 21.1. Virtual terminal. 選擇“y”,核心将支援虛拟終端。 21.2. Support for console on virtual terminal. 選擇“y”,核心可将一個虛拟終端用作系統控制台。 21.3. Standard/generic (dumb) serial support. 選擇“y”,核心将支援串行口。标準序列接口的標明。如果您是用serial的滑鼠(大部分的人都是用這個),或是MODEM的話,則這一項一定要選。大部分的人這一項都選y。 21.4. Support for console on serial port. 選擇“y”,核心可将一個串行口用作系統控制台。 21.5. I2C support. I2C是Philips極力推動的微控制應用中使用的低速串行總線協定。如果你要選擇下面的Video For Linux,該項必選。 21.6. Mice. 滑鼠。現在可以支援總線、序列槽、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根據需要選擇。 21.6.1. PS/2 mouse (aka "auxiliary device") support. 如果使用者使用的是PS/2滑鼠,則該選項應該選擇“y”。/n21.7. Joysticks. 搖桿。即使在Linux下把搖桿驅動起來意義也不是太大,遊戲太少了。/n21.8. Watchdog Cards. 雖然稱為Cards,這個可以用純軟體來實作,當然也有硬體的。如果你把這個選中,那麼就會在你的/dev下建立一個名為watchdog的檔案,它可以記錄你的系統的運作情況,一直到系統重新啟動的1分鐘左右。有了這個檔案,你就可以恢複系統到重新開機前的狀态了。

      22.Console drivers:配置控制台驅動。 22.1. VGA text console. 選項在VGA模式下啟動字元模式。 多數人都需要它,是以這個玄學愛你跟通常是開着的。 隻有一些386計算機沒有VGA相容顯示卡,選擇這個選項對于現在的多數計算機來說都沒有問題。 22.2. video mode selection support. 使啟動的時候能夠使用字元模式的分辨率。 如果你希望一行能夠有更多的字的話,這通常會給你提供友善,不過通常你不必打開它們。 下面兩個選項是試驗性質的,我建議你關閉它們。

       25.Sound sound:聲霸卡驅動。 在這部分,你可以配置聲霸卡。如果你的發行版使用的是核心的标準聲霸卡驅動,你必須正确選擇你使用的聲霸卡。

       26.USB support:配置USB支援。

         27.kernel hacking:如果需要自己對linux進行核心的一些編寫,驅動的編寫可以打開,普通使用者不需要選擇N.

 make dep

make clean

make bzImage(I要大寫的)

 make modules

make modules_install     //在/lib/modules/下生成了一個以你的版本為名字的檔案夾 depmod –a 檢查核心中有沒有未解析的symbol,它是生成子產品間的依賴關系,這樣你啟動新核心之後,使用modprobe指令加載子產品時就能正确地定位子產品。假如輸入這個指令後你看不到沒有任何傳回資訊的話,那說明你在編譯過程是已經成功了。

把bzImage拷貝到boot cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz2.4.22 cp /usr/src/linux-2.4/System.map /boot/System.map-2.4.22 ln -sf /boot/System.map-2.4.22 /boot/System.map 在/boot下生成 initrd img檔案: cd /boot mkinitrd initrd-2.4.22.img 2.4.22 修改啟動檔案,具體看你的機子是grub啟動還是lilo啟動 相應的配置grub.conf 或者lilo.conf 給出grub的例子,lilo類似 title Red Hat Linux 9.0 (2.4.22) root (hd0,6) kernel /vmlinuz-2.4.22 ro root=/dev/hda8 initrd /initrd-2.4.22.img 儲存之後,重起。就可以看到你的新核心的選項了 一般都會成功,如果不能加載,進入你原來的核心,進行分析修改。

繼續閱讀