Linux 0.11

转载于: http://tinylab.org/take-5-minutes-to-build-linux-0-11-experiment-envrionment/

1 故事

大概在 2008 年 5 月份开始阅读赵博的《Linux内核完全注释》,并在当时 兰大开源社区 的博客系统上连载阅读笔记。

每阅读完一部分就会写一份笔记,当时社区的反响还是蛮大了,因此结识了很多技术方面的好友。

但是大概在 2009 年初,自己出去实习了。因为实习工作任务繁重,所以这部分阅读工作未能继续。另外,那个博客网站因为升级故障,导致数据被破坏,到如今都无法访问。

还好当时有做数据备份,2013 年左右在自己机器上重新把网站恢复出来,博客系统的数据总算找回来。并且已经陆续把部分重要文章整理到了如今的 泰晓科技 平台上,希望更多的同学受益。

计划逐步把当时的阅读笔记整理出来并抽空阅读剩下的部分。

这里先分享如何快速搭建一个 Linux 0.11 的实验环境,这是阅读这本书非常重要的准备工作,因为作为实践性很强的操作系统课程,实验环境是必要条件,否则无法深入理解。

2 更多细节

好了,如果想快速上手,可以直接跳到 下一节

2.1 往事回首

赵老师书里头介绍的是在 Redhat 环境下用 Bochs 仿真系统来跑 Linux 0.11,通过实验发现诸多问题,不断摸索,阅读计划不断推迟,因为蛮多时间浪费在实验和调试环境的打造上了,分享一下这段历史吧:目前已经成功地把linux-0.11移植到gcc 4.3.2,当时还是做了一些工作的:

  • 可以在 32 位和 64 位的 Linux/x86 系统上编译
  • 支持最新的 Gcc 4.3.2,并同时支持 Gcc 3.4, 4.1, 4.2, 4.3,也就是说不管你机器上安装的是这里头的哪个版本,该代码都可以正常编译
  • 在最新的 Ubuntu 和 Debian 系统上测试通过
  • 在 bochs 2.3.7 和 qemu 0.9.1 上正常启动
  • 其中的 boot/bootsect.s 和 boot/setup.s 已经用 AT&T 语法重写,并把原来的版本剔除,因此无须再安装 bin86
  • Makefile 文件被调整和增加了一些内容,更方便用户调整编译选项和移植,并更方便地进行实验
  • 用 Shell 重写了 tools/build.c,更容易理解

最终达成的效果是,可以非常方便地在当时最新的 Ubuntu 系统上学习和调试 Linux 0.11,为后续进一步研究 Linux 0.11 提供了最基础的准备。

2.2 八年之后

废话不多说了,从 2008 年到现在,自己在 Linux 方面的学习有了一定的进步,回头再看看曾经奋斗的历程,稍微有点小小的感动。

因为当时的博客以及档案的下载地址都已经失效,所以很多网友还时长会发邮件过来咨询。一般是直接把机器上备份的一些档案邮寄给大家。

最近也稍有在 Google 上检索 Linux 0.11,非常有幸看到有蛮多的 github 仓库备份并改进了我当时上传的代码。非常精彩的例子有:

  • https://github.com/yuanxinyu/Linux-0.11
  • https://github.com/run/linux0.11

非常感谢大家的工作,上面都可以直接在当前的 Ubuntu 环境下工作,第一份甚至都已经支持 Mac OS X ;-)

不过也还有可稍微改进的地方:

  • 把实验需要的 rootfs 镜像直接通过压缩的方式上传到仓库

    这样就可以形成一个完整的实验环境,压缩的好处是可以加快网络下载的速度;另外,为了避免额外的解压工作,在 Makefile 里头,我这个脚本控当然是代劳了。

  • 合并更多未曾发布的内容

    • 把 calltree 二进制文件直接打包进去,这样就可以直接用了(注:calltree-2.3 源代码也已经无法在最新的 Ubuntu 系统编译了!)
    • 添加了脚本 tools/tree2dotx,可以把 calltree 的输出转换为图片
    • 把 floppy 和 ramdisk 的包也打包进去,方便阅读相关代码,不过可惜的是,发现从 floppy 启动一直死循环,后面再解决吧,应该是代码问题
    • 其他微小调整

整个实验环境目前只有 30 M,压缩成 xz 只有 18 M,非常小。

3 五分钟教程

3.1 预备

先准备个电脑,XP 已死,建议用 Ubuntu 或者 OS X,这里主要介绍 Ubuntu,OS X 看 README.md 吧。

  
  
  1. apt-get install vim cscope exuberant-ctags gcc gdb binutils qemu

3.2 下载

  
  
  1. git clone https://github.com/tinyclub/linux-0.11-lab.git

3.3 编译

  
  
  1. cd linux-0.11-lab && make

3.4 从硬盘启动

  
  
  1. make start-hd

3.5 调试

打开一个控制台,从硬盘启动并进入 debug 模式:

  
  
  1. make debug-hd

通过 gdb 调试:

  
  
  1. gdb images/kernel.sym
  2. (gdb) target remote :1234
  3. (gdb) b main
  4. (gdb) c

3.6 查阅文档

README.md

3.7 查看帮助

  
  
  1. make help
  2. > Usage:
  3. make --generate a kernel floppy Image with a fs on hda1
  4. make start -- boot the kernel in qemu
  5. make start-fd -- boot the kernel with fs in floppy
  6. make start-hd -- boot the kernel with fs in hard disk
  7. make debug -- debug the kernel in qemu & gdb at port 1234
  8. make debug-fd -- debug the kernel with fs in floppy
  9. make debug-hd -- debug the kernel with fs in hard disk
  10. make disk -- generate a kernel Image & copy it to floppy
  11. make cscope -- genereate the cscope index databases
  12. make tags -- generate the tag file
  13. make cg -- generate callgraph of the system architecture
  14. make clean -- clean the object files
  15. make distclean -- only keep the source code files

3.8 生成函数调用关系图

  
  
  1. make cg
  2. ls calltree/linux-0.11.jpg

生成的图片见最后。


4 后话

是不是够简单便捷?

遇到任何问题欢迎参与回复互动,或者关注我们的新浪微博/微信公众号互动:@泰晓科技。

也可以直接到赵老师的站点上参与交流和讨论:http://www.oldlinux.org/oldlinux/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值