linux 0.11源码编译,linux0.11源代码在gcc4.3.x gcc4.4.x下编译bochs下模拟

注明:本人刚刚开始学习linux系统,纯纯的小菜鸟一个,在这里写下这篇文章的主要目的是记载最近的一些工作,本文的大多数内容均来自互联网上的先驱者,此处只是

注明:本人刚刚开始学习linux系统,纯纯的小菜鸟一个,在这里写下这篇文章的主要目的是记载最近的一些工作,本文的大多数内容均来自互联网上的先驱者,此处只是在自己现有的环境下,根据需要进行了一些资源的整合,另外本文只是一个工作记录性质的日记,并没有技术含量,因此,望各位看官明确!最后再次隆重声明本文借鉴了很多先驱者的相关工作,如果文中没有提到着实是因为时间太长了找不到出处了,还望各位原创的前辈们见谅!谢谢你们的工作!

最近在学习linux系统,看着那些shell命令,试了一下但是总觉得很虚,结果是出来了,可感觉什么也没学到,于是开始学习赵博士的“linux内核完全注释修正版V3.0”,赵博士工作的重要性我就不多说了,,那会儿就能学成这样,可见一斑真是名副其实的骨灰级玩家!

机器环境:CentOS6.5 + gcc4.4.7

毫无疑问,想着即使代码看懂了,总得运行一下试试吧,虽然还没开始看到linux0.11的源代码,总觉得应该现在机器上运行起来才觉得这个东西是有用的、有道理的,于是自己在kernel网站上下载了一个linux0.11下来想编译一下,那问题多的真是。。。。所以先在赵博士的下了一个linux-0.11-060618-gcc4.tar.gz,解压以后确实可在gcc4.4.7下编译生成一个内核文件Image,但是没有办法使用bochs模拟器运行,再网上搜索了很久,依旧没有找到任何解决办法,可是自带的bootimage-0.11-hd却可以完美的运行,实在是不解啊,有人说是编译器版本太高,要用gcc4.3.x,于是上网找gcc4.3.x下来自己编译,谁知道这个软件依赖的东西真是有点多啊,网上有人已经收集好了gcc-required-gmp-mpc-mpfr.tar.gz,具体方法只要解压进去改成相应的名字就行,完了就是漫长的编译过程,注意在./configure的时候指定合适的安装路径,安装完gcc4.3.0和gcc4.3.6后,均能编译成功,但是依旧不能运行,每次都停在了Loading

System...就不动了。。。。真是无力啊!!!

然后没看源代码,先把赵老师的最后一章看了一下,倒是看明白了一些原理,可是还是不行,最后结合自己看书后的理解,以及网上的一篇文章“Ubuntu12+GCC4.6+Bochs2.6下运行Linux0.11”,可算是运行起来了。步骤如下:

(1)下载赵老师的linux-0.11-060618-gcc4.tar.gz和linux-0.11-devel-050518.zip;

(2)分别解压后,取出linux-0.11-devel-050518中的虚拟硬盘映像hdc-0.11-new.img拷到linux-0.11-060618-gcc4解压后的linux文件中;

(3)根据上面的文章,修改两个地方

一 boot/head.S:在setup_paging函数的返回ret前加一个cld;

二mm/memcopy.c:修改函数unsigned long get_free_page(void), 将代码"movl %%edx,%%eax\n"改成  "movl %%edx,%%eax\n\t"  "cld\n"两句;

(4)然后make就可以成功了

编译完后的默认是从软盘启动的,并且采用的软盘根文件系统,本文将虚拟硬盘hdc-0.11-new.img作为根文件系统,采用的bochs配置文件如下:

romimage: file=/usr/local/share/bochs/BIOS-bochs-latest

megs: 16

vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest

floppya: 1_44="Image", status=inserted

ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, h    eads=16, spt=38

boot: a  //从软驱启动

log: bochsout.txt

需要对内核映像文件Image中的指示根文件系统的部分做一些修改,步骤如下:

(1) vim -b   Image

(2)    :%!xxd

(3)   修改第32行的55aa前面的两个字节为0103,代表第一个硬盘的第一个分区

(4):%!xxd -r

接下来就可以用bochs来模拟运行linux0.11了:bochs -q -f ****.bxrc了,运行时默认是可以调试的,我们直接“c”就行了。

编译时代码blk.h中出现 87行#elif语法错误,直接改为#else 即可。虽然东西不多,也没什么技术含量,可花的时间真是不少啊,要不总觉得即使看懂了没有办法编译运行,就没有办法尝试去修改(虽然我真的很菜鸟,但是想法总是可以有的啊)!多谢各位前辈的努力!!!!尤其是赵博士已经解决了大部分的问题,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
带中文注释可成功编译运行的Linux0.11Bochs2.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、付费专栏及课程。

余额充值