编译linux-0.11,在Ubuntu7.10下编译linux0.11源码及建立实验环境

花了一周的时间折腾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。截图如下:

Screenshot.jpg

Screenshot-1.jpg

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
带中文注释可成功编译运行的Linux0.11+Bochs2.62实验环境说明 此注释以网上获得的“linux带中文注释的0.11版本”为基础,对照赵炯博士《Linux内核完全注释(0.11) 》V3.0版(http://oldlinux.org/download/clk011c-3.0.pdf)编辑而成。作为对赵博士感谢,以及对Linux初学者的回馈,特发布在CSDN上。 此注释可以在http://oldlinux.org/Linux.old/bochs/提供的Linux-0.11-devel-XXXXXX实验环境下正确编译成功,使用:"make disk"命令重启Bochs虚拟机后,新编译源码直接生效,便于学习者直接阅读源码,直接进行实验。 注意事项: 1、为了使注释版与实验环境上的Linux0.11内核保持一致,达到对应文件可以互换的目的,与Linux0.11原始版本相比,加入了15个系统调用函数(参见include/Linux/sys.h第78-92行。赵博士原书没有这部分注释,我不敢班门弄斧),其它相关的文件加入了相应的定义。新加入的代码只有函数体定义,没有具体实现,对其它原始代码没有改变、没有影响。 2、键盘定义改成了美式键盘(原始代码中是芬兰键盘,会导致个别键出问题,调试的时候我曾被迷糊了好久,以为自己把程序搞乱了)。 3、把网上VC版的注释统一改成了 “/* */” 格式的注释。经测试,在Linux0.11实验环境中(gcc1.40),只有标准C注释语法可以正常编译。 4、由于《Linux内核完全注释(0.11) 》原书版本更新的原因,注释中提到的图、表可能与V3.0版书中不一致。 5、由于代码中加入注释,代码行号发生变化,注释中提到的代码行号会出现不一致,建议对照3.0版查询对应内容。 6、实验方法:请先安装附带的Bochs2.62版安装包,双击Test.bxrc即可启动实验系统,执行命令:sh t,即可完成对linuxcn的编译。 7、linux目录中是此实验系统中/usr/src/linux提取出来的不含中文注释的linux0.11源码(此版本比原始的0.11版多15个系统调用函数),linuxcn是加入了中文注释的源码。 8、diskb.img是实验系统与Windows环境下进行文件交换的1.44M软盘映像,执行脚本命令"sh t"时会自动从此映像中读取linux.tar、linuxcn.tar包,解包并编译编译结果在:/usr/root/zw/linuxcn目录下。为了方便文件交换,建议使用7zip为压缩/解压缩工具(7zip可以直接生成tar包),用WinImage实现Windows环境与软件映像交换文件。 9、实验系统下 .profile中加入了几个命令,请读者注意。 10、若实验环境的启动盘被破坏,请用压缩包中的bootimage-0.11-hd覆盖对应文件即可。 11、若实验环境的要命文件系统被破坏,请用压缩包中的hdc-0.11-new.img覆盖对应文件即可。 2014-5-4 cyfx2288

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值