linux内核编译练习

编译前的准备

一.查看硬件信息。

[root@REHL5-T Desktop]# cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 42

model name : Intel(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看到的是已经载入内存的。

[root@REHL5-T 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之类的文件。这种文件我们称之为目标代码。如果不清楚那么编译的时候会跳过以存在的配置。

[root@REHL5-T linux-2.6.19]# make mrproper

如果目录是新解压的,可以不做这个步骤。

2. 配置内核选项。

常用三种方法:make config, make menuconf(文本菜单), make xconfig.图形

交互式:

clip_image002

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

Y 使用这个功能,并且编译到内核中。N不支持,不需要这个功能?这个功能的说明, m 以外挂模块的形式。

M形式的是内存中只有指针,当需要使用的时候,从磁盘调用执行文件启用此模块。此模式的模块不需要重启系统。

文本菜单方式:

clip_image004

用空格修改选项

图形模式

需要qt的支持

[root@REHL5-T 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

[root@REHL5-T linux-2.6.19]# make xconfig

clip_image005

钩代表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 - Intel 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的设置

clip_image006

需要说明的地方:

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默认肯定不支持,我们用它测试内核是否成功。

clip_image007

12.其他模块默认配置。

三. 编译内核

Make命令做编译,通过它生成需要的目标内核文件。

Time make可以看编译时间。

clip_image008

四. 编译模块

[root@REHL5-T linux-2.6.19]# make modules

CHK include/linux/version.h

CHK include/linux/utsrelease.h

五. 安装内核到系统中

Make modules_install

六. 启用新内核。

2.4 手动启用,2.6通过自动就行

查看grub文件

clip_image010

[root@REHL5-T 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

clip_image011

七.备份

cp .config /home

备份后如果有些选项不想重新选,可以直接恢复到内核目录下,重新编译。

基本配置就到这里。

重启测试,已经从新内核启动。坐等启动成功。

clip_image012

 

启动后查看内核版本

[root@REHL5-T ~]# 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模块

[root@REHL5-T ~]# lsmod | grep ntfs

ntfs 246712 1

挂在后,fdisk查看。内核功能成功。

Device Boot Start End Blocks Id System

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

本文出自 “飞翔” 博客,谢绝转载!

你可能感兴趣的:(linux,职场,kernel,休闲,编译内核)