摘要: 如何搭建自己的开发环境 好了,到这里相信读者已经知道如何搭建自己的开发环境了,说白了它跟开发一个普通的软件区别基本就在一个虚拟机上。它既是我们的“硬件”,又是我们的调试 器,有了它我们安心多了。那是不是马上就可以开始我们的操作系统开发之旅了呢?很遗憾,还不能那么着急,因为你知道,操作系统是跟硬件紧密相连的,如果想 实现一个运行在使用IA32架构的IBM PC上的操作系统,免不了要具备相关的知识。其中的重头戏就是32位Intel CPU的运行机制,毕竟CPU是一台计算机的大脑,也是整个计算机体系的核心。 所以紧接着我们要学习的,就是要了解IA32保护模式。掌握了保护模式,我们才知道Intel的. 阅读全文
posted @ 2009-05-22 09:14 博文视点(北京)官方博客 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 我们在介绍QEMU时提到过,在Windows下你需要一个虚拟的Linux来帮你编译操作系统的源代码。将操作系统内核编译链接成ELF格式有诸多好处,我们不但可以用Linux下现成的工具(比如readelf)来分析编译好的内核,还可以在必要时参考Linux内核的源代码来帮助我们自己的开发,总之这拉近了我们与Linux之间的距离。所以不要因为在Windows下也离不开Linux这件事而沮丧,况且装一个Linux是件很容易的事情。 不过装一个虚拟的Linux跟装一个真实的Linux还是有所不同,主要在于两点。一是我们仅仅想用这个Linux来做编译链接的工作,所以在选择组件的时候尽量去除不必要的内容,这样可以节省时间和空间;二是要确保你选择的虚拟机容易跟宿主机进行网络通信,因为你需要将宿主机上的源代码拿给虚拟机来编译。 安装方法可以有多种选择,比较简单的方法是通过光盘安装,当然这个光盘也可以是“虚拟”的,也就是一个光盘映像。首先到你所中意的Linux 发行版的官方网站下载一个安装光盘的映像,有些发行版还提供免费或付费的邮寄服务,读者可以根据自己的喜欢自行选择。这里假设你得到 阅读全文
posted @ 2009-05-21 09:07 博文视点(北京)官方博客 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 平台之争:Windows还是*nix本文摘自于渊编写的《orange's:一个操作系统的实现》一书 读到这里,读者可能发现书中经常出现“如果你用的是Windows”或者“如果你用的是Linux”这样的字眼。有时这样的字眼甚至可能影响到你的阅读, 如果真的这样请你原谅。我试图照顾尽量多的读者,但是对每一个人来讲,却必须面临一个选择──在什么平台下开发。本书第一版使用的是Windows平台, 而在第二版中,我投诚了。接下来你会发现,虽然以后的行文会最大限度地兼顾Windows,但总体是以Linux为默认平台的。 其实在什么平台下开发,有时纯粹是口味问题,或者是环境问题──你开始接触计算机时 阅读全文
posted @ 2009-05-20 08:19 博文视点(北京)官方博客 阅读(593) 评论(3) 推荐(0) 编辑
摘要: 十分钟完成的操作系统 你相不相信,一个“操作系统”的代码可以只有不到20行? Example 1. chapter1/a/boot.asm 1 org 07c00h ; 告诉编译器程序加载到7c00处 2 mov ax, cs 3 mov ds, ax 4 mov es, ax 5 call DispStr ; 调用显示字符串例程 6 jmp $ ; 无限循环 7... 阅读全文
posted @ 2009-05-19 08:24 博文视点(北京)官方博客 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 在酷热的就业天气寻找几丝凉意邵志东谈程序员职业成长之路 5月17日 中午,中关村图书大厦5层多功能厅,博文视点大讲堂特邀《软件开发这点事—软件开发工具手册》的作者邵志东老师与读者进行了一场别开生面的专题讲座:在就业的冬天中寻找春意——程序员职业成长之路,现场反响颇佳,听众受益良多。 邵志东老师是微软最有价值开发者、微软中文网络广播最佳讲师,历任北京北大方正电子有限公司项目开发经理、北京新东方IT教育部门经理、北京新科海学校副 总经理。拥有近15年的软件设计、需求分析和项目管理、编程经验,熟悉整个软件项目管理流程,对.NET平台开发有着特别深入的研究。 讲座开始前半小时,读者就已陆续到场,很快室 阅读全文
posted @ 2009-05-19 08:23 博文视点(北京)官方博客 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 《Orange ’ s :一个操作系统的实现 》作者自序 本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多,但是关注如何帮 助读者实现一个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事,以作读者参考之用。本书面向实践,通过具 体实例教读者开发自己的操作系统。书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功 能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面,比如如何 阅读全文
posted @ 2009-05-19 08:22 博文视点(北京)官方博客 阅读(1421) 评论(0) 推荐(0) 编辑
摘要: 做真正Hacker 的乐趣──自己动手去实践本文是csdn总裁蒋涛先生为《orange's一个操作系统的实现》写的推荐序 2004 年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原 理,还需要实际动手写出原型。历史上的Linux 就是这么产生的,Linus Torvalds 当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程 序和文件系统,这成为了Linux 第一个内核的雏形。 我想中国有能力写出内核 阅读全文
posted @ 2009-05-18 08:42 博文视点(北京)官方博客 阅读(529) 评论(1) 推荐(0) 编辑
摘要: 磁盘的设备驱动堆叠本文节选自《Windows 内核情景分析--采用开源代码ReactOS》一书 读者已经在前几节中看到,设备的驱动常常分成“类设备驱动”和“端口设备驱动”两层。例如鼠标器就成为一个设备的类,而具体又有PS/2鼠标器、串口鼠标 器以及基于USB的HID鼠标器,所以鼠标器的驱动就分为一种类设备驱动和三种端口设备驱动。其中PS/2鼠标器的端口驱动是直接与硬件打交道的。不过端 口驱动也可能不直接驱动硬件,而只是对虚拟的硬件进行操作。HID鼠标器的端口驱动就是这样,因为它与实际的硬件之间还隔着USB总线这一层,因而需要把 HID的端口设备驱动堆叠在USB总线驱动的上面,USB总线驱动下面 阅读全文
posted @ 2009-05-15 09:15 博文视点(北京)官方博客 阅读(464) 评论(0) 推荐(0) 编辑
摘要: Windows的设备驱动框架中的上层与下层模块 在Windows的设备驱动框架中,下层模块向上层模块提供一个数据结构指针。但是,上层模块并不直接从这个数据结构获取具体的函数指针,更不直接使用这 些函数指针调用下层模块中的函数;而是通过一些由内核提供的函数下达“I/O请求包”即IRP,间接地调用下层模块提供的函数,要求其执行某种操作。这就 好像是向内核下一个定单,定单中告诉内核要由哪一个下层模块执行何种操作。另一方面,对于建立了形式“堆叠”的设备驱动,上层模块在运行中通常也没有如何 “找到”下层模块的问题,甚至根本就不必知道其下一层是什么模块或什么设备,模块之间已在建立形式堆叠的时候固定连接好了 阅读全文
posted @ 2009-05-14 09:04 博文视点(北京)官方博客 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 另一方面,设备驱动也是内核中最需要加以动态扩充的部分。这是因为在编译生成系统内核时常常无法确切地知道使用中究竟需要哪一些设备。显然,最好的办法是将各种设备驱动的堆叠做成可以动态安装的程序模块,就像在用户空间可以动态加载DLL一样。Windows正是这么做的,文件扩展名为.sys的模块就是此类可动态装载的内核模块。注意“模块”这个词在不同的语境下有不同的意义。当我们谈论内核管理层中的I/O管理模块时,是指逻辑上相对自成一体的一个部分,也许称之为“板块”更贴切一些。而在谈论.sys模块的时候,则是说一块可动态装载的可执行映像。这种可动态装载的可执行映像可大可小,事实上 win32k.sys就是这样一个模块。当然,其他模块就没有这么大了。在实践中,一般都根据具体的需要把一种特定设备的驱动程序堆叠实现成一个.sys 模块;或者把一个堆叠中的一层或几层实现成一个.sys模块,实际使用时则由一个或数个.sys模块提供该种设备的驱动程序堆叠。 阅读全文
posted @ 2009-05-13 09:53 博文视点(北京)官方博客 阅读(480) 评论(0) 推荐(0) 编辑