Linux内核编译详解

最近研究Linux内核源码,真是难搞。但最基本的要从Linux内核编译说起,下面谈谈在Redhat el5下面成功编译内核的一些必得:(1)下载内核源码,我用的内核源码是linux-2.6.20.tar.gz。

(2)把下载的内核源码放到/usr/src/kernels目录下。

(3)进入该目录make mrproper

功能是清除残留的.o文件,由于多次编译可能残留许多.o文件。

(4) make menuconfig

生成.config文件,以及进行相应的配置。其中配置界面有带[*]的选项和带[M]的选项,带*的表示编译进内核,带M的表示编译成模块,即module,可以通过insmod插入内核,也可以通过rmmod从内核移除出去。

Code maturity level options —>[*] Prompt for development and/or incomplete code/drivers #打开此项会让内核配置多出很多选项,但由于需要使用一些正在开发中的功能,因此必需打开这一选项General setup —>(websrv)Local version – append to kernel release # 添加编译用途字符串,可以在uname -a时看到[*] Support for paging of anonymous memory (swap) # 这是使用交换分区或者交换文件来做为虚拟内存的[*] BSD Process Accounting #充许用户进程访问内核将账户信息写入文件中的[*] Optimize for size #使gcc使用-Os的参数而不是-O2的参数来优化编译,以获得更小尺寸的内核,建议选上。[*] Symmetric multi-processing support #超线程CPU也要选上这个选项 ,在单CPU的机器上,不选这个选项会更快一些。[*] Preemptible Kernel #能使应用程序即使内核在高负载时也很可靠,建议最好选上(1) Maximum number of CPUs (2-255) #支持的最大CPU数[*] Machine Check Exception #让CPU检测到系统故障时通知内核(比如CPU过热)Loadable module support —>[*]Enable loadable module support[*]Automatic kernel module loading #内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块Processor type and features —>(X)Subarchitecture Type (PC-compatible) —>#是使Linux可以支持多种PC标准,可以让你选择一些其它架构。

我们一般选择PC-compatible就可以了。Processor family (Pentium-Pro) —> CPU选项 这里针对自己的CPU型号,选取相应的选项。(X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon #根据自己CPU选择[ ] Generic x86 support#对X86系列CPU最大的兼容性,如果你的CPU能够在上面的列表中找到,就里就不用选了。[ ] Symmetric multi-processing support #支持多处理器选项。如果是单CPU,得关闭。<*> Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4#检查机器上可能存在的问题,如果有一个非致命错误出现将会自动的修复并且记录,这可以帮助你查出程序出现问题的原因.High Memory Support (4GB) —>(x) off 我家PC是1G内存,也不可能升到4G ^_^Power management options (ACPI, APM) —>ACPI (Advanced Configuration and Power Interface) Support —><*> Button 捕获Power、Sleep、Lid(我也不知道这是什么按钮)等按钮是否按下,并做相应的动作<*> Video 集成在板上的显卡的ACPI支持,对有些板卡可能不起作用[*] CPU Frequency scaling #这一选项允许改变CPU的主频,使CPU在低负荷或使用电池时降低主频,达到省电的目的。[*] Thermal Zone #大部份的台式机和笔记本都支持,不选还可能把处理器烧掉

或者是:

此时会出现一个图形界面,列出了所有的内核配置选项,其中有几项是必需的,用“Y”键选中:

“Loadable Module support”中,选“Module unloading”和“Automatic kernel module loading”; “Device Drivers”→“Block Devices”中,选“Loopback device support”; “Device Drivers”→“Multi-device support(RAID and LVM)”中,选“device mapper support”; “Device Drivers”→“Graphics support”中,选“Support for frame buffer devices”; “Device Drivers”→“USB support”中,若不在虚拟机环境中,应尽量全选以支持USB; “Device Drivers”→“Network device support ”→“Ethernet (10 or 100Mbit)”中,选“AMD PCnet32 PCI support”;

(5) make

配置完成后,可以进行相应的编译,生成核心文件。以前的 make bzImage make modules都在这一步搞定。

make(make bzImage+make modules),其中make modules把第4步选项为M的编译成模块,并放在/usr/src/kernels/linux-2.6.20目录下。

(6)make modules_install

即安装模块,即把/usr/src/kernels/linux-2.6.20下的modules放到/lib/modules/2.6.20目录下。这样,lsmod找的是/lib/modules/2.6.20下的模块。

(7) make install

以前还要cp 内核和System.map,修改Grub.conf的步骤,统统make install搞定!. 即启动项的配置等等。

这样,成功编译了内核,重启之后,就会在开机启动菜单中出现linux-2.6.20,我们可以选择启动相应的内核。

穿别人的鞋,走自己的路,让别追去吧

Linux内核编译详解

相关文章:

你感兴趣的文章:

标签云: