最后更新时间:2008年02月21日19点08分
免费电子书《使用开源软件-自己动手写操作系统》的官方主页为:http://share.solrex.org/WriteOS/ ,您可以到这里下载 pdf 格式电子书和随书源代码。
我叨叨了一个多月的这本书总算能发布第一个版本了,娘啊,费了老鼻子劲了。好多工作要花费在排版上,因为希望整得效果好点儿嘛!而且写了才知道,把自己知道的东西清楚地表述出来真不是件容易的事儿。啥也不说了,看图,还有目录。
写在前面的话i
序言vii
第一章计算机启动1
1.1 计算机启动过程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 磁盘抽象物理结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 硬盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 软盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.3 启动扇区. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 使用虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 VirtualBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2 Bochs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 使用软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.1 制作软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.2 用软盘镜像启动虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
第二章最小的“操作系统” 19
2.1 Hello OS world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1 Intel 汇编转化为AT&T(GAS) 汇编. . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.2 用连接脚本控制地址空间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.3 用Makeˉle 编译连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.4 用虚拟机加载执行boot.img . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2 FAT 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 FAT12 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.2 启动扇区与BPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.3 FAT12 数据结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.4 FAT12 根目录结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3 让启动扇区加载引导文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.1 一个最简单的loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 读取软盘扇区的BIOS 13h 号中断. . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.3 搜索loader.bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.4 加载loader 入内存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.5 向loader 转交控制权. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.6 生成镜像并测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4 本章全部源代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
太赞了
太好了,缺啥来啥
下载好慢啊
还是赞你一个
好东西不易得
$!@%%^#$^@$!$#!$@,竟然还要email must
太帅了。
祝贺了!帮你到百合软院版去广告一下,可惜最近没有时间看了。
PS:
下载是很慢,我等。
牛人,辛苦了。拜读中。。。
8) 好书呀,于渊的那本书我也看过,也想过为什么不用开源软件~这本书一定会造福很多人的~
帮你宣传下~ 人肉 trackback:
http://www.linuxgem.org/tip/Write-OS-with-Free-Software.html
从solidot过来的,写的不错,辛苦了。
几个小错误:
第21页: BOIS 将PC控制权转交给这个位置运行的程序
第26页: 跳转指令,用于过以下的扇区信息
第37页: 生成光盘镜像
把书中讲的FAT12文件系统变为ext2或者其他free的文件系统那就更完美啦!
[Comment ID #267032 Will Be Quoted Here]
谢谢
也是从solidot过来,写的很好,期待精彩继续~~~
-------
第35页:但是从FAT 表中寻找其它的扇区还是意见麻烦的事情
哈哈,支持你
非常支持你的行动,中国的开源事业就需要你这样无私奉献的人,加油!
作为一个南京人,为你骄傲 :)
期待你的后续篇章!
thank you very much! you've done a great job~
太酷了,才看到你blog,呵呵看了介绍 发现你是我校友哦,南大毕业,中科院研究生哈,有空联系下吧校友弟弟。
Free Software!=开源软件,开源是OpenSource
在这本书中学到了很多东西,感谢
建议写完后电子版和图书版一起发布
我一定会买一本来表示对作者的敬意
[Comment ID #267094 Will Be Quoted Here]
谢谢鼓励,但是本书并没有实体书出版计划。 :)
很不错哦,可惜我对操作系统初始阶段很头晕阿。
12 页
-----5. 更新 SECD 所有硬件都检测配置完毕后,多数系统 BIOS 会重新清屏并在屏幕上方显示出一个
表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作
参数。接下来系 BIOS 将更新 ESCD(ExtendedSystemConfigurationData,扩展系统配置数
据) ESCD 是系统 BIOS 用来与操作系统-------
第一个 SECD应该也是 ESCD吧 ::)
:cry: :cry:
;)
绝对支持
为什么第二章不是使用ext2呢?
帅哥博士,怎么不写了阿,已经四个月了阿,是不是在忙着拍拖了,还是被出版商看中了???
出来跟我们说下咯~~~~
WOW!
Well done!
好有耐心啊。
别说让我写,单单给我文章要我排版成一本书,我都懒得弄>_<
博主的《使用开源软件-自己动手写操作系统》主要讲了从裸机装入并运行一个用asm或C写的程序。
我认为操作系统就是要建立一系列抽象概念与模型,来达到高效、安全地为用户服务的目的,这些概念、模型应独立于具体硬件。做操作系统最关键的因素有:编译器和抽象概念与模型。编译器的特性必须完全掌握;再用编译器平台所支持的语言书写你设计的思想:抽象概念、模型。
不过该书对于理解计算机启动和操作系统如何获得控制权有很大的帮助作用,毕竟计算机的许多概念要靠实践来理解消化。
有什么不妥的评论,可以再讨论。
[Comment ID #271021 Will Be Quoted Here]
呵呵,您说的很好,但是操作系统的东西 Tanenbaum 写的已经很好了,我的目的自然不是写那样一本书
这本书的目的就是为了介绍如何从零开始做而不是概念
不容易啊,连排版都这么专业,我一定要好好消化消化!
感谢楼主,中国的开源软件需要象你这样的人,加油!
非常好!非常感谢楼主!希望楼主或读过楼主此书的热心人能组织个研究小组,再深入改写这个操作系统,希望能集国人的智慧,做一翻不朽的事!当然,支持开源! -_-
最近对操作系统很感兴趣,最开始学的时候没学好,看代码最开始看windows(wrk)的,接触linux晚了,现在看linux一段时间了,看的也是不太明白:(这么庞大的系统不太好学。看了《自》书,再看您的书感觉很棒,坚持看你的书好好学:)期待你的佳作!
well done !
这个算是新新左派代表的杰出作品。
“新新左派”定义可以查阅今年05月份出版那期的《艺术与设计》。
很好,呆会我一定上 solidot 发文。
学长好,
我做了一件跟你做的类似的事——用开源的工具完成一个简单的操作系统。
显然相对你做的工作,我做的事要简单的多,只有代码,并且代码还相当幼稚。
但因为我的毕业设计也要做类似的事,所以我先得把我已经写完的代码拿出来,
不然以后可能说不清楚。
我的代码近似翻译了于渊《自己动手写操作系统》一书的代码,当然也借鉴
你的在《使用开源软件-自己动手写操作系统》中的代码。
现在我“翻译”的进度已经到《自己动手写操作系统》书中的第14章,稍先于
《使用开源软件-自己动手写操作系统》的代码进度。
我这些代码只是自己学习所用,缺少版权声明,很是不妥。
我是很愿意与大家分享我的代码的。
只是这些东西我大概半年没有碰了,其中可能存在的问题现在也不能很熟练的指出来了。
附上可以找到我的代码的url:
http://groups.google.com/group/tech_newbie/web/14keyboard.tgz
http://groups.google.com/group/tech_newbie/web/13priority.tgz
http://groups.google.com/group/tech_newbie/web/12sys_call.tgz
http://groups.google.com/group/tech_newbie/web/12syscalla.tgz
http://groups.google.com/group/tech_newbie/web/11.tgz
- 曹琛
南京大学05级信息管理系
ken.ccao@gmail.com
非常感谢您的共享,我在以后的工作中会参考您的代码,谢谢!
我才不久开始研究Linux OS.我看了下,你的书写得很好。非常感谢你的共享,谢谢。期待下个版本。-_-..-_-
作者~~您实在是太厉害啦~~大赞一个~
不错,赞一个。
就是大篇大篇的汇编代码看着头疼,顺便问一下能不能用C实现?