天天看点

ubuntu环境下写一个简单的操作系统(一)环境配置

    写在前面:笔者一直想写一个简单的操作系统,今天终于准备着手开始了。正文开始之前首先感谢《30天自制操作系统》和《orange's  一个操作系统的实现》的作者书中内容浅显易懂给我这中门外汉提供了很大帮助。另外也感谢王爽老师的8086汇编ppt,使我对8086汇编有了更多的认识。

一. 环境准备

    以下的所有内容都针对ubuntu而言,所以你最好有一个ubuntu的系统,如果你用的其他linux桌面版的话,这并不是很重要,因为linux 发行版操作都是大同小异。但如果你使用的是windows 10 或者 其他操作系统的话可能会有一些小的不同点需要自己探索,作为一个忠实的linux拥戴者,我建议你尝试一下ubuntu这个系统,相信我你会爱上她的。

    NASM安装

    你可以去NASM官网下载一个名为nasm-2.13.03.tar.gz 的安装包,名为nasm-2.13.03-xdoc.tar.gz的压缩包里面为说明文档。下载完成后进入下载目录,从当前目录打开终端执行以下命令:

tar -xzvf nasm*
cd nasm*
./configure
make
make install
           

安装好之后,在终端输入nasm就会出现提示了。

    virtualbox安装

    virtualbox是一款开源的虚拟机软件,能够让我们在其上运行我们的操作系统。可以去virtualbox官网免费下载,ubuntu系统需要下载deb后缀的安装包,下载之后进入deb包所在的目录执行以下命令:

sudo dpkg -i virt×
           

完成安装即可。

    然后我们需要一个文本编辑器,你可以用linux传统的vim,sublime,或者gnome桌面官方的gedit,或者像笔者一样使用atom,这个就不具体讲了。

二. 小试牛刀

    环境呢先就这样了,以后需要什么我们以后再说现在我们可以开始我们操作系统的开发了,在一个工作目录新建一个hello.asm文件,输入以下内容:

org 07c00h ;程序地址07c00
mov ax,cs
mov ds,ax
call dispStr ;调用显示字符串的函数
jmp $ ;死循环
;显示字符串
dispStr:
mov ax,bootMessage
mov bp,ax ;es:bp =串地址
mov cx,16; cx=串长度
mov ax,01301h ;ah=013 al =01
mov bx, 000ch ;页号为0 BH=0 黑底红字(bl = 0ch ,高亮
mov dl,0
int 10h ; 10号中断
ret;从子程序返回
bootMessage: db "hello, os World!"
times 510-($-$$) db 0 ;填充下面的字节使恰好为510,最后两个字节为aa55
dw 0xaa55
           

这些代码呢如果你了解汇编的话很容易看懂,如果看不懂的话建议你先看一下8086汇编,不过这都不重要啦,我们现在只有记住三个只是点:1,软盘的一个扇区总共512个字节,如果计算机从软盘启动的话BIOS会检查软盘第一个扇区的最后两个字节,如果是aa55的话就认为是一个引导扇区。2, org命令是将命令加载到某个位置,而我们加载到了0x7c00的位置至于为什么是这个位置呢,后面再说。3,我们为了显示字符使用int命令调用了一个10号中断。

    好了,开始我们就知道这么多吧,让我们开始编译吧,等等,软盘呢?都2018年了去哪儿找软盘?先别担心,NASM能够帮助我们生成一个虚拟的软盘镜像在当前文件夹执行以下命令:

nasm hello.asm -o hello.img
           

一个虚拟的软盘镜像就生成了。

    装机

装进虚拟机试一下吧,首先打开virtualbox 新建一个虚拟机设置如下

ubuntu环境下写一个简单的操作系统(一)环境配置

许多东西只要选择默认即可一路向下。

新建好之后选择设置-->存储如图所示:

ubuntu环境下写一个简单的操作系统(一)环境配置

发现只有硬盘和光驱没有软盘,点击最下的绿色加号添加存储介质,选择软盘,确定就行了。

ubuntu环境下写一个简单的操作系统(一)环境配置

Floppy旁边有一个文件的加号,点击选择我们的helloos.img , 确定,启动就好了。

    启动之后效果如图:

ubuntu环境下写一个简单的操作系统(一)环境配置

不管怎么说,是不是我们的操作系统已经能输出东西了,有没有很激动呢?

继续阅读