Chinaunix首页 | 论坛 | 博客
  • 博客访问: 860560
  • 博文数量: 436
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -103
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-01 09:48
个人简介

爱生活,爱IT

文章分类

全部博文(436)

文章存档

2015年(1)

2014年(2)

2013年(6)

2011年(39)

2010年(176)

2009年(30)

2008年(28)

2007年(54)

2006年(91)

2005年(9)

分类: LINUX

2006-02-13 21:21:30

也许2.6.0内核会给linux带来革命。从2.5.*内核开始linux有了向高端应用进军 的资本。这次2.6.0内核也是主要是在高级应用上有较大变化。还有增加了对更多的设备的支持(nForce2主板就需要新内核支持)。 这些也不是咱们讨论的范围。对了新的内核,给大家第一感受是,鼠标,键盘,好用了。新内核对这些外设做了优化。(以后还可能弄一个专门为了显示的内核,到那时linux就真的可以进军桌面了。)

--------------------------------------------------------------------------------
By 痞菜
linux-2.6.0-test2:
  也许2.6.0内核会给linux带来革命。从2.5.*内核开始linux有了向高端应用进军的资本。这次2.6.0内核也是主要是在高级应用上有较大变化。还有增加了对更多的设备的支持(nForce2主板就需要新内核支持)。
  这些也不是咱们讨论的范围。对了新的内核,给大家第一感受是,鼠标,键盘,好用了。新内核对这些外设做了优化。(以后还可能弄一个专门为了显示的内核,到那时linux就真的可以进军桌面了。)
  这些特点其实在2.5.*某些版本里已经有了。还有2.6.0的Makefile文件也变化很大的哦 呵呵 在罗嗦罗嗦2.5.75也许比大家想的要好用的多。

  新内核可以在下载。
  先把linux-2.6.0-test2.tar.gz 复制到/usr/src/ 的下面 tar -zxf linux-2.6.0-test2.tar.gz; cd linux-2.6.0-test2 因为是新内核没有编译过所以不用make mrproper 把原来编译产生的垃圾删除
  配置内核可以根据需要与爱好使用下面命令中的一个:

  #make config (基于文本的最为传统的配置界面)

  #make menuconfig (基于文本选单的配置界面)

  #make xconfig (基于图形窗口模式的配置界面)

  #make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)


  进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FAT或DOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。

  选择相应的配置时,有三种选择,它们分别代表的含义如下:

  “Y”- 将该功能编译进内核

  “N”- 不将该功能编译进内核

  “M”- 将该功能编译成可以在需要时动态插入到内核中的模块。

  将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。

  其实现在编译内核最关键的地方就是配置内核。我一般用make menuconfig配置内核。
配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是make menuconfig后离开时选择保存。

  这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。
  还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci 查找到比如我的是。


sh-2.05a# /sbin/lspci
00:00.0 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:00.1 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:02.0 PCI bridge: Intel Corp. 80960RP [i960 RP Microprocessor/Bridge] (rev 01)
00:02.1 I2O: Intel Corp. 80960RP [i960RP Microprocessor] (rev 01)
00:04.0 Ethernet controller: 3Com Corporation 3c985 1000BaseSX (SX/TX) (rev 01)
00:08.0 PCI bridge: Digital Equipment Corporation DECchip 21152 (rev 03)
00:0e.0 VGA compatible controller: ATI Technologies Inc 3D Rage IIC (rev 7a)
00:0f.0 ISA bridge: ServerWorks OSB4 South Bridge (rev 4f)
00:0f.1 IDE interface: ServerWorks OSB4 IDE Controller
02:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
03:02.0 PCI bridge: Intel Corp. 80960RM [i960RM Bridge] (rev 01)
03:08.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)

  你只要把你pci上的东西全部选择对了。 剩下就用默认的就可以了

  配制内核完毕后make install 还要说一句make install也是最近的从2.5.69内核(按照内核发布时间算)开始才有的选项他可以帮你完成很多东西。方便大大的 。
  2.4.21你可以用make install

  现在这些步骤就是没有make install时要做的

#make dep (确保关键文件在正确的位置) 2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。

  #make clean (确保所有有关文件都处于最新版本状态)

  #make zImage (编译压缩形式的内核)

  在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:

  #make bzImage

  编译的时间与机器的硬件条件及内核的配置等因素有关,以笔者的64MB内存的赛扬300为例,编译内核一次大致需要20多分钟。所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。

  如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:

  #make module (编译选择的模块)

  #make module-install (将编译后的模块转移到系统标准位置)

  模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行#make modules-install之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令#lsmod可以对当前内核的模块进行列表。

  我一般是 make dep ;make bzImage;make module ;make module-install

cp /usr/src/linux2.6.0-test2/arch/i386/boot/bzImage /boot/vmlinuz-2.6.0-test2

cp /usr/src/linux-2.6.0-test2/System.map /boot/System.map-2.6.0-test2

  这些make install都可以办到的

  剩下就是修改 /etc/lilo.conf

vi /etc/lilo.conf

  添加新内核。有时make install连这个都给你修改好了。
  下面是我的lilo.conf
prompt
timeout=50
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.18-3smp
label=linux
initrd=/boot/initrd-2.4.18-3smp.img
read-only
root=/dev/sda6

image=/boot/vmlinuz-2.6.0-test2
label=linux-2.6.0-test2
initrd=/boot/initrd-2.6.0-test2.img
read-only
root=/dev/sda6



  再运行
sh-2.05a# lilo
  重新生成lilo

  这样你的内核就升级完毕。

 
在实际编译内核的过程中会出很多问题,对于初学者或接触不多的朋友来说,几乎百分百的会出些问题,而这些问题几乎90%以上与需要更新的系统工具有关,以下是我这段时间编译2.6内核的一些心得,借此机会,我向那些在论坛帮我解决问题的朋友表示感谢!不断学习、不断的进步!

      在编译内核以前,我想我们首先应该要做的是要备份原有系统和数据,特别是在生产用机上,其实如果在生产机上如果现有内核用得稳定,我想也没有必要升级现有内核。

      编译之前我们要先确认一些系统工具程序是否能够满足2.6内核的需要,在“”上有具体的说明,我在实际当中发现,只用升级三个程序包就行了,其它随便,它们是:“module-init-tools”、“mkinitrd”、“procps”;其中编译安装module-init-tools程序包时有可能会出问题,解决方法在我BLOG中的另外一编文章中,大家如果在这出错,可以看看那编文章。在更新mkinitrd时,因为软件依赖关系,要先安装“lvm2”和“device-mapper”这两个程序,这两个程序可以从RHEL4的光盘中取得,也可以从rpm search中搜取。在升级过程序中,一般是先用“rpm -e softname”卸载软件,然后再使用“rpm -ivh softname*.rpm”,但有时因为软件依赖的原因,有可能卸载或安装不了,如果卸载不了,可以使用命令“rpm -e --nodeps softname”强行卸载软件;如果安装不了,可以使用“rpm -Uvh --force --nodeps softnaem*.rpm”强制安装上去。

      在更新完系统工具程序包后,我们就可以升级内核了,从“ftp://ftp.kernel.org”下载自己需要的内核文件,下载到本地硬盘中,可以放在“/usr/src”目录中,也可以放在其它的目录,以前看别的朋友升级内核的文档时,总是说一定要放在“/usr/src”中,还要用“ln”命令建立一些连接,这些东西在实际应该当中,我想是可用可不用的。在安装编译前还有一个问题说的是,如果要打patch的话,如果在内核文件所在目录中就用-p1的参数,如果在上一级目录中就用-p0这个参数。其实安装编译内核的步骤只有四步“make menuconfig”、“make”、“make modules_install”、“make install”;如果是第一次编译不成功,在重新编译前可以运行“make mrproper”和“make clean”,将以前的配置信息和关连文件清除掉。如果想把编译的信息和警告错误信息记录下来,可以在用重定向命令输出到文件中,如“make &>; make.log”。在编译安装完毕后,能发现编译程序已经自动的修改了“/etc/grub.conf”和把启动文件cp到“/boot”目录中了。运行“reboot”重启系统,用新内核启动系统,有可能"audit"这个服务启动不了,在2.6的内核中已经把“audit”编译进内核了,不像2.4中是以模块形式加载的,可以运行“ntsysv”把“audit”服务禁止或运行“chkconfig  --del audit”把“audit”服务删除。

      有的问题有可能没有说全,在以后的文档把它补齐或修改些文档。
 
linux-2.6.20.tar.gz
先把linux-2.6.20.tar.gz 复制到/usr/src/ 的下面;
 tar -zxf linux-2.6.20.tar.gz;
 cd linux-2.6.20

make mrproper //清除目录下所有和先前生成内核时候产生的中间文件
make menuconfig //配置内核选项
在这一步,因为是在VmWare中编译内核,[b]有几个选项必须选择:
[/b]Device Drivers --->SCSI device support ---><*> SCSI disk support
Device Drivers --->SCSI device support --->SCSI low-level drivers ---> <*> BusLogic SCSI support
Device Drivers ---> Fusion MPT device support ---> Fusion MPT (base + ScsiHost) drivers
Device Drivers ---> Fusion MPT device support ---> Fusion MPT misc device (ioctl) driver
注意:这两个凡是只能选模块方式。
Device Drivers ---> USB support ---><*> USB Mass Storage support
Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) ---> <*> AMD PCnet32 PCI support

make dep //2.6内核不需要这一步
make clean //清除以前的编译结果
make zImage //每次编译都会提示内核过大,可以忽略这一步,直接下面的操作
make bzImage //编译为压缩格式
make modules //编译模块
make modules_install //安装模块
depmod -a
make install //2.6的确省却了很多手工工作,2.4的时候需要手动复制,修改配置文件
reboot //当然,目前为止,reboot还是失败的,
//至此为止,
uname -r
就可以看到新的内核版本号了。
 
 
补充Slackware编译linux-2.6.20.tar.gz
 
进入 /boot 目录:

  cd /boot

现在运行"mkinitrd".如果你的root文件系统实用的是reiserfs格式:

  mkinitrd -c -k 2.6.20 -m reiserfs

如果你实用的是ext3文件系统你需要运行下面的明令:

  mkinitrd -c -k 2.6.20  -m jbd:ext3 -f ext3 -r /dev/hdb3



这时你得到一个initrd文件 (/boot/initrd.gz),现在你需要配置lilo:

# Linux bootable partition config begins
image = /boot/vmlinuz-generic-2.6.20 
  initrd = /boot/initrd.gz       #这是与2.4x内核不同的地方
  root = /dev/hda3      #这是你的/ 分区
  label = Linux267
  read-only
# Linux bootable partition config ends

编辑好lilo的配置文件后保存,然后在命令行上使用lilo命令加入新内核。
阅读(2754) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

windychan2008-04-15 12:26:03

博主: 这个问题"看来vmware对linux 2.6.x系列的kernel实在是比较感冒,很不幸的,又让我遇到了bug。 故障现象:版本高于2.6.21的linux kernel无法引导scsi控制器类型为lsi控制器的vmware虚拟机所对应vmware版本:Esx 2.5.x全系列,3.0.x系列不详3.0.2之前的3.0.x系列Server 系列不详Workstation 6.0 RC1以前版本" 是公说公有理,婆说婆有理.反正,我是成功了.