在freeBSD下编译linux kernel

王朝system·作者佚名  2006-11-23
宽屏版  字体: |||超大  

FreeBSD的make和gcc与linux下的版本并不是完全兼容,所以在Makefile、C source文件中的

一些语法将无法通过。

我们第一个需要解决的问题是升级gcc&make到兼容linux的版本。如果FreeBSD支持ELF32的格式

的话,那么直接复制到FreeBSD上的一个目录我们假定为/home/camp,将/home/camp加入到PATH

变量的最前端 PATH=/home/camp:$PATH

接下来我们做编译内核的基本工作:

在/usr/src目录下解开linux kernel packet

cd /usr/include

rm -rf asm linux scsi

ln -s /usr/src/linux/include/asm-i386 asm

ln -s /usr/src/linux/include/linux linux

ln -s /usr/src/linux/include/scsi scsi

make config

make dep

make clean

make bzImage

当我们开始编译的时候,总是能看到一些奇怪的错误,这是为什么呢?是因为在BSD的环境下,

有许多的宏(Macro)没有定义,比如说__linux__, __i386__, linux。那么我们打开

/usr/src/linux/Makefile文件,并在编译器的参数中加入 –D__linux__, -D__i386__, -Dlinux。

CC =$(CROSS_COMPILE)cc -D__KERNEL__ -D__linux__ -Dlinux -D__i386__ -I$(HPATH)

呵呵,大部分的问题已经解决了。但是可别忘记linux kernel中还包含一部分的8086代码,并且

所有的obj文件需要链接。这个时候我们需要as,as86,ld,ld86和一个名叫libbfd-2.9.5.0.22.so

的库文件,我们将执行文件复制到/home/camp,将库文件复制到/usr/lib中。

再试一次 make bzImage,呵呵,我们的new kernel顺利的生成落。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有