Linux内核编译全过程详解(kernel2.6.13)-转&小改 – Denny

原来的系统是redhat9.0,内核2.4.20-8,编译的内核2.6.13,仅供参考.-编译成功共分为四部分:编译前准备->编译配置->编译过程->运行内核的常见问题一 编译前准备1)下载一份内核源代码,我下的是linux-2.6.13.tar.bz2,你可在如下地址下载它或者是更新的版本.http://kernel.org/pub/linux/kernel/v2.6/2) 下载最新版本的module-init-tools( "module-init-tools-3.0.tar.gz" and "modutils-2.4.21-23.src.rpm")www.kernel.org/pub/linux/utils/kernel/modutils/www.kernel.org/pub/linux/utils/kernel/module-init-tools/–里有module-init-tools & modutils相应版本3)安装module-init-tools. 它会替代depmod [/sbin/depmod]和其他工具.tar -zxvf module-init-tools-3.0.tar.gzcd module-init-tools-3.0 /*chmod +x 下面亦然*/./configure –prefix=/sbinmakemake install./generate-modprobe.conf /etc/modprobe.conf4)安装modutils-2.4.21-23.src.rpm. 你可能会看到"user rusty and group rusty not existing"的警告. 没关系,你只需强制安装就是了.如果你不对Redhat 9和Redhat 8做这几步, 你将会在"make modules_install"这一步时出现问题.rpm -ivh modutils-2.4.21-23.src.rpmrpmbuild -bb /usr/src/redhat/SPECS/modutils.specrpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm5)解压缩内核源代码.把下载的源代码包放到目录/usr/src下,然后cd /usr/srctar xvfj linux-2.6.10.tar.bz2cd linux-2.6.10二 编译配置//没提及的默认选项吧–仅做参考,(因为虚拟机 未对声卡进行配置)在这一部分涉及几个重要模块的配置请,特别注意.一般用"make menuconfig"命令来配置内核.输入以上命令后出现一个菜单界面,用户可以对需要的模块.下面着重讲几个重要的配置1.Device Drivers -> Block devices -> <*> RAM disk support (16) Default number xxxxx (16384) Default RAM disk size 一定要改为16384以上 [*] Initial RAM disk (initrd) support 2.有SCSI卡(如VMware中的BusLogic BT946C) 的要把它编译成模块(M) 不然会在make install 出错。(其它关于SCSI的选项为内核内建,Buslogic可以选择为模块,只是最后需要制作initrd模块) Device Drivers->SCSI device support-><*>SCSI device support //mDevice Drivers->SCSI device support-><*>SCSI disk support //mDevice Drivers->SCSI device support->SCSI low-level drivers-><*>BusLogic SCSI support //m

Device Drivers —> Fusion MPT device support —><M> Fusion MPT (base + ScsiHost) drivers<M> Fusion MPT misc device (ioctl) driver(这个不确定)3.网卡驱动:请务必把自己网卡对应的驱动编译进内核,常用的网卡是realtek 8139,以下就是这种网卡的配置, Device Drivers—> Networking support—> Ethernet (10 or 100Mbit) —> <M> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL) <M> RealTek RTL-8139 PCI Fast Ethernet Adapter support <M> AMD PCnet32 PCI support(虚拟机)4.文件系统 请务必要选中ext3文件系统,File system—>(以下9个选项是关于ext2和ext3文件系统配置,全部选上)

Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access Control Lists

Ext2 Security Labels

Ext3 journalling file system support

Ext3 extended attributes

Ext3 POSIX Access Control Lists

Ext3 Security Labels

JBB (ext3) debugging support

File system—>DOS/FAT/NT Filesystems —>选上“ NTFS file system support”;

File Systems –> Miscellaneous filesystems —><*> Compressed ROM file system support (cramfs)

注意:

ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

kernel panic : no init found ,try passing init = option to kernel…..

或者是:

VFS:Cannot open root device "hdxy" or unknow-block(0,0)

Please append a correct "root=" boot option

kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)

或者是:

mount: error 19 mounting ext3

pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2

umount /initrd/proc fail: 2

Freeing unused kernel memory: 244k freed

Kernel panic – not syncing: No init found. Try passing init = option to kernel

配置内核是大多数新手编译内核时最大的难点,只要将以上选项编译进内核,成功的机会是大大的。三 编译 按如下命令编译,大概需要一个多小时,大可以好好放松一下# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)# make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)# make bzImage (注意大小写。这一步才是真正编译内核)内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用 make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。# make modules (编译可加载模块)# make modules_install (安装可加载模块)安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。# make install (安装新内核)注意:make install的时候可能会出现如下错误信息:No module BusLogic found for kernel 2.4.12mkinitrd failed此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:# cp /usr/src/linux-2.6.13/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi不过别忘记,复制过后再执行一下make install四 启动新内核

(1)将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令: # cp /usr/src/linux-2.6.13/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18 # cp /usr/src/linux-2.6.13/System.map /boot/System.map-2.6.18 # cd /boot (进入boot目录)# rm –rf System.map (删除原来的连接) # ln –s System.map-2.6.13 System.map (重新建立连接) (2)修改Grub启动管理器如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)在/boot目录下,执行以下命令:# new-kernel-pkg –mkinitrd –depmod –install 2.6.18 (这时候你的/boot下会生成一个initrd-2.4.13.img,并且你的grub.conf文件也作了相应更改)# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)# vi /grub/grub.conf 进入grub.conf文件,找到如下信息:default=1timeout=10splashimage=(hd0,0)/grub/splash.xpm.gztitle Red Hat Linux (2.6.1root (hd0,0)kernel /vmlinuz-2.6.13 ro root= LABEL=/initrd /initrd-2.6.13.img做两处修改:(1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:default=0timeout=10splashimage=(hd0,0)/grub/splash.xpm.gztitle Red Hat Linux (2.6.1root (hd0,0)kernel /vmlinuz-2.6.13 ro root=/dev/hda2initrd /initrd-2.6.13.imgtitle Red Hat Linux (2.4.20-root (hd0,0)kernel /vmlinuz-2.4.20-8 ro root=LABEL=/initrd /initrd-2.4.20-8.img大功告成!赶快重启,看看升级后的2.6内核吧~~~~

若干问题 .

1.No rule to make target `net/ipv4/netfilter/ipt_TOS.c’, needed by `net/ipv4/netfilter/ipt_TOS.o’. Stop.

上面提到了,如果你是在Windows下解开Linux内核的话就会遇到这个问题,因为Windows不区分文件大小写,ipt_TOS.c和ipt_tos.c在Windows中是一回事,就被替换掉了,改在Linux下解开它就没有问题了。

而你自己根本不想从中跑出来。学习啦分享旅行唯美心情说说语录,仅供参考!

Linux内核编译全过程详解(kernel2.6.13)-转&amp;小改 – Denny

相关文章:

你感兴趣的文章:

标签云: