现在的位置: 首页 > 综合 > 正文

一个操作系统的环境配置

2013年08月08日 ⁄ 综合 ⁄ 共 2859字 ⁄ 字号 评论关闭

    我最近逛论坛的时候发现网友在讨论一本书,一个操作系统的实现,这本书的作者是于渊,看着他的书,对其很是钦佩。我在开始学习操作系统的时候,一直在找一本实践型强的操作系统书籍,但逛遍图书馆都没有找到一本好的,大部分都是理论型的,给你讲讲什么是进程,内存管理。。。。这让一个刚接触操作系统的人来说,简直就是空中楼阁嘛,我没有看几页,就还回去啦。

    这本书不同,他让我有一种可以自己实现一个操作系统的感觉,让我觉得操作系统触手可及。作者有些话说的很让我认同,国内引进的是国外精湛的理论知识,强调的是对理论的深刻认识,最终以分数的形式来呈现。国外是通过不断地实践来归纳出精辟的理论,让后人更加系统地掌握实践过程。

    本书第一章给大家讲的是如何写一个程序,由BIOS直接调用来执行,也就是裸机跑程序,看到这你是不是会想到单片机呢,不过这个可比单片机有意思多了。通过这本书你可以学习到很多知识,你可以将很多你学过的或接触过的东西联系起来,并对其有更加进一步的了解。首先我们来说说我们安装操作系统的过程,我相信大家都干过,不就是把光盘一插,点两下的事嘛,这是它的表面,你是否对这个过程了如指掌呢?我们打开电源开始,执行的是一些自检程序,最终CPU的控制权在BIOS手中,这个时候的CPU和单片机没有什么两样,在装操作系统之前,我们都要先对BIOS设定,让它从光盘启动,这就是告诉BIOS去读取光盘里的程序。这里我再提一点,我们在上课的时候知道内存是由RAM和ROM组成,你应该明白ROM就是用来放BIOS程序的。BIOS读光盘的过程又是如何呢?BIOS会检测软盘的0号扇区,里面存放的是一个BOOT,这里又要讲到软盘的结构,软盘大家可能没见过,因为这个玩意已经淘汰了,取而代之的是光盘,其实这个时代差不多是U盘的时代了,我还是很有幸在小学的时候见过我堂哥用过软盘。。呵呵,其实原理都是一样的
了,我想你应该听过这些东西的结构,只是没有注意,磁头,磁道,扇区,这些词是不是很熟悉呢,翻翻书吧,一个扇区是512字节。BOOT的格式:代码和0xaa55的结束标志,在代码里无非实现继续加载软盘的内容进入内存。很明显,你要了解的东西是BIOS中断,怎样去读取磁盘的内容。讲到编程就必须要牵扯到语言,你学的汇编可以派上用场了。讲来这么多,给大家贴段代码吧。。

%ifdef _DEBUG_
    org 0100H
%else
    org 07c00H
%endif
    mov ax,cs
    mov ds,ax
    mov es,ax
    call DispStr
    jmp $
DispStr:
    mov ax,BootMessage
    mov bp,ax
    mov cx,16
    mov ax,01301H
    mov bx,000cH
    mov dl,0
    int 10H
    ret
BootMessage:    db    "Hello,os world!"
times    510-($-$$) db 0

    dw 0xaa55

这本书里的第一个示例代码,汇编没认真学的,可以好好温习了,现在很多人可能学的都是高级语言,像C,C++,JAVA等等,但我还是很喜欢原始的一些东西。忘了给名词了,以上是引导扇区,呵呵,记住这个词,在以后看书的时候要注意咯。要运行这个程序还不容易,虚拟机BOCHS,虚拟软盘,以及写软盘的软件,这就是我今天干的事情搭建操作系统的开发环境。

      这里作者推荐的环境是LINUX,我一直都支持WINDOWS的,顶多在必要的时候开下虚拟机运行下RED HAT来进行必要的开发,但后来发现我进WINDOWS做的惟一一件是就是挂QQ,大部分时间都是在虚拟机里的,但查找资料,看看电影还是在WINDOWS下了,问题是找到资料又得传到虚拟机里来,这样不断切换环境实在是无法忍受啊,所以开始摒弃WINDOWS,进入双系统时代,安装一个UBUNTU,很方便,用了几天,感觉还是很爽的。安装也很方便,有在WINDOWS下的安装包,装完就有双系统了,呵呵,真是挺好。

      写代码需要编辑器,在WINDOWS下要么用集成开发环境,要么就用SI,在UBUNTU中,我接受作者的建议尝试下EMACS,编译器就不用多说了,GCC大家都懂的,还有一个汇编编译器NASM,现在是学习作者的经验,所以尽量使用他推荐的,到自己学成之后,再根据自己的喜好来选择吧。最后重要的调试我们的操作系统的,BOCHS,安装这个有点麻烦。前面几个都好安装,就是最后那个模拟器装了好久。

1.sudo apt-get install emacs

2.sudo apt-get install build-essential nasm                 这个一定要记得装build-essential,要不后面会缺少组件,装BOCHS时通不过。

3.安装BOCHS,我是到官网下了源码,

   将其解压,进入目录,输入./configure --enable-debugger --enable-disasm   这些大家都应该能理解,单词意思很简单明了。

   但是过程会很曲折,执行这条命令的时候会出现很多错误,老是提示缺少文件包,这个时候你就得一个一个地安装这些包,

   无非就是用指令:sudo apt-get install *****

  然后make,我在上诉过程中纠结了很久,一直通不过,一个一个百度错误最后解决的,大家耐性点。

  最后就是make install..这里都不会有问题了,等安装完成吧。

软件都差不多安装好了,我们来制作一个软盘,BOCHS中有一个工具bximage用来生成软盘镜像。

使用命令:dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

向软盘中写文件,这样就得到一个有BOOT的软盘,马上就可以运行它了。

#how much memory the emulated machine will have
megs: 32

#filename of ROM images
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file = /usr/share/vgabios/vgabios.bin

#what disk images will be used
floppya: 1_44=xing.img,status=inserted

#choose the boot disk.
boot:floppy

#where do we send log messages?
log:bochsout.txt

#disable the mouse
mouse : enabled=0

#enable key mapping,using US layout as default.
keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/x11-pc-us.map

BOCHS通过这个配置文件运行。。。运行通过了。。happy!!!

【上篇】
【下篇】

抱歉!评论已关闭.