在ubunt9.04上编译kernel0.11

1583阅读 0评论2009-12-18 jiangwen127
分类:

记录一下遇到的问题和解决办法:

我的编译环境:
kernel 2.6.28
gcc 4.3.3
as86 0.16.17
ld86 0.16.17

1.首先在oldlinux.org上下载一个rh9版本的源码,该源码可以在rh9上编译通过,具体是什么环境没有深究。我就直接拿来在我的机器上编译,会遇到不少问题,记录一下。

2.make报错:不认识as86和ld86命令。这个简单,sudo apt-get install as86解决,具体as86和系统自带的as有什么区别,待了解后在补充吧

3.GCC4.x 默认检查stack安全,会导致出现__stack_chk_fail错误,所以在编译之前应先修改Makefile:
    linux-0.11/Makefile
    linux-0.11/kernel/Makefile
    linux-0.11/kernel/chr_dev/Makefile
    linux-0.11/kernel/blk_dev/Makefile
    linux-0.11/fs/Makefile
    在 CFLAGS参数中加入-fno-stack-protector

4.在ld时报错:undefined reference to 'memcpy'。修改include/string.h中的memcpy定义,把static 改为 extern 即可。

5. build.c: undefined referenc to 'MAJOR' 'MINOR'。这个是我自己想的解决方法,能否使用还有待检验。不就是没有定义这两个宏吗,找到它们,在build.c文件里面加上就行了(源定义在include/linux/fs.h里面,把它搬过来),代码如下
/* build.c */
#ifndef MAJOR
#define MAJOR(a) (((unsigned)(a))>>8)
#endif

#ifndef MINOR
#define MINOR(a) ((a)&0xff)
#endif

OK,可以顺利编译通过
上一篇:ide接口编程(汇编)
下一篇:vmware串口通信配置