007.Vmware-Linux 内核编译一

来源:互联网 发布:天津话发音软件 编辑:程序博客网 时间:2024/06/03 17:51
Subject:Vmware-Linux 内核编译一

Date:     4-Mar-2011

By:        Calvinlee1984@163.com

 

1. 编译平台 Vmware_6.0,RedHat-Enterprise-4-i386-AS(linux-2.6.9-5)

 

2.几个重要的内核文件 ls –l /boot

1)  vmlinuz是vmlinux可引导、压缩的内核。‘vm’表‘Virtual Memory’。Vmlinuz建立的方式有两种:make zImagemake bzImage然后将生成的zImage复制成 /boot/vmlinuz。bzImage中的b是“big”意思。 zImage和bzImage都用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage;

2)  initrd-x.x.x.imginitrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如,使用scsi硬盘时内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题;

3)  System.map是一个特定内核的内核符号表。在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。 Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。 对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。 然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。

 

3. 获取新版本内核

cd /usr/src

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz

gzip –dc linux-2.6.28.tar.gz | tar xvf –

cd linux-2.6.28

 

4.保存当前系统相关文件

cp –af /lib/modules /lib/modules.bak

cp –af /boot /boot.bak

cp –af /etc/grub.conf /etc/grub.conf.bak

 

5.make mrproper //清除*.o及*.config等文件

 

 

6.配置内核选项 make menuconfig

 

具体设置须详细了解每一选项。

 

7.编译内核

make clean //清除*.o文件

make bzImage //编译内核及built-in模块

make modules //编译可加载模块

make modules_install

depmod –a //建立模块之间的依赖关系

make install

注:将Fusion MPT device support选项选上,就不会出现No module mptbase found for 错误了。

 

 

8.reboot

 

注:将kernel /vmlinuz-2.6.28 ro root=LABEL=/ 改为 kernel /vmlinuz-2.6.28 ro root=/dev/sda3就不会产生mkrootdev: label /not found错误。

 

 

9. 再次reboot

 

 

10. 查询相关资料,其中有一种说法是Linux版本(这里用的是Redhat Enterprise Linux 4)启动的某种机制导致了这个错误。

 

11.编译新内核失败。

 

原创粉丝点击