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

原来的系统是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.gz

cd module-init-tools-3.0   /*chmod +x 
下面亦然*/

./configure --prefix=/sbin

make

make install

./generate-modprobe.conf /etc/modprobe.conf

4)
安装modutils-2.4.21-23.src.rpm. 你可能会看到"user rusty and group rusty not existing" 的警告. 没关系, 你 只需强制安装就是了. 如果你不对Redhat 9Redhat 8 做 这几步, 你将会在"make modules_install" 这一步时出现问题.

rpm -ivh modutils-2.4.21-23.src.rpm

rpmbuild -bb /usr/src/redhat/SPECS/modutils.spec

rpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm

5)
解压缩内核源代码. 把下载的源代码包放到目录/usr/src, 然 后

cd /usr/src

tar xvfj linux-2.6.10.tar.bz2

cd 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  //m
Device Drivers->SCSI device support-><*>SCSI disk support  //m
Device 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.12
mkinitrd 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=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.1
root (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=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.1
root (hd0,0)
kernel /vmlinuz-2.6.13 ro root =/dev/hda2
initrd /initrd-2.6.13.img
title 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.cipt_tos.cWindows 中 是一回事,就被替换掉了,改在Linux 下解开它就没有问题了。

你可能感兴趣的:(redhat,File,ext,attributes,linux内核,filesystems)