linux kernel 内核版本黑苹果修改kernel内核

2981人阅读
linux(7)
环境: Redhat 7.3 编译自己定制的内核的时候(注意不是升级),默认是把新内核的版本定义为2.4.18-3custom, 这样在使用一些预先编译好的二进制的程序或者驱动等会提示内核版本不兼容,比较头痛。解决方法: 编译之前修改文件/usr/src/xxxx/Makefile 在文件第四行有信息: EXTRAVERSION = -3custom 改为 EXTRAVERSION = -3 重新编译自己的内核后就好了.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:68055次
积分:1033
积分:1033
排名:千里之外
原创:35篇
(1)(2)(1)(2)(3)(1)(3)(3)(3)(1)(5)(1)(2)(1)(1)(1)(4)linux内核修改
linux内核修改
内核配置过程比较烦琐,但是配置的适当与否与日后linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
  这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令
  如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了
  选择相应的配置时,有三种选择,它们分别代表的含义如下:
  Y--将该功能编译进内核
  N--不将该功能编译进内核
  M--将该功能编译成可以在需要时动态插入到内核中的模块
  如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是 make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。用空格键选择时可以发现,中括号里要么是空,要么是&*&,而尖括号里可以是空,&*&和&M&。这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。
  在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
至于选项,因为比较复杂,只是简单做一介绍,编译时应视具体情况,参考帮助的内容再加以选择。
1. Code maturity level options
  代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。
2. Loadable module support
  对模块的支持。这里面有三项:
  Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
  Set version inFORMation on all module symbols:可以不选它。
  Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。
3. Processor type and features
  CPU类型。内容蛮多的,不一一介绍了,有关的几个如下:
  Processor family:根据你自己的情况选择CPU类型。
  High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
  Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。
  MTTR support:MTTR支持。可不选。
  Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。
4. General setup
  这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
  Networking support:网络支持。必须,没有网卡也建议你选上。
  PCI support:PCI支持。如果使用了PCI的卡,当然必选。
  PCI access mode:PCI存取模式。可供选择的有B、Direct和Any,选Any吧。
  Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。
  PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。
  System V IPC
  BSD Process Accounting
  Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。
  Power Management support:电源管理支持。
  Advanced Power Management BIOS support:高级电源管理BIOS支持。
5. Memory Technology Device(MTD)
  MTD设备支持。可不选。
6. Parallel port support
  并口支持。如果不打算使用串口,就别选了。
7. Plug and Play configuration
  即插即用支持。虽然linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下下即插即用的感觉。
8. Block devices
  块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:
  Normal PC floppy disk support:普通PC软盘支持。这个应该必选。
  XT hard disk support:
  Compaq SMART2 support:
  Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
  Loopback device support:
  Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。
  Logical volume manager(LVM)support:逻辑卷管理支持。
  Multiple devices driver support:多设备驱动支持。
  RAM disk support:RAM盘支持。
9. Networking options
  网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk&&支持的协议好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。
10. Telephony Support
  电话支持。linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。
11. ATA/IDE/MFM/RLL support
  这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。
12. SCSI support
  SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。
13. Fusion MPT device support
  需要Fusion MPT兼容PCI适配器,不用选。
14. I2O device support
  需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。
15. Network device support
  网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。
16. Amateur Radio support
  配置业余无线广播。
17. IrDA(infrared)support
  红外线支持。
18. ISDN subsystem
  如果你使用ISDN上网,这个就必不可少了。
19. Old CD-ROM drivers(not SCSI、not IDE)
  做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。
20. Character devices
  字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:
  I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For linux,该项必选。
  Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。
  Joysticks:手柄。即使在linux下把手柄驱动起来意义也不是太大,游戏太少了。
  Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
  Video For linux:支持有关的音频/视频卡。
  Ftape, the floppy tape device driver:
  PCMCIA character device support:
21. File systems
  文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项:
  Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
  DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。
  ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
  NTFS file system support:ntfs是NT使用的文件格式。
  /proc file system support:/proc文件系统是linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。
  还有另外三个大类都归到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
22. Console drivers
  控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。
  声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。
24. USB supprot
  USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在linux都可以得到支持,根据需要自行选择。
25. Kernel hacking
  配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。
  配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。
接下来是编译,输入以下命令。
#make clean
#make bzImage或make zImage
#make modules
#make modules_install
#depmod -a
  第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;make zImage和make bzImage则实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核。建议大家使用make bzImage命令。
  后面三个命令只有在你进行配置的过程中,在回答Enable loadable module support (CONFIG_MODULES)时选了&Yes&才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。
  严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
  经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动:
#cp /usr/src/linux/System.map /boot/System.map-2.4.18
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18
  以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:
#cd /rm -f System.map vmlinuz
#ln -s vmlinuz-2.4.18 vmlinuz
#ln -s System.map-2.4.18 System.map
七、修改启动管理器
  如果用LILO,修改/etc/lilo.conf,添加以下项:
image=/boot/vmlinuz-2.4.18
label=linux240
root=/dev/hda2
  其中root=/dev/hda2一行要根据需要自行加以修改。
  运行:
#/sbin/lilo -v
  确认对/etc/lilo.conf的编辑无误,现在重新启动系统:
#shutdown -r now
如果是用Grub启动管理器,则添加如下几项即可。
title Red Hat linux (2.4.18)
root (hd0,0)
kernel /vmlinuz-2.4.18 ro root=/dev/hda2
Grub不需再次调用命令,自动生效。
重启以后就可以用新内核了。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'查看:6902|回复:7
助理工程师
系统已经装上Windows,想学习一下Linux,装了VMware做试验,艰难啦,按照网上的文档来升级内核,始终有问题。费劲周折,结合几篇文章,终于试验成功。
文章内容是转的,不是原创,不过有我自己的心得,有兴趣的试验吧!
由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间(反复装系统,辛苦啊),总算把Linux系统从2.4.20-8内核成功升级到了2.6.24内核。
网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享!
一、准备工作
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本
# uname -a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。
2、下载2.6内核源码
下载地址:
3、下载内核升级工具
(1)下载module-init-tools-3.2.tar.bz2
(2)下载mkinitrd-4.1.18-2.i386.rpm
(3)下载lvm2-2.00.25-1.01.i386.rpm
(4)下载device-mapper-1.00.19-2.i386.rpm
注意: 三个rpm包均已经在redhat-2.6.9中存在,不需要安装!!!
二、配置工作
好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。
4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧!~~呵呵!
5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:
# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
# rm –rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
# tar jvxf linux-2.6.24.tar.bz2 (解压新内核)
# ln -s linux-2.6.24 linux (重新生成linux文件夹)
6、安装module-init-tools工具
在/usr/src目录下,依次执行下列命令:
# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools)
# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)
#./configure --prefix=/
# make moveold
# make all install
#./generate-modprobe.conf /etc/modprobe.conf
7、安装另外三个升级工具
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入--nodeps参数,下同)
# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2
8、配置内核选项。有点繁琐,~~希望一次成功哦。
# cd linux-2.6.24 (进入到/usr/src/linux-2.6.18目录下)
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2)Device Drivers---&Block Devices中选上“Loopback device support”;
Device Drivers---&Multi-device support(RAID and LVM)处要选上“device mapper support”;
Device Drivers---&Graphics support,一定要选上“ Support for frame buffer devices”;
Device Drivers ---&USB support ---&选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
Device Drivers ---&;Network device support ---&Ethernet (10 or 100Mbit) ---&&*& AMD PCnet32 PCI support
(3)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”;
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
(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
Device Drivers ---&&*&SCSI device support (此项不选的话,下面两项就选择不上)
Device Drivers ---&&*&SCSI device support ---&&*&SCSI disk support
Device Drivers---&&8&SCSI device support---&SCSI low-level drivers---&&*&; BusLogic SCSI support
三、编译工作
OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!
9、开始编译啦……
在/usr/src/linux-2.6.24目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
# 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.24子目录,里面存放着新内核的所有可加载模块。
# 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.24/drivers/scsi/BusLogic.o /lib/modules/2.6.24/kernel/drivers/scsi
不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题,就来我的网上留言本求助吧,进 ,点“留言本”即可,我会及时看到你的求助信息的。
四、启动新内核
10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:
# cp /usr/src/linux-2.6.24/arch/i386/boot/bzImage /boot/vmlinuz-2.6.24
# cp /usr/src/linux-2.6.24/System.map /boot/System.map-2.6.24
# cd /boot (进入boot目录)
# rm –rf System.map (删除原来的连接)
# ln –s System.map-2.6.24 System.map (重新建立连接)
11、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.24 (这时候你的/boot下会生成一个initrd-2.6.24.img,并且你的grub.conf文件也作了相应更改)
# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)
# vi /grub/grub.conf
进入grub.conf文件,找到如下信息:
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.24)
root (hd0,0)
kernel /vmlinuz-2.6.24 ro root= LABEL=/
initrd /initrd-2.6.24.img
做两处修改:
(1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)
(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.24)
root (hd0,0)
kernel /vmlinuz-2.6.24 ro root=/dev/hda2 enforcing=0
initrd /initrd-2.6.24.img
title Red Hat Linux (2.4.20-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img
12,OK,大功告成!赶快重启,看看升级后的2.6内核吧
Linux 内核升级和编译,老掉牙的话题了,网上相关的文章不计其数。然后,这么多的文章,却没有一篇让我顺利的升级成功。经过两天的体验,我深切的感受到,对于像我这样的新手来说,第一次升级和编译Linux内核,真是一项艰巨的任务。好在没有失去耐心,经过多篇文章的比对和自己的琢磨,一次次的修正,终于正确升级、编译成功。总结这两天的感受,那就是“痛,并快乐着”!如果你照着这些步骤一路下来的话,仍然没有成功;那么我可以告诉你两点:一是,不要怀疑我的步骤有问题,因为不光是我,我的同事照我的这篇文档也一次成功;二是,你可以到我的留言本 给我留言,我会尽力解答你的问题。以此拙作,希望能给大家带去些微的帮助。
在vmware下的RedHat系统中升级内核时,因vmware的bug,需要先将redhat支持的scsi由lsilogic更改为 buslogic模式;--------具体更改方式见下所述!!!
如果虚拟机使用模拟硬盘是IDE模式,不存在该问题;
***********************************************************
在vmware workstation e.x.p build-84113 上升级原有的centos 4.2 的kernel到2.6.27版本时遇到的问题及解决方法
费牛劲了,原以为很简单的事情没想到这么复杂。折腾了将近8个小时。
一步一步说。
1. 没得说下载源码(wget ),解压(tar zxf)。我用的是2.6.27版本
2. 裁剪(make menuconfig),编译(make),安装(make modules_make install )
3. 重启 ,kernel panic,晕。错误信息如下:
Making device-mapper control node
Scanning logical volumes
Reading all physical volumes. This may take a while...
No volume groups found
lvm used greatest stack depth: 2828 bytes left
Activating logical volumes
Unable to find volume group &VolGroup00&
ERROR: /bin/lvm exited abnormally! (pid 460)
Creating root device
Mounting root filesystem
mount: error 6 mounting ext3
mount: error 2 mounting none
Switching to new root
switchroot: mount failed: 22
umount /initrd/dev failed: 2
init used greatest stack depth: 2648 bytes left
Kernel panic - not syncing: Attempted to kill init!
4. 以为裁剪过头了,直接用默认配置并且把必须的都加上(反正看着像的都加上),重新执行 2步。慢慢编译路啊,一个多小时就这么过去了
5. 重启 ,kernel panic,晕死。错误信息依旧。
6. 看来不是裁剪的问题,google它。在浩瀚的网页中,找到了n多种原因。重新编译n次都是kernel panic 。是内核版本太新了,有新bug,不会这么惨吧。
7。继续google,发现一篇文章
http://theether.net/kb/100038 看样说的有道理,虽然说是2.6.22版本的事情。但同为程序员,大家一样懒,完全有可能到了现在两边都还没改(kernel.org 和 vmware)。不管了,试试。
8. 修改vmx文件 ,还真的找到了scsi0.virtualDev = &lsilogic& 修改成scsi0.virtualDev = &buslogic& 。再用旧核心启动,坏了,旧的也不能用了。改回来,再启动,又好了,你说这脱裤子放屁的事情整的。一步一步做吧,进系统运行命令
echo 'alias scsi_hostadapter BusLogic' && /etc/modules.conf
mkinitrd --preload=BusLogic --with=BusLogic -f /boot/initrd-2.6.27.img 2.6.27
9.关机,再次按照8步修改vmx,启动新核心。……不错,scsi信息出来了,狂喜。
10.不多一会儿,又kernel panic了,苍天啊大地啊,这又怎么了。错误信息。
kjournald starting. Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
Switching to new root
type=1404 audit(.193:2): enforcing=1 old_enforcing=0 auid= ses=
Enforcing mode requested but no policy loaded. Halting now.
init used greatest stack depth: 2228 bytes left
Kernel panic - not syncing: Attempted to kill init!
这句Enforcing mode requested but no policy loaded. Halting now.最有价值。
11.google this error information 。发现居然是SElinux在使坏。参考/hifiwang/blog/item/1e75fd98250a06.html
在grub 中 添加一个传给kernel 的参数 enforcing=0 ,启动。
12. OK进去了。搞死我了,赶紧把/etc/grub.conf 改了,省得一会儿忘了,下次还得进grub。
13. 终于我没有被这个破问题搞死。
结论,倒霉催的,如有雷同直接参考网上那两篇文章,不错,顶事儿。
*********************************************************
Option 2: Workaround the problem using the BusLogic HBA and driver:
1) Boot the system with an earlier kernel version, or use a rescue CD with a pre 2.6.21 kernel and 'chroot /mnt/sysimage'
2) Update modules.conf with the bus logic driver. Enter the following as root:
echo 'alias scsi_hostadapter BusLogic' && /etc/modules.conf
3) Rebuild the initial ram drive to include and load the BusLogic kernel module (change the kernel version as required):
mkinitrd --preload=BusLogic --with=BusLogic -f /boot/initrd-2.6.22.1-41.fc7.img 2.6.22.1-41.fc7
4) Update the virtual machine to use the BusLogic HBA
For ESX use the VirtualCenter Client
- Shutdown the VM
- Right click on the VM and select Edit Settings from the context menu
- Select SCSI Controller 0 and click the Change Type button
- Select the BusLogic radio button and click OK
- Click OK to exit the Virtual Machine Properties
- Power on the VM
- Answer the &change the adapter type for scsi0:0 disk& by selecting the Yes radio button and clicking OK
For VMware Server change or add the following paramter in the .vmx file:
scsi0.virtualDev = &buslogic&
The virtual machine should now boot and recognise the SCSI disks.
助理工程师
我的linux内核是从2.6.9升级至2.6.24
太高深了~~还没有到这个程度!
不错不错哦
初级工程师
我按着你的说的grub设置升级成功OK.
引用:原帖由 林锋 于
12:52 发表
系统已经装上Windows,想学习一下Linux,装了VMware做试验,艰难啦,按照网上的文档来升级内核,始终有问题。费劲周折,结合几篇文章,终于试验成功。
文章内容是转的,不是原创,不过有我自己的心得,有兴趣的试验吧!
由于开发环境需要 ... 弱弱的问一下,我到 上看了一下,linux的内核最新的已经有3.6.2了,我现在装的centos 6.2的内核是2.6.32,是否可以升级到3.6.2呢
每个步骤都没有问题,重启的会出现kernel panic的问题,新人不懂啊
高级工程师
你这样选网络通吗?

我要回帖

更多关于 修改kernel内核 的文章

 

随机推荐