读书人

最简略操作系统(orange os样例)

发布时间: 2012-08-07 14:54:48 作者: rapoo

最简单操作系统(orange os样例).

于渊的《自己动手写操作系统》告诉我们如何自己写一个操作系统,当然写操作系统是个很难的事情,所以我们要慢慢来,先看看如何展示在裸机上写一个最小最小的“操作系统”,也许根本称不上操作系统。

?

操作系统的初步概念。

?

操作系统就是用CPU指令控制硬件,发声,发光,读写等等。CPU不同也会导致指令集合不同,CPU有通用CPU,arm芯片等等,还有专用的芯片等等。我们这里考虑的是80*86,intel通用CPU。

?

在我们在电脑城购买了一台裸机,拼装好之后,实际上已经附带了一个操作系统,BIOS系统。这里面已经集合了一些功能和“函数”。

最简略操作系统(orange os样例)

如果我们进入这个操作系统,我们还是能获得很多能力的,一个图形化的界面,呵呵。还有一些看不到的内容,终端向量的设置,就是一些函数。(当我们需要调用的时候,发个终端,CPU执行终端功能代码,就好比,我们叫“我要吃饭”(12号中断),找到12号中断的入口地址(12号服务给你炒菜做饭),然后返回。

?

?? 我们要自己写一个操作系统,写入硬盘,然后从这个影片启动。

?? 首先创造一个虚拟硬盘。

?? 最简略操作系统(orange os样例)

?

?

?? 调整这些硬盘的端口数,就可以调整这些硬盘的启动顺序,我们先让ubuntu.vdi在上面,进入系统,我们还要做一些事情。

?? 创造好虚拟硬盘后,但是这个硬盘还没有格式化,就是CPU无法对其进行读写,硬盘的mbr都没有建立。mbr大概好比沃尔玛建立了一个大超市,但是没有柜子,格子,货架。大米放哪个货架,白砂糖要放哪个格子,都是有规矩的。mbr就好比硬盘的格子,柜子,方便CPU定位物理存储位置。

?

????我们需要用fdisk这个工具格式化/dev/sdb下面这个盘。具体细节以后补充。

?

? ?首先,我们要切换到用户root

? ? su root,输入root 用户密码。

? ? 键入命令 fdisk -l可以看到硬盘的分区情况,如图。

最简略操作系统(orange os样例)

? ? 键入help,可以看到fdisk命令的用处。

?

首先,我们要n

? ? 创建一个primary partion, 分区都是默认值,最后w,写入磁盘。

? ? 这样分区就创建好了。

??? 操作系统用NASM编译好后,放到共享文件夹里面,用dd写到格式化好的硬盘中去。

?? 代码直接从一个哥们的网站上copy过来。

?

org 07c00h ;告诉编译器程序加载到7c00处  mov ax,cs  mov ds,ax  mov es,ax  call DispStr ;调用显示字符串例程  jmp $  ;无限循环    DispStr:   mov ax,BootMessage   mov bp,ax ;es:bp = 串地址   mov cx,16 ;cx = 串长度   mov ax,01301h ;ah = 13, al = 01h   mov bx,000ch ;页号为0(bh = 0) 黑底红字(b1 = 0Ch,高亮)   mov dl,0   int 10h   ret  BootMessage: db "Hello, OS world!"  times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码       ;为512字节  dw 0xaa55    ;结束标志  
?
??? 格式化好了,再用dd工具把“操作系统"写到这个磁盘中。

? ?如果你想确认一下里面的数据是否正确 用命令 hexdump /dev/sdb看看和你的“操作系统”的二进制是否一致。

?

? ? 但是我后来又摸索了一下,好像分区不是必要条件,只需要用dd写入到这个磁盘,然后从这个磁盘启动就OK了。

?

? ? 但是写orange OS,和bochs 2.4.6里面的oldlinux的Image好像是OK的,用linux0.00(交替产生“aaaa","bbbb"那个版本的)好像不OK,还有dd这个工具写入,有时好像会写错,反正就是和我用UE看到的16进制不同。

??? 启动之后的效果图如下:

最简略操作系统(orange os样例)

?

读书人网 >操作系统

热点推荐