• 18
  • 12月

花了一周的时间折腾Ubuntu玩,觉得该干点正事了。于是决定在上面搭建linux0.11的编译实验环境,把上次改内核时没搞定的问题搞定。做一个真正的最小化内核。

首先想到的就是《分享我的0.11实验环境》这个帖子,课上老师给的windows下的实验环境就是这里下载的:
http://oldlinux.org/oldlinux/viewthread.php?tid=3850&extra=page%3D1
于是下载它的linux实验环境。

不过由于作者使用的是Debian Sid,而且时间过去实在也很久了。在最新的Ubuntu7.10上使用会遇到很多问题。经过一番google之后终于将其搞定。总结过程如下:

1.下载linux-0.11-lab_060618_041042.tar.bz2并将其内容解压到用户主文件夹,如:/home/riqe/linux-0.11-lab

2.安装必须的软件build-essential(编译环境)、bin86(编译bootsect和setup)、mtools(处理软盘镜像)、bochs(虚拟机)

sudo apt-get install build-essential bin86 mtools bochs bochs-x

3.修改Makefile。GCC4.1 默认检查stack安全,会导致出现__stack_chk_fail错误。分别打开source/linux/kernel/Makefile、source/linux/kernel/chr_dev/Makefile、source/linux/fs/Makefile三个文件,在CFLAGS参数中加入-fno-stack-protector,变为:

CFLAGS	=-Wall -fstrength-reduce -fomit-frame-pointer -fno-stack-protector
	 -nostdinc -I../include

这样就已经可以按照说明执行make了。make过程中会产生一大把警告,但只要没有错误就不影响最后的结果。

4.修改mcopy_kernel、edit_menu.lst、linux-0.11文件,将它们第一行的

#!/bin/sh

改为:

#!/bin/bash

这样执行的时候就不会报错了。

5.修改conf/0.11.bxrc找到以下内容:

#ata0-master: type=disk, path="images/hdimage", mode=flat, cylinders=121, heads=16, spt=63

在下面添加一句:

ata0-slave:type=disk, path="images/c.img", cylinders=410, heads=16, spt=38

然后复制一份images下的hdimage-devel.img,重命名为c.img,再放回到images下。以解决0.11内核在bochs2.3下启动时的“HD controller not ready”问题。(原文及另一个解决方法

经过这么一番修改,已经完全可以在Ubuntu下的gcc4.12和bochs2.3下编译及运行linux0.11。截图如下:

直接在系统下编译的速度果然比在bochs下不知快了多少,而且还可以用安装了taglist等插件的gVim方便地进行代码查看和修改,爽!

PS:偶然遇上了在Windows下编译内核的帖子,怎么当初在交实验报告前没看见呢?唉……

标签:

您可以对这篇文章发表一条评论,或者在您自己的网站中引用 (Trackback) 它

发表一条评论

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程