下载linux内核源码
   网址是:http://www.kernel.org

[root@rong2 ~]# uname -r
2.6.35.1
[root@rong2 soft]# cd /usr/src/
[root@rong2 src]# cd linux-2.6.38/
[root@rong2 linux-2.6.38]# make mrproper
[root@rong2 linux-2.6.38]# make menuconfig
[root@rong2 linux-2.6.38]#make bzImage   (注意大小写。这一步才是真正编译内核)
.
.
.
.
Root device is (8, 2)
Setup is 14744 bytes (padded to 14848 bytes).
System is 3851 kB
CRC be76e71
Kernel: arch/x86/boot/bzImage is ready  (#1)
[root@rong2 linux-2.6.38]# make modules
[root@rong2 linux-2.6.38]# make modules_install
[root@rong2 3.6.2]# pwd
/lib/modules/3.6.2
[root@rong2 3.6.2]# ls
build   modules.alias    modules.ccwmap  modules.ieee1394map  modules.isapnpmap  modules.order   modules.seriomap  modules.usbmap
kernel  modules.builtin  modules.dep     modules.inputmap     modules.ofmap      modules.pcimap  modules.symbols   source
#安装成功后,系统会在/lib/modules目录下生成一个子目录,里面存放着新内核的所有可加载模块。
[root@rong2 linux-2.6.38]# make install
以上几步都没有出错,最后一步make install 时出现一下警告:
WARNING: No module ehci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module ohci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module uhci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module ata_piix found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-mem-cache found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-message found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-raid45 found for kernel 2.6.20.7, continuing anyway
前三个警告是由于USB相关的模块没有编译成模块所导致的
解决方法:
vim .config
分别找到一下:
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
将其改为:
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
注:由此可见,并不是编进内核就好了,有些编进内核反而会出错
 
第四个警告是因为没有将ATA的相关驱动加载到模块
CONFIG_ATA_PIIX=y
将其改为
CONFIG_ATA_PIIX=m
注意:小提示一般只要遇到某某模块没找到,就修改.config文件找到相应的CONFIG_XX_XX=y改为CONFIG_XX__=m
 
最后三个警告dm-XX,是新内核出现的bug不影响性内核的生成。
 
修改了以上内容后,重新编译内核
pwd
/usr/src/linux
cp .config config.bak
make clean 
make mrproper  #清除刚才编译生成的文件
cp config.bak .config
make menuconfig
不用选择直接保存退出,因为.config文件我们保存的有。然后编译
make
make modules
make modules_install
make install



[root@rong2 linux-3.6.2]# uname -a
Linux rong2 3.6.2 #1 SMP Fri Oct 19 06:29:56 CST 2012 x86_64 x86_64 x86_64 GNU/Linux



4、解压修改内核:

cp /boot/initrd-2.6.35.1.img /tmp/
cd /tmp/
mkdir newinitrd
cd newinitrd/
zcat ../initrd-2.6.35.1.img |cpio -i
rm -fr /tmp/initrd-2.6.35.1.img

vim init

找到这2段一样的,去掉其中1段重复的:

echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko
echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko

5、从新打包新内核:

find .|cpio -c -o > ../initrd
cd ../
gzip -9 < initrd > initrd-2.6.35.1.img
rm -fr /boot/initrd-2.6.35.1.img
cp initrd-2.6.35.1.img /boot
rm -fr /usr/src/linux-2.6.35.1.tar.bz2
rm -fr /usr/src/linux-2.6.35.1

6、设置从新内核启动系统:

vim /boot/grub/grub.conf

把default=1改为default=0


四 启动新内核(有时可以省略)
10 将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:     
# cp   /usr/src/linux-2.6.38/arch/x86_64/boot/bzImage   /boot/vmlinuz-2.6.18     
# cp   /usr/src/linux-2.6.18/System.map   /boot/System.map-2.6.18     
# cd   /boot   (进入boot目录)
# rm –rf   System.map   (删除原来的连接)     
# ln –s System.map-2.6.18   System.map   (重新建立连接) 











----------------------------------------------------
 ro root=LABEL=/1是指什么
请教: 在Linux引导文件grub.conf中:

title Fedora Core (2.6.18-1.2798.fc6)
root (hd1,1)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/1 rhgb quiet
initrd /boot/initrd-2.6.18-1.2798.fc6.img
其中 ......ro root=LABEL=/1,但有时是:ro root=LABEL=/
两个LABEL=...都的是某个分区的标签(label)
可以用/sbin/e2label这个命令来查设某个ext2/ext3格式分区的label。

-------------------------------------------------------
解决方法:
[root@localhost]cp /boot/initrd-2.6.30.img /tmp
[root@localhost]cd /tmp/
[root@localhost tmp]mkdir newinitrd
[root@localhost tmp]cd newinitrd/
[root@localhost newinitrd]zcat ../initrd-2.6.30.img |cpio -i
[root@localhost newinitrd]vi init              删掉重复的如下两行:
echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko
[root@localhost newinitrd]# find .|cpio -c -o > ../initrd
14765 blocks
[root@localhost newinitrd]# cd ..
[root@localhost tmp]# gzip -9 < initrd > initrd-2.6.30.img
[root@localhost tmp]# ls
gconfd-root   initrd   initrd-2.6.30.img   mapping-root   newinitrd   scim-panel-socket:0-root
[root@localhost tmp]# mv /boot/initrd-2.6.30.img /home/
[root@localhost tmp]# cp initrd-2.6.30.img /boot/
[root@localhost tmp]#reboot