VMWare5+fedora9(内核版本2.6.25,自带版本)---------》升级(降级)到2.6.24.4(移植时使用此版本介绍较多)
升级方法:
1、下载内核源码linux-2.6.24.4.tar.gz(建议先检查磁盘空间剩余,剩余3G一下的可以考虑先进行第11步)
2、解压缩为linux-2.6.24.4
3、拷贝原系统配置文件(/lib/modules/$(uname -r)/build/.config)到该文件夹下
4、进入linux-2.6.24.4
5、make menuconfig
6、载入.config配置即可
7、修改一处bug
GCC4.3.2编译内核2.6.24.4,出错信息为:
QUOTE:GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
kernel/built-in.o: In function `getnstimeofday':
(.text+0xa3d1): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0xa47f): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0xa49c): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_timer':
(.text+0xb0f5): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_timer':
(.text+0xb112): undefined reference to `__umoddi3'
make: *** [.tmp_vmlinux1] 错误
解决办法是:在/usr/src/linux-2.6.24.4/include/linux/time.h文件中添加如下代码
static inline void timespec_add_ns(struct timespec *a, u64 ns)
{
ns += a->tv_nsec;
while(unlikely(ns >= NSEC_PER_SEC)) {
+ /* The following asm() prevents the compiler from
+ * optimising this loop into a modulo operation. */
+ asm("" : "+r"(ns));
+
ns -= NSEC_PER_SEC;
……
其他错误请自己查找内核补丁。
8、make(相当漫长的时间,可以去干别的了)
9、make modules_install
10、make install
11、检查磁盘空间剩余,若磁盘充足,直接重启就可以了;若磁盘剩余不多,可能会使系统无法启动,此时只需make clean删除.o文件,此时硬盘够系统启动所用,能正常重启。
注意:你的编译目录就是内核源代码树,不能删除或make mrproper,你可以移动本目录,但是相应的连接(/lib/modules/2.6.24.4/build和source必须重新连接到本目录)
由于今后还要编译文件,还需要很大的硬盘空间,所以应该加一块虚拟硬盘(具体方法很多人都有介绍,可参照http://allenyu.blog.51cto.com/193668/156256)。