|
|
发表于 2010-3-25 18:55:26
|
显示全部楼层
这样的事情我没做过,我上面说的只是根据我对linux以及debian/gentoo发行版的知识进行的推测。我个人认为把其它版本的内核用在gentoo上比自己编译内核还麻烦,不推荐这么做。
就拿debian系发行版来说,你用过ubuntu,可能注意到ubuntu安装很多软件包时会触发重新生成initrd的操作,这是因为debian系的initrd在新安装的系统上不一定包含对这些软件包需要的内核模块的挂摘,所以需要更新。
举个例子,ntfs-3g这个软件包需要内核fuse相关模块,但新安装的ubuntu系统里的initrd可能不包含这些模块。
由此,很难判断你正在使用的ubuntu内核在启动时是否会挂摘你在gentoo上已经安装或以后需要安装的软件包依赖的内核模块。
以上是initrd带来的问题。大多数人安装gentoo内核都不会使用initrd方式,而宁愿采用把大多数需要的模块编译进内核,少数在kernel启动后自动或手工挂摘,就是因为initrd麻烦。
initrd方式在大多数二进制发行版中被采用是为了能尽量支持各种各样的硬件配置,而gentoo这种基于源码的发行版没有这种需求,所以不推荐使用。
至于内核头文件,这个问题好理解,有些库或程序需要知道内核的一下信息,内核头文件就提供这类信息。虽然内核头文件相比内核其它部分变化的速度慢得多,但不同版本也不是完全兼容的。
在我的gentoo系统里,我还没换内核,~x86关键词也没开启,正使用gentoo默认的内核。- miahiu ~ # equery d linux-headers
- [ Searching for packages depending on linux-headers... ]
- media-video/ffmpeg-0.5_p20373 (v4l? sys-kernel/linux-headers)
- (v4l2? sys-kernel/linux-headers)
- net-misc/iputils-20071127 (virtual/os-headers)
- net-misc/openssh-5.3_p1-r1 (virtual/os-headers)
- sys-apps/baselayout-1.12.13 (virtual/os-headers)
- sys-apps/hal-0.5.13-r2 (kernel_linux? >=sys-kernel/linux-headers-2.6.19)
- sys-apps/sysvinit-2.87-r3 (virtual/os-headers)
- sys-apps/util-linux-2.16.2 (virtual/os-headers)
- sys-fs/udev-149 (>=sys-kernel/linux-headers-2.6.29)
- sys-libs/glibc-2.10.1-r1 (virtual/os-headers)
- (>=sys-kernel/linux-headers-2.6.9)
- sys-libs/libcap-2.17 (sys-kernel/linux-headers)
- x11-drivers/xf86-input-evdev-2.3.2 (>=sys-kernel/linux-headers-2.6)
复制代码- miahiu iotop # eix linux-headers
- [i] sys-kernel/linux-headers
- Available versions: 2.4.33.3!b!s ~2.4.36!b!s 2.6.23-r3!b!s 2.6.27-r2!b!s ~2.6.28-r1!b!s ~2.6.29!b!s 2.6.30-r1!b!s ~2.6.32!b!s ~2.6.33!b!s
- Installed versions: 2.6.30-r1!b!s(18:41:55 03/19/10)
- Homepage: http://www.kernel.org/ http://www.gentoo.org/
- Description: Linux system headers
复制代码 从中可以看出linux内核2.6.30和2.6.32和2.6.33的头文件就不一样。
如果更换的内核版本变化太大,而不基于相应的内核头文件重新编译的话,很有可能不能正常工作。其中最核心的库glibc都得依赖于linux-header,那也就是说几乎整个系统都依赖于linux-headers。所以如果更换前后的内核版本差别太大,最好谨慎些。当然,如果只是为了避免自己编译内核而拿来一个相同版本的内核,不会有这方面的问题。 |
|