《Linux系统内核编辑基础.pdf》由会员分享,可在线阅读,更多相关《Linux系统内核编辑基础.pdf(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux系统内核编译基础系统内核编译基础姜英杰Linux系统内核编辑基础 Linux内核概述什么是内核Linux内核的特点 Linux内核模块管理insmod、rmmod、lsmod、modprobe Linux内核源码结构 内核编译基本步骤Linux内核概述 内核是Linux引导的时候被装入的程序,它负责系统最底层的工作,直接与硬件进行交流。软件通过内核来操作硬件。内核处理的任务是在多任务之间进行切换,对于磁盘的读写、网络接口、内存管理等。内核是由Linus维护的,各种发布版本的Linux的内核都是完全相同的。Linux内核概述 什么是内核将一些与底层硬件密切相关的或运行频率较高的软件模块
2、,以及为许多模块所公用的一些基本操作常驻内存,以提高运行效率,通常将这部分内部核心程序称为操作系统的内核。内核的基本功能:实现CPU定时器和中断处理实现对虚拟内存的管理实现对进程的管理和调度实现进程间通信(IPC)的机制实现对外围设备的驱动实现对虚拟文件系统的管理实现对网络的支持和管理Linux 系统结构内核的构成内核的构成内核主要由五个子系统组成:-进程调度-内存管理-虚拟文件系统-网络接口-进程间通信内核的构成 进程调度(SCHED)控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该
3、进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。内核的构成 内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据、堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的交换;硬件相关的部分为内存管理硬件提供了虚拟接口。内核的构成 虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具
4、体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext3、vfat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。内核的构成 网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。内核管理 进程间通讯(IPC)处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复
5、进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。Linux内核特点 源代码的公开性修补漏洞的速度快利用最新软件技术 Linux的内核实现了一个操作系统内核应该具有的全部功能,尤其具有强大的网络功能 Linux的内核从2.0版开始提供了对模块的支持Linux内核特点 硬件方面兼容各种硬件平台(CPU)、主板芯片组、各种存储设备、显卡、网卡、声卡
6、、SCSI卡、字符设备、PCMCIA设备 网络通信方面各种协议支持:TCP/IP、Netware、PPP、SLIP、ISDN等防火墙、路由器、网关等网络功能 文件系统方面各种类型的文件系统内存管理、多CPU处理等Linux内核模块管理 模块:将一些设备驱动或软件功能编译成独立的模块化的组件,仅在需要的时候才装入作为内核的一部分。模块机制可以精简内核大小,并按照需要动态扩充内核功能。模块通常为.o文件,linux标准模块目录:/lib/modules/内核版本号/系统加载模块配置文件/etc/modules.confLinux内核模块管理 lsmod查看系统内核已经加载的模块 insmod向当前
7、内核中插入一个新模块可直接指定.o路径 rmmod从当前内核中移除一个模块 modprobe加载指定模块,并自动处理依赖关系modprobe-c:查看模块安装名称内核管理 内核源代码文件通常Linux内核源代码文件存放在/usr/src中。下面我们来逐一介绍#cd/usr/src/2.4Linux内核源码结构 COPYING#GPL版权申明,看后你至少应该知道,你对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务。其中之一就是公开源代码。Linux内核源码结构 CREDITS#光荣榜,你应当感谢的一些人的信息,其中的每一个人都对Linux做出过很大贡
8、献。Documentation/#文档目录,完整解释内核各功能的参考文件,你可以有选择地看一下你感兴趣的部分。Linux内核源码结构 MAINTAINERS#维护人员列表,对当前版本的内核各部分都有谁负责。Makefile#Linux编译处理文件。README#Linus 所写,核心及其编译配置方法简单介绍。Linux内核源码结构 Rules.make#make时使用的一些共同规则。arch/#architecture(体系结构)。存放与不同的硬件体系结构相关的核心源码。我关心的i386启动过程在其中,包括Linux在多种平台下的实现。如果要移植系统到一个新的CPU环境中,这就是你要关心的目录
9、。Linux内核源码结构 drivers/#驱动程序目录,存放各种硬件驱动设备程序,包含大量设备驱动的实现,按类别分子目录。fs/#文件系统,所支持的各种文件系统源代码,实现了当前流行的几乎所有文件系统。include/#嵌入文件目录,存放系统建构所需的头文件(.h)。Linux内核源码结构 init/#初始化文件,存放系统核心的初始化源代码,包含main.c和version.c两个文件。lib/#一些工具,存放系统核心的函数库。mm/#Memory Manager,存放系统所有的内存管理源代码,虚拟页、缓冲的实现。Linux内核源码结构 modules/#模块文件目录,存放系统核心程序模块化
10、的主要源代码,用于存放编译时产生的模块目标文件(参考编译过程)。net/#存放Kernel支持的所有网络通信协议的源代码,包括TCP/IP在内的大量网络协议的实现。scripts/#描述文件、脚本,包含一些帮助编译内核的Shell脚本程序,用于对核心的配置。Linux内核源码结构 ipc/#ipc的实现,与SYS V兼容,存放核心的进程间通信源代码。kernel/#存放最重要的核心源代码,调度、中断、信号等的处理。如何解读内核结构 1.系统初始化目录init/可以了解自举程序如何将内核载入内存中并将控制权交给内核后,内核载入到init进程运行启动系统的过程,还有arch/i386/kernel
11、/head.S负责一些与硬件平台相关的设置工作,然后转跳到init/main.c中的main()函数。2.内存管理工作mm/可以了解Linux内存的管理方式,mm/memory.c描述了对物理内存的管理,mm/buffer.c描述了对cache的管理,mm/swap_state.c对虚拟内存swap的管理。如何解读内核结构 3.核心目录kernel/各硬件平台通用的源代码都存放在kernel目录中,如担任衍生process最重要的fork源程序代码在kernel/fork.c中,关于System Control的机制在kernel/sysctl.c中。4.文件系统fs/Linux ext2文件
12、系统的源代码在fs/ext2目录下,其数据结构定义在include/linux/ext2_fs.h、ext2_fs_i.h和ext2_fs_sb.h中。虚拟文件系统源代码在fs/proc,其数据结构定义在include/linux/fs.h。如何解读内核结构 5.网络通信协议net/Linux网络功能的源代码include头文件在include/net中,网络设备驱动程序在drivers/net中,通信协议的通用源代码在net/core目录中。6.硬件设备驱动程序drivers/包括子目录:block/装置驱动程序主要包括IDE和SCSI设备,如ide.c;char/字符设备,如终端机源代码t
13、ty_io.c、鼠标busmoues.c等;cdrom/光驱的驱动程序源代码;pci/;scsi/;net/;sound/。内核编译基本步骤 确定编译内核的必要性:更新对用户系统中的某些硬件驱动删除内核中不用的设备驱动程序,以减少对内存的占用需要使用现有的内核没有编译进去的网络协议提高Linux的稳定性能和效率需要使用一些现有内核不支持的新功能 获取Linux内核的源代码HTTP http:/www.kernel.org/pub/FTP ftp:/ftp.kernel.org/pub内核编译基本步骤 1.解包或清理#tar zxvf linux-2.6.16.tar.gz -C /usr/sr
14、c/#cd/usr/src#ln-s linux-2.6.16 linux-2.6做一个链接,否则要手工运行#cd linux2.6#make rmproper删除所有因构核过程中产生的所有文件,即除了做make clean外,还要删除.config、.depend等文件,把核心源码恢复到最原始的状态。下次构核时就必须重新配置了。内核编译基本步骤 2.配置(3种基本方式)#make config文字模式逐行配置界面#make menuconfig文字模式菜单配置界面#make xconfig图形模式配置菜单界面核心配置,调用./scripts/Configure 按照arch/i386/con
15、fig.in 来进行配置。命令执行完后产生文件.config,其中保存着配置信息。下一次再做make menuconfig将产生新的.config文件,原.config被改名为.config.old。内核编译基本步骤 内核配置界面-使用方向键在各选项间移动;使用“Enter”键进入下一层选单;-每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。内核编译基本步骤 注意,
16、如果“make menuconfig”命令失败,很可能是ncurses库没有安装。内核的配置选项很多,这里就主要选项进行简要说明,使大家能根据自己的情况,进行内核定制。如果某些项把握不准,可以参考documentation/Configure.help文件,也可搜索整个系统,并查看相关的选项都在哪些文件中出现了。接下来就是选项的配置说明情况。内核选项 1.Code maturity level options:代码成熟等级此处只有一项:prompt for development and/or incomplete code/drivers(选择发展中 及/或 尚未完成的 代码/驱动程式),如
17、果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动。你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。内核选项 2.General setup:常规设置*Support for paging of anonymous memory 这个选项将使你的内核支持虚拟内存,也就是让你的计算机好像拥有比实际内存更多的内存空间用来执行很大的程序。默认是选择的。内核选项*System V IPC 为进程提供通信机制,这将使系统中各进程间有交换
18、信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。BSD Process Accounting 这里选择Y将会让内核为用户层的进程建立一个帐目(进程通过一个特殊的系统调用来通知内核),当程序退出时内核会将进程的相关信息记录到帐目文件中,主要包括进程的创建时间、创建者,内存占用等信息。如果你需要就Y吧。内核选项*Sysctl support 这将提供一个接口让你可以动态的更改一些核心参数与变量,而不需要重新启动系统。打开这个选项将会增加内核的体积至少8KB。如果你的内核仅用制作安装与恢复系统的系统盘那么可以不选,以减少对内存的占用。内核选项 Kernel.co
19、nfig support 这将会把内核的配置信息与相关的文档说明编绎进内核中,以后可能使用一些工具来撮它用来重新构建内核,一般不用选它。Remove kernel features(for embedded systems)-这个选项将会把一些特性从内核中移除,以减少内核体积。对于桌面用户来讲,这可不是一个好主意,所以不要选它。内核选项 3.Loadable module support:可加裁模块选项*Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编绎后在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对
20、某种硬件进行支持。一般一些不常用到的驱动或特性可以编绎为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编绎为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编绎为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否则无法启动系统。内核选项 Module unloading 这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(注意,有些模块一旦加载就不能卸载,与是否选择了此选项无关)。不选择这个选项会让你的内核体积减小一点。内核选项 Module ver
21、sioning support 这个选项允许用户可以使用其它版本内核中编译的模块,不过并不可靠,所以一般不选择它。*Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编绎为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用“modprobe”命令来加载需要的模块,这个是非常不错的特性,推荐选择Y。内核选项 4.Processor type and features:中央处理器(CPU)类型及特性 这是一个比较新的特性,主要的目的是使Linux可
22、以支持多种PC标准,一般我们使用的PC机是遵循所所谓的IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。内核选项 Processor family(586/K5/5x86/6x86/6x86MX)-你是什么CPU就选什么吧 Generic x86 support 这个选项提供了对X86系列CPU最大的兼容性,用来支持一些很少见的x86体系的CPU,它可能会降低一些系统性能。所以如果你的CPU能够在上面的列表中捞到就不要选这个吧。内核选项 HPET Timer Support 这也是一个新的特性,HPET是Intel制定的新的用以代替
23、传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高精度事件定时器。如果你有一台较新的机器就选它,一般它是一个安全的选项,即使你的硬件不支持HPET也不会造成问题,因为它会自动用8254替换。内核选项*Preemptible Kernel 这可是个新特性,几乎所有介绍2.6的文章都会提到,这就是可抢先式内核。也就是说一些优先级很高的程序可以先于一些低优先级的程序执行,即使这些程序是在核心态下执行(这实际上仍然不是真正的抢先式)。从而减少内核潜伏期,提高系统的响应。当然在一些特殊的点的内核是不可抢先的,比如内核中的高度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统
24、的性能,所以还是选上吧。内核选项*Machine Check Exception 如果你的系统出现一些问题,比如CPU过热,内核将会在屏幕上打印相关信息来提醒你。这个功能是需要硬件支持的。你可以查看/proc/cpuinfo看看是否有mce标志,有的话就选吧。如果选择此项之后出现问题,可以在启动时加nomce参数来关闭它。内核选项*Check for non-fatal errors on AMD Athlon/Duron/Intel Pentium 4 打开这个选项将会检查你机器上可能存在的问题,如果有一个非致命错误出现将自动的修复并且记录,这可以帮助你查出程序出现问题的原因,是一个不错的选
25、项,当然它只能用在AMD Athlon/Duron/Intel Pentium 4这类CPU上。如果你正好在用它们中的一个你就选吧。*check for P4 thermal throttling interrupt 如果打开这个选项,在P4的CPU温度过高(也就是P4的温控装置起作用)时会在屏幕上显示出相关的信息,根据你的情况选择吧。内核选项 Toshiba Laptop support 这个选项是针对Toshiba笔记本的,可以用来访问Toshiba的系统管理模式,也就是可以直接设置BIOS。不过要注意它只在Toshiba自己的BIOS中起作用。但是应该值得注意的是如果有一台Toshiba
26、笔记本,BIOS是Phoenix的,那这个选项就不能发挥作用。Dell laptop support 这个同上面的选项基本相同,是支持Dell的笔记本的。内核选项 /dev/cpu/microcode-Intel IA32 CPU microcode support 这个选项将让你可以更新Intel IA32系统处理器的微代码,当然你还必须在文件系统选项中选择devfs才能正常的使用它。如果你把它编绎为模块你还需要在modprobe.conf中加上这一行“alias char-major-10-184 microcode”。内核本身并不带有微代码的二进制文件,你可以到这个网址去得到新的信息。内
27、核选项 /dev/cpu/*/msr-Model-specific register support 这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也信赖与不同的CPU类型而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途送别也很大。内核选项 /dev/cpu/*/cpuid-CPU information support 这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。一般不用选。BIOS Enhanced Disk Drive calls determine boot disk 这将可以打开实模式下
28、BIOS的增强磁盘设备服务,以决定从哪个磁盘上启动。这一般是安全的,不过大多数BIOS提供商都没有实现这个特性。如果有大容量的内存(超过4G)可以选择此选项,以使内核可以使用这部分内存。内核选项 Math emulation 在你的CPU上如果没有数学协处理器的话,打开这个选项可以让内核模拟一个,以提升浮点计算能力,不过慢的可以。如果你使用的不是古董CPU的话(486SX以前的)这一项你永远都不需要。*MTRR(Memory Type Range Register)support 在Intel p6家族的处理器中(Ppro、PII和更新的)有一个内存类型范围寄存器,可以用来控制处理器访问的内存
29、范围。打开它一般可以提升显示的显示性能,所以我们当然要在这选Y啦。内核选项 5.Power management options(ACPI,APM):高级电源管理内核选项*Power Management support 如果你想让Linux支持高级电源管理,例如软关机、系统休眠等,需要选择此选项。内核选项 Software Suspend(XPERIMENTAL)选择这个选项可以挂起你的计算机(类似Windows XP中的休眠),打开这项功能后,你可以使用swsusp或者shutdown z来挂起你的计算机。这样系统会将你当前正在进行的工作(也就是当前内存中的内容)作成一个镜像保存到你的交换
30、分区中,在你下一次启动时使用启动参数“resume=/dev/你的交换分区”,内核就会将上一次的工作内核从镜像文件中恢复到内存,这可以大大提高系统的启动速度。当你不想恢复上一次的工作时向内核传递参数“noresume”。不过系统启动后你的交换分区将不可以使用,你可以使用mkswap命令来重新格式化你的交换分区。这个功能不需要高级电源管理的支持。内核选项 Support-to-Disk Support 这个选项与上面的功能基本相同,不过更灵活一些,可以通过下面的子选项来指定一个专用的交换分区来保存内存镜像。()Default resume partition 与上面的选项配合,来指定保存镜像的分
31、区。内核选项 ACPI(Advanced Configuration and Power Interface)Support -从这里进入ACPI电源管理的配置界面,要注意ACPI与APM不能同时使用。如果同时配置了这两者,那么在系统启动时,若发现一个可工作的ACPI设备,那么APM将被关闭,ACPI会被加载。内核选项*ACPI Support 这个选项应该不用我多说了,要想让你的系统使用ACPI来管理你的电源就要选上它,另外要想让它起作用,你还要在系统中安装acpid守护程序。内核选项*Sleep state(EXPERIMENTAL)选择这个选项可以使你的系统具有挂起的功能,也就是说你可以
32、暂中断你的工作,让你的系统处于一种低电能消耗的状态(dleep state),你此时的系统状态会保存在内存或者磁盘上(取决于挂起的深度),当你需要时再恢复到正常的工作状态。但由于各种系统之间的送别,目前这项功能并不完善。只有很少的设备可以完美地支持这个特性,所以不建议一般用户使用它。内核选项 AC Adapter 这是用来支持移动系统中的交流适配器的,以指示当前系统是不是在使用交流电,对于台式机不需要这个选项。Battery 这个选项用于通过/proc/acpi/battery来向用户提供移动系统中的电池状态信息。同上面那个选项一样对台式机没有作用。内核选项 Button 这个选项用于注册苦于
33、电源按钮的事件,比如power、sleep等,当按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。Fan 这个选项提供对系统风扇的控制支持,可以通过用户层的程度来对系统风扇进行控制(比如打开、关闭,读取当前风扇的运行状态等,不过只有极少数的硬件支持它)。内核选项 ASUS/Medion Laptop Extras 这主要是为ASUS生产的笔记本电脑准备的,以提供对这些系统上那些额外的按钮的支持,用户可以通过它们来拱形或者关闭LCD的背光、调整亮度、定制LED的闪烁指示等功能。用户可以通过/proc/acpi/asus来改变
34、这些设置。内核选项 Toshiba Laptop Extras 这个选项是对Toshiba笔记本提供特别支持的,它的作用同上面的选项基本相同,如果你有一台这样的本本的话就选它吧。Debug StatemenAts 如果选择它当ACPI出现错误时会打印出详细的信息,这将会增加内核的体积大约50K,如果没有必要还是不要选它吧。内核选项 Relaxed AML 选择它的话ACPI翻译器将会放松对AML的错误检查,一些笔记本电脑可能需要它才能正常的使用ACPI(一些糟糕的桌面机可能也需要它,如果你的系统使用ACPI时出现问题不妨选上它试试)。内核选项 6.Bus options(PCI、PCMCIA、
35、EISA、MCA和ISA):总线支持 用以设置系统总线。根据主板参数自己进行选择。PCI support 针对PCI总线的选项,下面还有ISA和EISA子项,一般都是需要的。Support for hot-pluggable devices 这个选项是对热插拔设备的支持。内核选项 PCMCIA/CardBus support”这个选项支持PCMCIA。内核选项 7.Executable file formats:可执行文件格式一般全要选上。8.Networking:网络选项内核选项 9.Device Drivers:设备驱动程序 用来选择设备驱动程序。声卡、显卡、网卡和电视卡等驱动都 在这里选
36、择。Plug and Play support 这个选项支持即插即用。Block devices 这个选项支持块设备。SCSI device support 这个选项支持SCSI 设备。内核选项 Multi-device support(RAID and LVM)这个选项支持RAID和逻辑卷。Networking support 此选项支持网络,包括网络协议和网络设备,协议中肯定要“TCP/IP”项,根据自己的网卡选择相应的设备;ISDN上网必需选“ISDN subsystem”选项。Sound 这个选项是声卡驱动,有两种选择,一种是ALSA驱动,一种是Open Sound System驱动,
37、选择支持自己声卡的那种,将之编译进内核。内核选项 USB Support 该选项该项很重要,平常用的优盘就是一种USB设备;对USB而言,至少需要“Support for USB”、“USB device filesystem”、“ECHI HCD(USB 2.0)support”、“UCHI HCD(most Intel and VIA)support”、“USB Audio support”、“USB MIDI support”和“USB Mass Storage support”选项。内核选项 10.File systems:文件系统 这里的内容很多,建议在缺省的基础上进行修改。一般需要
38、DOS FAT(FAT16、FAT32)、VFAT、EXT3、NTFS和ISO9660(标准光盘使用的文件系统)支持。内核选项 11.Kernel hacking:内核hack选项 12.Security options:安全选项 13.Cryptographic options:加密选项 14.Library routines:库子程序内核选项 15.Load an Alternate Configuration File 读入一个外部配置文件 16.Save Configuration to an Alternate File 将配置保存到一个外部文件内核编译基本步骤 3.检查依赖关系#m
39、ake dep产生两个文件.depend和.hdepend。其中.hdepend表示每个.h文件都包含其它哪些嵌入文件。而.depend 文件有多个,在每个会产生目标文件(.o)文件的目录下均有,它表示每个目标文件都依赖哪些嵌入文件(.h)。#make clean 清理不需要的模块和文件清除以前构核所产生的所有目标文件、模块文件、核心以及一些临时文件等,不产生任何文件。内核编译基本步骤 4.编译内核#make bzImage构核。通过各目录的Makefile文件进行。会在各个目录下产生一大堆目标文件,若核心代码没有错误,将产生文件vmlinuz,这就是所构的核心。产生映射文件System.ma
40、p通过各目录的Makefile文件进行。并产生压缩比例大的核心映象文件./arch/$(ARCH)/boot/bzImage。5.编译选择的模块#make modules编译模块文件,你在make config时所配置的所有模块将在这时编译,形成模块目标文件,并把这些目标文件存放在modules目录中。使用如下命令看一看:ls modules 另外注意,这儿我们产生了一些隐含文件.config.config.old.depend.hdepend.version 6.安装编译好的模块#make modules_install把上面编译好的模块目标文件目录/lib/modules/$KERNEL_
41、VERSION/中。比如我的版本是2.6.16,做完这个操作后可使用下面的命令看看:ls/lib/modules/2.6.16/相关的命令还有很多,有兴趣可看相关资料和Makefile文件。7.安装新内核#make install注意:如果重新编译现有内核注意要先做好备份内核编译基本步骤 8.手动安装新内核#cp /usr/src/2.6.16/arch/i386/boot/bzImage /boot/#ln-s /boot/bzImage-2.6.16 /boot/vmlinuz-2.6.16#mkinitrd/boot/initrd-2.6.16.img 2.6.16#mv/boot/System.map/boot/System.map.old#cp /usr/src/2.6.16/System.map /boot/#vi /boot/grub/grub.conftitle The New Linux 2.6.16kernel /boot/vmlinuz-2.6.16 ro root=LABEL=/acpi=off vga=791 splash=silentinitrd/boot/initrd-2.6.16.img
限制150内