|
首先说明我使用的发行版是mandriva free 2006,旧内核(现在已经说得上是旧了^_^)是2.6.12-12MDK
昨天看完了<<编译你自己的Linux内核(Kernel)>>,就有了自己编译的内核的冲动,虽然自己只用了三天的linux。就好像我只用了M55一星期就把它的Flash重刷了一样,偶就是冲动!
心动不如行动,上www.kernel.org把linux-2.6.15.5.tar.gz拉了回来(选FTP服务器,速度不错)。
解压:tar -xvf linux-2.6.15.5.tar.gz
移动到/usr/rsc:mv linux-2.6.15.5 /usr/src
cd /usr/src/linux-2.6.15.5
用Xconfig定制:make xconfig
弹出一个内核定制工具:qconf,里面的选项很多,很难一一说清楚,只能说一下大概上的定制内容。
处理器类型选PC兼容,家族选K7(我的签名写明了我的CPU是闪龙2200+)
大内存支持选off,因为我只有512M的DDR333内存
高级电源管理(Power management options )默认。
总线(Bus options) 去除了PCIE,ISA,MCA,PCMICA以及新出现的PCI Hotplug,因为我都没有这些设备。
可执行文件格式(Executable file formats)默认。
网络支持(Networking support)中的网络选项(Networking options)默认。业余广播(Amateur Radio support),红外(IrDA subsystem support),蓝牙(Bluetooth subsystem support)全部取消。其余默认。
设备驱动(Device Drivers)里Memory Technology Devices (MTD),Parallel port support,RAID ,IEEE1394,I2O device support,ISDN,Telephony Support全部取消。
ATA/ATAPI/MFM/RLL support选项里保留了Include IDE/ATAPI CDROM support作为加载模块,因为我有两个ATAPI光驱设备,SCSI模拟支持(SCSI emulation support)作为加载模块,ATAPT设备可能需要它。
Generic PCI bus-master DMA support只保留了Use PCI DMA by default when available和VIA82CXXX chipset support(我使用的IDE总线控制器是VIA的VT82C586 )
SCSI device support里可以去除都去除了,但因为之前选择了SCSI模拟支持,还有一些是去除不了的,比如SCSI generic support。
Network device support里只保留了Dummy net driver support(虚拟网络设备支持)和10/100M以太网卡里的VIA Rhine support,因为我用的就是VIA RhineII VT6102.其它全部取消(其中PPP比较重要,是拨号网络用的,但我也用不着)
Character devices里的/dev/agpgart (AGP Support)保留了VIA chipset support。Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)里只保留了Via unichrome video cards。
IPMI,Watchdog Cards,Ftape, the floppy tape device driver,TPM Hardware Support ,I2C support,Dallas's 1-wire bus,Misc devices取消。
Graphics support里只保留Enable Tile Blitting Support ,VGA 16-color graphics support ,VESA VGA graphics support,S3 Savage support
Backlight & LCD device support(投背与LCD支持)正在使用CRT,想想也没米升级到LCD,取消算了。
Sound里取消Open Sound System。Advanced Linux Sound Architecture里的USB声卡支持也取消,PCI devices只保留了C-Media 8738, 8338t和VIA 82C686A/B, 8233/8235 AC97 Controller。这里有点意思,我的音效芯片明明是C-Media的,但在旧内核里正常工作时却显示ALSA VIA 8233 AC97,方便起见,两个都保留算了。
USB support里只保留了最基本的USB端口以及一些摄像头的支持,其它USB触摸屏,USB显示器,PDA支持,Xbox手柄支持,USB网卡,USB xDSL猫等都取消了。
MMC/SD Card support,InfiniBand support,SN Devices取消。
以上的定制到现在还是很正常工作的(至少写这个帖子时是这样),而且我用的USB鼠标极光动鲨还很正常地工作。
下面的文件系统定制是我第一次编译失败的最主要原因。
因为文件系统的重要性,我第一次定制时全部默认,而且太粗心了,EXT3文件系统支持作为加载模块都没有注意到,而刚好我的根分区就是EXT3格式的。
文件系统支持后的就没什么了,除了取消Kernel hacking外,其余默认。
保存定制,方便起见另存了一份,关闭定制工具。
编译:make
大约过了三十分钟,编译完成。
安装模块:make modules_install
安装内核:cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.15.5
添加GRUB引导菜单:emacs /boot/grub/menu.lst
添加内容如下:
title Mandriva linux 2.6.15.5
kernel (hd1,4)/boot/vmlinuz-2.6.15.5 root=/dev/hdb5
保存,关闭emacs.
重启:reboot
很明显,这里我漏掉了两个步骤:添加initrd映射和复制System.map文件,这也是我编译后第一次用新内核启动失败的原因,后面有说明。
启动后选择新内核进入,但挂载文件系统时出错
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
重启,用旧内核进入系统,linuxsir找资料,得知是可能没有添加initrd映射的原因。
添加initrd映射:cd /boot
/sbin/mkinitrd initrd-2.6.15.5.img 2.6.15.5
顺便复制System.map:
cp /usr/scr/linux-2.6.15.5/System.map System.map-2.6.15.5
重启:reboot
重启后选新内核进入,刚才那个问题是解决了,成功挂载了(hd1,4),但之后启动root指向的分区却又出错:
kernel panic : no init found ,try passing init = option to kernel......
从屏幕输出来看应该是EXT3文件系统支持方面的问题。没法,还得由旧内核进入,检查内核定制,果然发现EXT3文件系统支持以加载模块方式编译,而加载模块却存储在EXT3文件格式的分区内。修改定制,把EXT3文件系统支持编译进内核。重新编译。这一次很快完成了,从屏幕输出来看好像只需要编译EXT3那部分。重新安装模块,更新initrd映射等不在话下。
重启选新内核进入,还是出现了那个问题。但当时已经是凌晨一点多了。先不管理那么多,关机,休息了。
今天早上由旧内核进入系统,baidu了一下那个错误,得知都是文件系统支持的问题,所以就不愿死心,干脆把新内核以及它的源代码和已经安装好的模块全部删掉。重新解压源码包,打开定制工具,加载原来另存的定制文件,检查后将对EXT2,EXT3以及Reiserfs的支持全部编译内核,而Network File Systems只保留了SMB,其它文件系统默认,当然还取消了很多不必要的字符集,将默认字符集改为utf8。
保存定制,编译,安装模块,添加initrd映射。。。。。。
重启,选择新内核进入
紧张而又激动地看着一个个的OK出现
终于进入了KDE
BingGO!
打开Konsole来su,lsmod一下:
Module Size Used by
isofs 33272 0
binfmt_misc 9032 1
via 37568 1
drm 65236 2 via
md5 3776 1
ipv6 245888 8
snd_seq_dummy 2628 0
snd_seq_oss 32128 0
snd_seq_midi_event 5888 1 snd_seq_oss
snd_seq 47888 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
snd_pcm_oss 49504 0
snd_mixer_oss 17280 1 snd_pcm_oss
snd_via82xx 24408 1
gameport 11144 1 snd_via82xx
snd_ac97_codec 93216 1 snd_via82xx
snd_ac97_bus 1728 1 snd_ac97_codec
snd_pcm 80072 3 snd_pcm_oss,snd_via82xx,snd_ac97_codec
snd_timer 20420 2 snd_seq,snd_pcm
snd_page_alloc 8456 2 snd_via82xx,snd_pcm
snd_mpu401_uart 5760 1 snd_via82xx
snd_rawmidi 20128 1 snd_mpu401_uart
snd_seq_device 6988 4 snd_seq_dummy,snd_seq_oss,snd_seq,snd_rawmidi
snd 46052 13 snd_seq_oss,snd_seq,snd_pcm_oss,snd_mixer_oss,snd_via82xx,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device
soundcore 7200 1 snd
via_rhine 20292 0
mii 4864 1 via_rhine
af_packet 16904 0
ide_cd 38660 0
nls_cp936 126208 1
ntfs 223056 4
via_agp 7872 1
agpgart 28808 2 drm,via_agp
video 13956 0
thermal 10760 0
processor 18496 1 thermal
fan 3204 0
container 3072 0
button 4816 0
usbmouse 4160 0
battery 7492 0
usbhid 36320 0
ac 3332 0
ehci_hcd 29192 0
uhci_hcd 30224 0
usbcore 115652 5 usbmouse,usbhid,ehci_hcd,uhci_hcd
再来一个 modinfo processor:
filename: /lib/modules/2.6.15.5/kernel/drivers/acpi/processor.ko
author: Paul Diefenbaugh
description: ACPI Processor Driver
license: GPL
alias: processor
vermagic: 2.6.15.5 K7 gcc-4.0
depends:
parm: bm_history:uint
parm: nocst:uint
parm: max_cstate:uint
终于证明是工作在2.5.15.5的内核下的,而且处理器模块的确是K7。
狂喜+试用ing |
|