运行自己的操作系统
文章平均质量分 76
windmissing
喜欢编程,喜欢思考,方向明确
展开
-
在bochs上运行的第一个操作系统(Windows版)
在windows上运行息的操作系统的步骤:.asm->.bim->.img->加载和运行一、制作img镜像文件方法一:1.使用bochs自带的工具bximage.exe生成一个.img文件,生成的是一个全0的空文件,需要往里面写入内容2.创建自己的引导程序boot.asm,这段程序从网上找来的,不知道出处 org 07c00h ; 告诉编译器程序加载到 7c原创 2012-06-16 15:11:22 · 8116 阅读 · 6 评论 -
运行自己的操作系统-开发环境说明
在后续的文章中,将不再区分linux环境还是windows环境。因为linux环境和windows环境的区别只是生成.img的方式不同,但最终的目的都是生成.img文件。 linux下自己写.ld文件和makefile文件,把源码编译链接成可执行文件,最后通过dd生成.img。 windows下使用nasm把汇编源码编译链接成可执行文件,通过WinImage或UE生成.img。 生成后的.im原创 2015-05-15 20:12:51 · 2328 阅读 · 1 评论 -
2.多一些打印
一、说明 只会打印一句话的操作系统,一无所用,我们要给它加一些功能。 打印功能是最必须的,因为当代码没有按照我们的计划运行时,加打印最直观的debug方法 现在的打印还比较麻烦,我们希望先把要打印的字符串存下来,并给每个字符串加个编号,只要给出编号,就可以打印出那句话。二、效果 三、代码.code16 #??16?????.text原创 2015-06-08 20:45:14 · 978 阅读 · 1 评论 -
1.最简单的操作系统(二)makefile
一、目的: 1.把源代码(boot.S)经过编译链接等过程,变成一个可执行文件(boot.bin) 2.生成一个镜像文件(boot.img),用于系统启动。系统启动可以从软件上启动,也可以从硬盘上启动,这里选择的是软件 3.把可执行文件(boot.bin)放到镜像文件(boot.img)中正确的位置,确保系统启动后能运行这个可执行文件二、单句分析all:boot.img每个makefile都必原创 2015-05-15 20:50:37 · 2109 阅读 · 1 评论 -
1.最简单的操作系统(四)boot.S
一、作用 1.当系统运行到这段代码时,界面上有所显示,以验证这段代码是否正常运行 2.使生成的可执行文件刚好512B大小,且最后2个字节是0xAA55二、代码说明 代码使用AT&T语法的汇编 作者:WB. YANG三、单句说明.code16 #使用16位模式汇编CPU在加电自举时,首选进入的是实模式。 在模式下,字长是16位的,因此使用16位模式汇编 详情参考“实模式”.text原创 2015-05-16 14:28:27 · 2389 阅读 · 1 评论 -
1.最简单的操作系统(三)链接脚本
一、什么是链接脚本 链接器脚本二、wind_x86.ld的作用 将程序入口设置为内存的0x7C00处。三、脚本中的地址是什么地址 四、为什么地址要选在0x7C00 内存的某些部分固定用来做固定的用途,随意选择一个地方开始容易引起冲突,于是人们约定程序入口都从0x7C00开始。 BISO把第一个扇区load起来之后会自动跳转到0x7C00处。五、单句分析. = 0x7C00跳过前面的地址,从原创 2015-05-16 12:38:54 · 1846 阅读 · 1 评论 -
1.最简单的操作系统(linux版)(一)运行效果
大部分内容来自WB. YANG的一本书,书名忘记了 1.linux所需要的安装的工具vim, virtualbox,g++ 2.编写自己的操作系统,懒得在linux上装个输入法,只好用蹩脚的英文写的注释,阅读时请自带避雷针系统引导程序:boot.S 1 .code16 #使用16位模式汇编 2 .text #代码段开始 3原创 2013-05-26 23:52:09 · 3701 阅读 · 16 评论 -
4.跳出第一个扇区
背景:上文讲到,把操作系统挤到一个扇区里面实在是太委曲了。所以要跳出第一个扇区的限制。 实现方法就是: (1)把部分代码放到其它扇区 (2)加载其它扇区到内存 (3)跳转到其它扇区中要运行的第一条指令 在3中已经实现了第(2)步,加载扇区2-18至内存0x9000:0x1000处,这一节将介绍(1)和(3)需求:1.写一段测试代码,测试代码中包含打印信息(第一行屏幕中间打印‘A’),可以明原创 2015-06-17 20:52:36 · 1444 阅读 · 1 评论 -
Linux 下用 dd 命令生成一个指定大小的虚拟块设备文件
Linux 中的 I/O 设备大致分为两类:块设备和字符设备。块设备将信息存储在固定大小的块中,每个块都有自己的地址,都能独立于其它块而读写。磁盘是最常见的块设备。虚拟块设备文件则是将块设备封装成为一个文件,比如硬盘镜像文件(Hard Disk Image)(但不是所有的硬盘镜像文件都是虚拟块设备文件,比如 Ghost 的 GHO 格式的镜像文件就不是,它不能挂载为虚拟机中的硬盘直接使用)。Linu转载 2015-05-05 20:43:41 · 5306 阅读 · 1 评论 -
使用文件系统
注:本文仍然主要来自《writeos-1.0-2-weekly》一、加载指定扇区支指定空间《运行自己的操作系统(linux版) -0.01》提到读入启动扇区,那是由硬盘自动完成的。若要读入其它扇区到一个特定的内存空间,就要自己写代码完成,使用底层BIOS系统提供的BIOS 13h号中断,如图:原创 2014-06-26 22:57:29 · 1304 阅读 · 0 评论 -
引入文件系统
说明:本文中的内容,主要来自于WB. YANG的一本书,书名《writeos-1.0-2-weekly》,建议看原文,提供链接http://download.csdn.net/detail/mishifangxiangdefeng/5869801原创 2014-06-14 20:52:05 · 2012 阅读 · 0 评论 -
3.加载其它扇区
背景: 硬件在加电自举时,会自动加载第一个扇区到内存,并从这个扇区的第一个字节开始执行。 因此我们只要把需要执行的代码放到第一个扇区,再打开电源,最简单的操作系统就运行起来了。 可是,硬件只帮我们加载第一个扇区,仅仅512字节。 我们的操作系统现在还很小,但它会慢慢长大,超出512字节的限制也是迟早的事。 也就是说,有一部分代码会放到软盘的其它几个扇区。 要执行其它扇区的代码,就把像处理原创 2015-06-15 20:46:22 · 1141 阅读 · 1 评论