原创 操作系统-读书笔记(1)

2014-5-16 18:44 3470 23 29 分类: MCU/ 嵌入式 文集: 操作系统

最近在业余阅读时找到一本《自己动手编写操作系统》觉得不错,视角很新颖,是有关操作系统书籍中为数不多的看了不想睡觉的读本。

 

由于这本书的出版时间较早,书中引导盘还使用的是软盘,所以在跟随做的第一个实验代码时就遇到些小困难。最后实验成果后在此做个记录。

 

书中第一个实验就是编写一段汇编代码作为引导程序,编译后将二进制文件写入到引导盘(书中采用的是软盘),然后让电脑从软盘启动进而执行我们的引导程序。

 

首先给出书中的引导程序——boot.asm


    org 07c00h
    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


下面则需要对这段汇编代码进行编译,于是我们就遇到了第一个问题:选择什么样的编译器?如何编译代码?

书中推荐了使用NASM,至于为什么要选择NASM,大家可以百度一下NASM诞生的故事,它的诞生就是因为诸多汇编编译器的种种劣势,最后催生出NASM这个比较好用的编译器。

安装NASM。NASM没有图形化界面,要么装在DOS下,要么装在Linux下。本人的电脑是WIN8+Ubuntu的虚拟机,所以果断选择在Ubuntu中安装了NASM只需要在终端敲上apt-get install nasm,然后等着安装完成即可。安装后测试下:

 

01.jpg
安装完成编译器后将windows下编写好的代码拷贝到Ubuntu中用编译器编译,发现出错。编译生成的二进制文件boot.bin大小为0,并不是我们期望的512字节。
于是便在Ubuntu下用vi打开我们的汇编代码查看一下,发现:
02.jpg
在代码中出现了很多的“^M”字符。
哦,原来我用了DOS格式的文件放在了UNIX下面进行了编译,难怪编译器不认识。
注意:在DOS格式下面,回车换行是0x0D0A,而UNIX下是0x0A,所以当DOS格式文件到了UNIX下面后0x0D则会变成“^M”这个控制字符。
03.jpg
这个问题的解决也有很多种方法,而本人是直接在UE中把文件都改成用UNIX格式编辑了:
04.jpg
 
修改了格式以后,在Ubuntu下可以正确编译了!生成了一个512字节大小的二进制文件boot.bin。
 
下面就该是制作启动盘的问题了。要知道,现在的电脑想要用软盘启动已经是不可能了。但是我们有个东西叫虚拟机——它可以给我们提供一个“软盘”接口,不过同样也是个虚拟接口。
 
虚拟机我用的是VM Player,并没有去用workstation,因为新版本的player已经功能够强大了。如下图一步步建立自己的虚拟机,但是在驱动选择时,选从软盘启动。
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg
我们得为软盘提供一个image文件,但之前对boot.asm文件编译后得到的是二进制文件boot.bin。网上也有很多提出的方法如何将bin文件打包成img文件,其实我们简单分析一下会发现,两者的转换其实只需要在windows下改一下后缀名!!!原因是:img文件也就是镜像文件,原本就是对软盘中的数据进行二进制级别的拷贝备份,而我们的bin文件本身就是二进制文件,所以对于内存或者存储设备来说,在这个地方img和bin文件是完全一样的。
 
将boot.bin改后缀变成boot.img后就可以让虚拟机去加载它了。
然后去启动你的“操作系统”吧!
 
PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

用户377235 2014-6-9 12:15

哪本书有第二版,也写得很好。

自做自受 2014-6-3 09:13

是的,“操作系统”定制化,根本是个度,不同应用层面有不同的定制程度,以求使用适应、适宜。就普通消费层面,不需要定制“内核及系统结构”,仅需要使用功能的定制化,简单说就是不需要的就不要,需要了在添配。可谓节约是环保。但是,难!如今强求多功能、智能化的模糊行为时代,人类更是做不到!Dell的历程就是先例。

用户403664 2014-5-30 09:47

期待2

jlx_cuc 2014-5-28 17:53

“操作系统”定制化个人觉得可能会是个趋势哦~ 之所以引号,我觉得是否会是像CyanogenMod提供的服务一样,最终消费者定制的其实是个UI设计,而并非真正的内核及系统结构。 个人观点,欢迎探讨。

自做自受 2014-5-27 15:37

赞!DOS时代,曾有做操作系统的念头,后来......总之未果。题目,勾起回忆。现在能不能在消费者层面实现操作系统定制化商业模式?

用户430155 2014-5-22 23:09

学习,,,,,,,,,,,,,,,
相关推荐阅读
jlx_cuc 2014-06-06 18:19
你真的会socket编程吗(1)
最近的项目都围绕着TCP socket在进行着,VC下的socket,Linux下的socket,感觉很简单,但是却发现其实下面的几个同事对于socket这个东西还只是“会”,但并不一定懂。 ...
jlx_cuc 2014-05-08 17:13
“改变”后的一丝体会
有两个月没写博客了,现在正是开学之际,有必要对前面两个月的工作做做记录。   经历过从北京到苏州的工作地点转换,生活和工作上的体会和收获颇丰。到苏州来以后会觉得,原来的一些看法还是太过狭隘...
jlx_cuc 2014-05-08 17:13
最终我又不要脸的回来了——成为一名“管理者”后的心得
之前的很长一段时间都没再更新过这个博客,一直在EDN潜水,一直在做伸手党。原因有两个,一个是忙,一个是懒。 最终我还是不要脸的回来了。还是想以后好好把这个博客经营下去,也好等咱们的娃长大了给它...
jlx_cuc 2013-07-11 17:13
【博客大赛】写给“即将入学”的硕士研究生们
原本题目定的是《写给即将入学的硕士研究生们》,后来想了想便加上了双引号。先来说说这个双引号。   早在一个多月前全国考研的最后结果便出来了,对于考上研的同学们来说,马上就要开始自己的研究生...
jlx_cuc 2013-04-08 23:22
【博客大赛】老罗和他的锤子之我的见解
事先说明,个人感觉我的观点还算是中立观点,并不是要感叹老罗和锤子有多好,也不想批评它们是否一无是处。只是想在时隔这么就没来EDN,恰巧又遇到锤子的发布这个时间点,发表些个人的感想和见解。 ...
EE直播间
更多
我要评论
6
23
关闭 站长推荐上一条 /3 下一条