本文主要是介绍Linux 环境下编译 0.11版本内核 kernel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的系统配置:
UBUNTU 9.04 +gcc 4.33
最近在看《linux内核0.11完全注释》一书,尝试下了个0.11版本的 kernel下来尝试编译一把。
linux-0.11.tar.gz 下载地址:ftp://ftp.kernel.org/pub/linux/kernel/Historic/old-versions/
下面开始工作:
参照是网上的帖子说明的
原文链接
http://www.cnblogs.com/hummersofdie/p/3645218.html
他做的确实很不错,但是,在我的电脑上没有编译通过(可能是我的系统配置和他的不一样)。。。所有我采用了第二种方式编译,经过两天时间,终于编译通过了
我的方法如下:
利用赵炯博士在http://www.oldlinux.org/Linux.old/kernel/0.1x/ 这里提供了修改 linux-0.11-060618-gcc4.tar.gz 好的 0.11版本的内核进行编译,只要修改:
步骤0:配置系统环境:
安装软件as(汇编器) ld(链接器)
具体方法:
sudo apt-get install bin86
注意:由于我使用的Ubuntu版本系统比较旧,但是Ubuntu不支持旧系统的维护,所以需要自己修改软件源,我现在在学校,使用的教育网,你可以参照你的环境配置更新的软件源,这个我就不再赘述了,当然你可以将我的Ubuntu拷过去(如果需要可以联系我)
步骤1:所有 Makefile 里 -mcpu=i386 为 -march=i386
步骤2:将 kernel/blk_drv/blk.h 文件第87行 将 #elif 修改为 #else
步骤3:同时:linux-0.11所有目录下的makefile和Makefile的CFLAGS都要加上-fno-stack-protector选项
步骤4:make
ld -m elf_i386 -Ttext 0 -e startup_32 boot/head.o init/main.o \
kernel/kernel.o mm/mm.o fs/fs.o \
kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a \
kernel/math/math.a \
lib/lib.a \
-o tools/system
nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aU] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)'| sort > System.map
gcc -Wall -O -fstrength-reduce -fomit-frame-pointer \
-o tools/build tools/build.c
objcopy -O binary -R .note -R .comment tools/system tools/kernel
tools/build boot/bootsect boot/setup tools/system > Image
Root device is (3, 6)
Boot sector 512 bytes.
Setup is 312 bytes.
System is 128323 bytes.
rm tools/kernel -f
sync
编译 linux 内核 0.11 版本成功了!
就可以编译通过了。
(同时需要可编译程序,可以联系我)
总 结:编译需要一个过程,学习也是同样需要一个过程。虽然可以利用赵博士修改好的 kernel-0.11 版快速的编译内核,但是那样就不会遇到太多有价值的编译问题,而解决这些问题就是一个学习过程,相信赵博士在编译0.11版本内核的时候也遇到了这些问 题。这样我想起了高中解数学难题的时候,高手解体时总是省略了一些因式分解的过程,而对于菜鸟来说这些省略的过程是非常重要
这篇关于Linux 环境下编译 0.11版本内核 kernel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!