Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306984
  • 博文数量: 75
  • 博客积分: 2710
  • 博客等级: 少校
  • 技术积分: 706
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 14:19
文章分类

全部博文(75)

文章存档

2011年(10)

2010年(22)

2009年(43)

我的朋友

分类: LINUX

2009-08-21 14:26:54

环境描述:
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)。
阅读(3007) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~