歡迎您光臨本站 註冊首頁

linux內核編譯練習

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

編譯前的準備

一.查看硬體信息.

[[email protected] Desktop]# cat /proc/cpuinfo

processor : 0

vendor_id : Genuine英特爾

cpu family : 6

model : 42

model name : 英特爾(R) Core(TM) i7-2600K CPU @ 3.40GHz

stepping : 7

cpu MHz : 3801.000

cache size : 8192 KB

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 13

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx rdtscp lm constant_tsc up ida nonstop_tsc arat pni ssse3 cx16 sse4_1 sse4_2 popcnt lahf_lm [8]

bogomips : 7602.00

驅動版本

02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)

00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT

Linux系統下內核分為兩部分

1. 內核文件,

2. 另一部分只是在內核中有一個他的指針.需要這個功能的時候,從硬碟載入到內存中.

Lsmod看到的是已經載入內存的.

[[email protected] Desktop]# uname -a

Linux REHL5-T 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:43 EDT 2010 i686 i686 i386 GNU/Linux

二、獲取源代碼

可以從光碟中或者官方網站下載源代碼

www.kernel.org

ftp到src目錄

/usr/src/kernels

tar -jxvf linux-2.6.19.tar.bz2 解壓

編譯內核的步驟:

1. 清楚舊目標文件和配置(make mrproper)

2. 配置內核選項

3. 編譯內核

4. 編譯內核模塊

5. 安裝內核模塊

6. 安裝新內核.

1. 如果之前的內核也是編譯過的,需要清掉.o,.conf之類的文件.這種文件我們稱之為目標代碼.如果不清楚那麼編譯的時候會跳過以存在的配置.

[[email protected] linux-2.6.19]# make mrproper

如果目錄是新解壓的,可以不做這個步驟.

2. 配置內核選項.

常用三種方法:make config, make menuconf(文本菜單), make xconfig.圖形

互動式:

Kernel .config support (IKCONFIG) [N/m/y/?]

Y 使用這個功能,並且編譯到內核中.N不支持,不需要這個功能?這個功能的說明, m 以外掛模塊的形式.

M形式的是內存中只有指針,當需要使用的時候,從磁碟調用執行文件啟用此模塊.此模式的模塊不需要重啟系統.

文本菜單方式:

用空格修改選項

圖形模式

需要qt的支持

[[email protected] linux-2.6.19]# rpm -qa| grep qt

qt-3.3.6-23.el5

avahi-qt3-0.6.16-7.el5

qt-designer-3.3.6-23.el5

qt-devel-3.3.6-23.el5

[[email protected] linux-2.6.19]# make xconfig

鉤代表y 空代表n 方框中有點代表m.

3. 確認需要配置哪些選項.配置2.6.32內核

如果不熟悉,就用默認配置添加自己需要的一些選項.

內核選項說明:

1. Code maturity level options --->代碼成熟等級

Prompt for development and/or incomplete code/drivers

如果要測試現在仍處於實驗階段的功能,比如這個版本中對ext4、IPv6 等,就必須把該項選擇為Y 了,否則可以

把它選擇為N.如果設置為Y,以後將會出現一些還在測試中的選項供用戶做選擇

2.General setup --->普通的屬性設置

添加Automatically append version information to the version string其他默認.

3. Loadable module support --->對模塊的支持

啟用Enable loadable module support

4. Block layer --->塊層次的設定

Support for Large Block Devices 啟用支持2TB以上的塊設備.

5.Processor type and features --->處理器類型和功能

Symmetric multi-processing support ——對稱多處理器支持,在單CPU 的機

器上,不選這個選項會更快一些.由於超線程技術,看起來是兩顆CPU,因些要選

上這個選項.

Subarchitecture Type (Generic architecture (Summit, bigsmp, ES7000, default)) —

—CPU 的體系結構

Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) ——CPU 的

具體型號. 找不到i7的……

Generic x86 support ——這一選項針對x86 系列的CPU 使用更多的常規優

化.

Maximum number of CPUs (2-255) ——支持的最大CPU的個數.默認就行

SMT (Hyperthreading) scheduler support ——超線程支持.I7 2600K是支持的,所以選上.

Multi-core scheduler support (NEW) ——當然是多核CPU 的支持了.

Preempt The Big Kernel Lock-------Say Y here if you are building a kernel for a desktop system.

Machine Check Exception ——該功能允許處理器在檢測到硬體錯誤時通知

Linux 內核檢測到錯誤!這些錯誤包括:系統匯流排錯誤、內存錯誤(其中可能包含

同位檢查或 Error Correction Code (ECC) 問題)、處理器或硬體中的快取錯誤、處理

器中的 Translation Lookaside Buffers (TLB) 錯誤、其它 CPU 供貨商偵測到的特定

硬體問題、特定供貨商偵測到的硬體問題等.

Toshiba/DELL Laptop support 默認是選的,這裡我們去掉此選項

<M>/dev/cpu/microcode - 英特爾 IA32 CPU microcode support ——這個選項是讓

你使用不隨Linux 內核發行的IA32 microcode,但是你必需有IA32 microcode 的二

進位文件.該功能同時還需要dev file system support(devfs 文件系統)的支持.關於

微代碼的要求和組成等相關信息,請參考:http://www.urbanmyth.org/microcode/

<M> /dev/cpu/*/msr - Model-specific register support ——這個選項桌面用戶一

般用不到.這個選項能讓特權CPU 訪問x86 的MSR 寄存器,這個寄存器(MSR)

的作用也依賴與不同的CPU 類型而有所不同,一般可以用來改變一些CPU 原有物

理結構的用途,但不同的CPU 用途差別也很大.

<M> /dev/cpu/*/cpuid - CPU information support ——這會在/dev/cpu 中建立一

系列的設備文件,用來讓進程去訪問指定的CPU.一般不用選.

High Memory Suppor 默認是off的,改為64G,伺服器安裝的時候32bit默認是不支持4G以上的原因在此.

Allocate 3rd-level pagetables from highmem 上個選項選擇64G 此選項需要開啟.

說明:The VM uses one page table entry for each page of physical memory. For systems with a lot of RAM, this can be wasteful of precious low memory. Setting this option will put user-space page table entries in high memory.

Boot from EFI support 去掉此選項

6.Power management options (ACPI, APM) 電源管理,選擇默認的.

7. Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---&gt;匯流排配置

PCI Express Hotplug driver 有的伺服器硬體支持這個.其他默認

8. Executable file formats ---&gt;可執行二進位文件的格式. 默認設置

9. network網路設置

Packet socket ——選擇Y,一些應用程序將使用Packet 協議直接同網路設

備通信,而不通過內核中的其它中介協議.例如tcpdump 程序.

IP: multicasting ——多播支持.multicasting 是群組廣播

IP: advanced router ——用Linux 來做路由器,此選項應該上.

IP: policy routing ——策略路由.

IP: equal cost multipath ——多路徑路由,例如使用多個ADSL 同時撥號上網,如果使用此特性,則由系統自動選擇客戶端要走的ISP 路徑.當然也是路由的負載均衡.此功能在小企業中是比較節省網路成本的做法.棟科的網路曾經這麼做過,聯通家用6M 電信2M,比上用價格低很多的.

The IPv6 protocol 去掉所有和ipv6有關的設置.

IP: TCP syncookie support (disabled per default) ——啟用該功能可以在一定

程度上防止SYS Flood 攻擊

Network packet filtering (replaces ipchains) 用來支持防火牆功能

IP: Virtual Server Configuration ---&gt;子選項是LVS 的配置(Linux 負載均衡).

Appletalk protocol support 選上,可以和apple設備做文件共享,以前學習存儲的時候提到過.

其他網路設置,默認.

10. Device Drivers ---&gt;設備驅動 默認,我沒有改.

注意scsi的設置

需要說明的地方:

SCSI low-level drivers中

QLogic QLA2XXX Fibre Channel Suppor,系統可以默認支持qlogic的2000系列的光纖卡.

iSCSI Initiator over TCP/IP 支持iscsi的模塊,這些默認都是有的.

Multi-device support (RAID and LVM)中RAID, LVM, device mapper.都要選,這些是伺服器中常用的選項.

Serial ATA (prod) and Parallel ATA (experimental) driver中可以設置AHCI的設定,有些入門級伺服器用的是集成的SATA控制器,需要選擇.

關於網卡,廠商的統統去掉,保留AMD PCnet32,虛擬環境嘛.無線網路去掉.

11. file system模塊

添加EXT,JFS,GFS,quota,NTFS支持,NTFS默認肯定不支持,我們用它測試內核是否成功.

12.其他模塊默認配置.

三. 編譯內核

Make命令做編譯,通過它生成需要的目標內核文件.

Time make可以看編譯時間.

四. 編譯模塊

[[email protected] linux-2.6.19]# make modules

CHK include/linux/version.h

CHK include/linux/utsrelease.h

五. 安裝內核到系統中

Make modules_install

六. 啟用新內核.

2.4 手動啟用,2.6通過自動就行

查看grub文件

[[email protected] linux-2.6.19]# make install

sh /usr/src/kernels/linux-2.6.19/arch/i386/boot/install.sh 2.6.19 arch/i386/boot/bzImage System.map "/boot"

查看grub文件,改為0

七.備份

cp .config /home

備份后如果有些選項不想重新選,可以直接恢復到內核目錄下,重新編譯.

基本配置就到這裡.

重啟測試,已經從新內核啟動.坐等啟動成功.

啟動后查看內核版本

[[email protected] ~]# uname -a

Linux REHL5-T 2.6.19 #1 SMP Sun Mar 25 22:56:28 CST 2012 i686 i686 i386 GNU/Linux

掛載一個NTFS的u盤測試一下.

查看ntfs模塊

[[email protected] ~]# lsmod | grep ntfs

ntfs 246712 1

掛在後,fdisk查看.內核功能成功.

Device Boot Start End Blocks Id System

/dev/sdb4 * 1 975 7831520 7 HPFS/NTFS

本文出自 「小龍的空間」 博客,謝絕轉載!


[火星人 ] linux內核編譯練習已經有649次圍觀

http://coctec.com/docs/linux/show-post-46317.html