linux驱动程序设计环境搭建(升级内核,建立内核源码树)

3025阅读 0评论2009-08-21 天海一线
分类:LINUX

环境描述:
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)。
上一篇:skyeye下模拟uboot的nand启动(一星期的成果啊!疯掉了!!)
下一篇:博客声明