debian中2.6.9内核编法的详细介绍
debian中2.6.9内核编法的详细介绍
debian中2.6.9内核编法
编2.6的内核是令人头痛的问题,debian里面编内核与其他发行版本又有些区别,经长时间研究才搞定2.6内核,现将本人的编法献于大家共享,错漏之处,欢迎指正!我也是名菜鸟,所以做完了需要总结!
一.首先,安装完debian的基本系统后,你需要下载一些必备的文件和包,可参照:
http://linuxsir.org/bbs/showthread....;threadid=81321
二.现在可以下载一个2.6的内核了,我是在www.kernel.org 上下的linux-2.6.9.tar.bz2,并且还下载了2.6.10的补丁: patch-2.6.10-rc1.bz2(推荐用bz2的包,因为文件小,呵呵)
将内核解压到/usr/src下,
执行tar -xjvf linux-2.6.9.tar.bz2 -C /usr/src
打补丁:
将patch-2.6.10-rc1.bz2拷贝到/usr/src/linux-2.6.9目录下执行:
bzcat patch-2.6.10-rc1.bz2 |patch -p1 -E(第一次编-E可以不用,如果把补丁放在内核的同级目录里则应当使用-p0)
对于2.6的内核,值得注意的是,它对于一些软件包有版本的要求,在编译之前请查看内核文件夹linux-2.6.9/Documentation/Changes文件,此文件中提出了编译2.6内核时一些软件的版本要求,应此在你编译前首先需要查看自己的软件版本是否附和要求.需要说明的是在所列软件里modules-init-tools较为重要,它要求0.9.10版本,不要以为自己是2点几的版本就比它高,其实他们不一样.但是在debian里面编内核用的却也不是0.9.10的版本.需要下载并编译, 编译好的modutils 和 module-init-tools 软件包可以直接到下面地址下载:
http://debian.cn99.com/kernel-2.6/
安装 modutils 和 module-init-tools 软件包:
dpkg -i modutils_2.4.26-1_i386.deb
dpkg -i module-init-tools_3.0-pre2-1_i386.deb
三.准备工作作好了,可以编内核了.
1.cd /usr/src/linux-2.6.9
make mroproper(清除编译过的代码,如果第一次编也可以跳过此步)
2.make xconfig(或make menuconfig)这一步将是最烦琐,最难搞定的,将哪些编进内核,哪
些编成模块是令人头痛的事.这一步在后面详述.
3.make(编译内核,相当于2.4里的make bzImage,make modules)
make modules_install(将编译的模块安装起来,在/lib/modules/2.6.9目录下)
make install (安装内核到/boot,本来这一步会将initrd.img-2.6.9这个文件cp到/boot>下的,但在debian里面却需要手动来做这一步)
mkinitrd -o /boot/initrd.img-2.6.9 2.6.9(这里的2.6.9是你编译的内核的版本号)
4.修改grub或lilo
我用的是grub,因此我在/boot/grub/menu.lst文件中增加:
title Debian GNU/Linux, kernel 2.6.9
root (hd0,7)
kernel /vmlinuz-2.6.9 root=/dev/hda9 ro
initrd /initrd.img-2.6.9
savedefault
boot
可以将原来的cp过来稍微改改就行了.
四.回过头来说说make xconfig
面对那么多眼花缭乱的选项,要想打造适合自己系统的最小2.6内核,实非易事,好在我们可以使用它的默认配置,然后进行修改.
方法是在make xconfig之前使用make defconfig,这个命令可以产生.config文件并使用默认的配置选项.
这时再运行make xconfig这时好多我们不知道该怎么选的地方都可以不用管它了,直接选一些自己需要的东东吧!可以参照下面的联接:
http://tech.ccidnet.com/pub/article...a106705_p1.html (以下参照赛迪网,有该动)
第一项 Code maturity level options (代码成熟度选项)
选项如下
[*] Prompt for development and/or incomplete code/drivers
默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。
[*] Select only drivers expected to compile cleanly
选择这个选项你将不会看到一些已知的存在问题的驱动程序选项,默认的情况下也是选择的。如果你有设备没有找到驱动选项,你可以将这一项去掉,或许就可以找到相关驱动了,不过它可能是有BUG的。
第二项 General setup
其中的选项如下
[*] Support for paging of anonymous memory
使你的内核支持虚拟内存,默认是选择的。
[*] System V IPC
为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要眩
[*]POSIX Message Queues
[ ] BSD Process Accounting
这里选择Y将会让内核为用户层的进程建立一个帐目(进程通过一个特殊的系统调用来通知内核),当程序退出时内核会将进程的相关信息记录到帐目文件中,主要包括进程的创建时间、 创建者,内存占用等信息。如果你需要就Y吧:)
[*] Sysctl support
这将提供一个接口让你可以动态的更改一些核心参数与变量,而不需要重新启动系统。打开这个选项将会增加内核的体积至少8KB。如果你的内核仅用制作安装与恢复系统系统盘那么可以不选,以减少对内存的占用。
[*]Auditing support
[*]Enable system-call auditing support
[*]Support for hot-pluggable devices (支持热插拔设备,如果你使用热插拔设备如usb,pc卡等,请选上)
[ ] Kernel .config support
这将会把内核的配置信息与相关的文档说明编译进内核中,以后可以使用一些工具来提取它用来重新构建内核,一般不用选它。
[ ]Configure standard kernel features (for small systems)
第三项 Loadable module support (可加载模块选项)
其选项如下:
[*] Enable loadable module support
这个选项可以让你的内核支持模块,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
[*] Module unloading
这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。不选择这个选项会让你的内核体积减小一点,默认是不选,建议还是选上吧.
[ ] Module versioning support (EXPERIMENTAL)
这个选项将让你可以使用其它版本内核中编译的模块,不过并不可靠,所以一般我们不选择它
[*] Automatic kernel module loading
一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽:)
第四项 Processor type and features
Subarchitecture Type (PC-compatible)
这是一个比较新的特性,主要的目的是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。
Processor family (Pentium-4/Celeron(P4-based)/Xeon)
不用讲,你是什么CPU就选什么吧:)
[ ] Generic x86 support
这个选项提供了对X86系列CPU最大的兼容性,用来支持一些很少见的x86体系的CPU,它可能会降低一些系统性能。所以如果你的CPU能够在上面的列表中找到就不要选这个吧。
[ ] HPET Timer Support
这也是一个新的特性,HPET是intel制定的新的用以代替传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高精度事件定时器。如果你有一台较新的机器就选它吧,一般它是一个安全的选项,即使你的硬件不支持HPET也不会造成问题,因为它会自动用8254替换。
[ ] Symmetric multi-processing support
如果你使用多处理器系统就选吧,如果你和我一样使用一个单CPU系统还是把它请出去吧。
( Maximum number of CPUs (2-255)
这里用来配置让Linux最多支持几路CPU,根据你的需要选择。
[*] Preemptible Kernel
这可是个新特性,几乎所有介绍2.6的文章都会提到,这就是可抢先式内核。也就是说被一些优先级很高的程序可以先与一些低优先级的程序执行,即使这些程序是在核心态下执行(这实际上仍然不是真正的抢先式内核)。从而减少内核潜伏期,提高系统的响应。当然在一些特殊的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能,所以还是选上吧。
[ ]Local APIC support on uniprocessors
[*] Machine Check Exception
如果你的系统出现一些问题比如CPU过热,内核将会在屏幕上打印相关信息来提醒你。这个功能是需要硬件支持的。你可以查看/proc/cpuinfo看看是否有mce标志,有的话就选吧。如果你十分十分的不幸,选了它之后出现问题,可以在启动时加nomce参数来关闭它。
[ ] Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4
打开这个选项将会检查你机器上可能存在的问题,如果有一个非致命错误出现将会自动的修复并且记录,这可以帮助你查出程序出现问题的原因,是一个不错的选项,当然它只能用在AMD Athlon/Duron / Intel Pentium 4这类CPU上。如果你正好在用它们中的一个你就选吧。
< > Toshiba Laptop support
这个选项是针对Toshiba笔记本的,可以用来访问Toshiba的系统管理模式,也就是可以直接设置BIOS。不过要注意它只在Toshiba自己的BIOS中起作用。假如你有一台Toshiba笔记本,可惜它的BIOS是Phoenix的,那这个选项仍然是梁山军师----无用:)
< > Dell laptop support
这个同上面的选项基本相同,自己看着办吧:)
< > /dev/cpu/microcode - Intel IA32 CPU microcode support
这个选项将让你可以更新Intel IA32系列处理器的微代码,当然你还必须在文件系统选项中选择devfs才能正常的使用它。如果你把它译为模块你还需要在modprobe.conf中加上这一行alias char-major-10-184 microcode
内核本身并不带有微代码的二进制文件,你可以到这个网址去得到新的信息<http://www.urbanmyth.org/microcode/
< > /dev/cpu/*/msr - Model-specific register support
这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。
< > /dev/cpu/*/cpuid - CPU information support
这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。一般不用眩
High Memory Support (off)
如果你有大容量的内存(超过4G)你要选它,以使内核可以使用这部分内存。偶是没这命啦这部分永远为OFF,如果你有你就ON吧。
[ ] Math emulation
在你的CPU上如果没有数学协处理器的话,打开这个选项可以让内核模拟一个,以提升浮点计算能力,不过慢的可以。如果你使用的不是古董CPU的话(486SX以前的)这一项你永远都不需要。
[*] MTRR (Memory Type Range Register)support
在Intel p6家族的处理器中(Ppro、 PII和更新的)有一个内存类型范围寄存器,可用来控制处理器访问的内存范围。打开它一般可以提升显卡的显示性能,所以我们当然要在这说Y喽:)
[ ]Boot from EFI support (EXPERIMENTAL)
[ ]Use register arguments (EXPERIMENTAL)
< > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
这将可以打开实模式下BIOS中的增强磁盘设备服务,以决定从哪个磁盘上启动。这一般是安全的,不过大多数BIOS提供商都没有实现这个特性。
第五项 Power management options (ACPI, APM)(高级电源管理)
[*] Power Management support
如果你想让你的Linux支持高级电源管理(也就是平常我们说的软关机、系统休眠等)需要选择它。
[ ]Power Management Debug Support
[*] Software Suspend (EXPERIMENTAL)
选择这个选项你可以挂起你的计算机(有点象XP中的休眠),打开这项功能后,你可以使用swsusp或者shutdown -z 来挂起你的计算机。这样系统会将你当前正在进行的工作(也就是当前内存中的内容)作成一个镜象保存到你的交换分区中,在你下一次启动时使用启动参数“resume=/dev/你的交换分区”,内核就会将上一次的工作内核从镜象文件中恢复到内存,这可以大大提高系统的启动速度。当你不想恢复上次的工作时向内核传递参数“noresume"。不过系统启动后你的交换分区将不可以使用,你可以使用mkswap命令来重新格式化你的交换分区。这个功能不需要高级电源管理的支持。很不错的功能,我一直有用,大家也来试试吧:)
[ ] Suspend-to-Disk Support
这个选项与上面的功能基本相同,不过更灵活一些,可以通过下面的子选项来指定一个专用的交换分区来保存内存镜象。
() Default resume partition
与上面的选项配合,来指定保存镜象的分区。
ACPI (Advanced Configuration and Power Interface) Support --->
从这里进入ACPI电源管理的配置界面,要注意ACPI与APM不能同时使用,如果你同时配置了这两者,那么在系统启动时如果发现一个可工作的ACPI设备那么APM将被关闭,ACPI会被加载:
[*] ACPI Support
这个选项应该不用我多说了,要想让你的系统使用ACPI来管理你的电源就要选上它,另外要想让它起作用,你还要在系统中安装acpid守护程序。
[*] Sleep States (EXPERIMENTAL)
选择这个选项可以使你的系统具有挂起的功能,也就是说你可以暂时中断你的工作,让你的系统处与一种低电能消耗的状态(sleep state),你此时的系统状态会保存在内存或者磁盘上(取决于挂起的深度),当你需要时再恢复到正常的工作状态。但由于各种系统之间的差别,目前这项功能并不完善。只有很少的设备可以完美的支持这个特性,所以不建议一般用户使用它。
< > AC Adapter
这是用来支持移动系统中的交流适配器的,以指示当前系统是不是在使用交流电,对于台式机不需要这个选项。
< > Battery
这个选项用于通过/proc/acpi/battery来向用户提供移动系统中的电池状态信息。同上面那个选项一样对台式机没有作用。
<*> Button
这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。
<*> Fan
这个选项提供对系统风扇的控制支持,可以通过用户层的程序来对系统风扇进行控制(比如打开,关闭,读取当前风扇的运行状态等,不过只有极少数的硬件支持它)。
<*> Processor
打开这个选项将让你的系统具有处理IDIE状态的能力,也就是说可以让你的处理器在空闲时节省电能。个人认为这个选项是一定要选的。
<*> Thermal Zone
当你的系统温度过高时,ACPI可以利用这个选项来控制你的系统,及时调整系统的工作状态以保护你的CPU,非常棒的一个特性一定要选呀,要不然也就不用使用ACPI了。(当然这需要硬件的支持)
< > ASUS/Medion Laptop Extras
这主要是为ASUS生产的笔记本电脑准备的,以提供对这些系统上那些额外的按钮们的支持,用户可以通过它们来打开或者关闭LCD的背光,调整亮度、定制LED的闪烁指示等功能。用户可以通过/proc/acpi/asus来改变这些设置。
< > Toshiba Laptop Extras
这个选项是对Toshiba笔记本提供特别支持的,它的作用同上面的选项基本相同,如果你有一台这样的本本的话就选它吧。
[ ] Debug Statements
如果选择它当ACPI出现错误时会打印出详细的信息,这将会增加内核的体积大约50k,如果没有必要还是不要选它吧。
[ ] Relaxed AML
选择它的话ACPI翻译器将会放松对AML的错误检查,一些笔记本电脑可能需要它才能正常的使用ACPI(一些糟糕的桌面机可能也需要它,如果你的系统使用ACPI时出现问题不妨选上它试试)
[ ]Power Management Timer Support
[ ]APM (Advanced Power Management) BIOS Support
[ ]CPU Frequency scaling
第六项 Bus options (PCI, PCMCIA, EISA, MCA, ISA)(总线接口)
[*]PCI support(PCI接口的支持)
PCI access mode(Any)
检测PCI设备的模式,推荐用Any
[*]Legacy /proc/pci interface
改选项能提供PCI的硬件信息,可使用 lspci命令查看
[*]PCI device name database
默认情况下,内核中包含了记录所有PCI设备名信息的数据库,存放在 /proc/pci, /proc/ioports或类似的文件中,不过这将消耗内核80K的空间,如果你取消该项选择,那么你只能活得PCI设备的ID,而不是名字.
[ ]ISA support
使用ISA总线的老的主板也许有用到.
[ ]MCA support
[ ]NatSemi SCx200 support
[ ]PCMCIA/CardBus support
如果你有pc卡之类的东东,就得选上它.
[ ]PCI Hotplug Support
PCI设备的热插拔,我想应该用不到,没有哪个兄台整天要把PCI上的卡拔来拔去吧
第七项 Executable file formats(可执行的文件格式)
[*]Kernel support for ELF binaries
[*]Kernel support for a.out and ECOFF binaries
[*]Kernel support for MISC binaries
第八项 设备驱动,这一项内容太多了,而且各人的机器也不同,但是这一部分的选择一般不会造成致命错误,也就是不会导致不能起动,事实上,导致kernel panic,九成可能是下面一项:文件系统的原因,因此准备先写文件系统,希望对大家能够早点用上新内核有帮助!