Orange_OS-一个操作系统的实现--搭建环境写一个最小的操作系统

小白一只。记录自己的操作系统实现之路。


第一章  马上动手写一个操作系统  //我崩溃了两天才完成的第一章,耐心点,你也可以完成,不懂找百度,准没错。


运行需要环境与软件://具体系统安装  可寻求同学  百度等帮助,网上很多经验与例子,出现问题可以将问题代码复制到网上直接查,然后调试,耐心做。

1.linux系统。//我的系统是linux ubuntu 14.04

2.NASM汇编编译器

3.C语言编译器GCC和自动化编译链接的GUN Make

4.软盘绝对扇区读写工具  //linux系统可使用dd命令,不用单独安装。

5.虚拟机Bochs //我的是2.5.1版本


//建议所有文件都创建在同一目录下


编写汇编文件boot.asm//使用linux系统自带软件gedit编辑文件  文件存在哪里  下一步就到哪里用NASM编译

    org    07c00h            ; 告诉编译器程序加载到7c00处
    mov    ax, cs
    mov    ds, ax
    mov    es, ax            ;使得ds,es两个段寄存器指向与cs相同的段,这些指令使用   CS寄存器的值将DS、ES和SS寄存器初始化,由于CS寄存器的值为0,所以这些段寄存器(主要是代码段、数据段和堆栈段)的值就都被初始化为0了。
 
 
    call    DispStr            ; 调用显示字符串例程
    jmp    $            ; 无限循环  $标示本行所在地址
DispStr:
    mov    ax, BootMessage     ;BootMessage是地址
    mov    bp, ax            ; ES:BP = 串地址
    mov    cx, 16            ; CX = 串长度
    mov    ax, 01301h        ; AH = 13,  AL = 01h
    mov    bx, 000ch        ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov    dl, 0
    int    10h            ; 10h 号中断,根据前面设定的情况显示字符
    ret               ;返回主程序
BootMessage:        db    "Hello, OS world!\n"  ;db是伪指令,定义一个连续的存储区并赋值
times     510-($-$$)    db    0    ; times是重复后面的表达式次操作,本句是填充剩下的空间,使生成的二进制代码恰好为512字节  $$标示本段程序开始的地址
dw     0xaa55                ; 结束标志


使用NASM编译//使用terminal

nasm boot.asm -o boot.bin//编译器将源代码转换为可以存进软盘的机器代码  操作完成后生成boot.bin文件


使用bochs创建软盘映像//使用terminal

>bximage

>fd

>回车

>回车


使用dd命令将boot.bin文件写到一张空白软盘的第一个扇区,后面使用bochs,从软盘引导启动计算机。

dd if=boot.bin of=/dev/fd0 bs=512 count=1//提示权限不够就在dd前面加上sudo


将引导扇区写入软盘

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc


创建bochsrc.txt文件-配置文件//使用linux系统自带软件gedit编辑文件

#########################################
#Configuration file for Bochs
#########################################

#how munch 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=a.img,status=inserted

#choose the boot disk
boot:floppy

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

#diable the mouse
mouse:enabled=0

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


//启动

bochs -f bochsrc


//选择6-启动虚拟机//假设运行具有调试功能的bochs需要几句敲下面指令  否则开机完成Hello, OS world!

虚拟机启动  仍需返回terminal进行代码输入

b 0x7c00
c
#dump_cpu
x /64xb 0x7c00
n
trace-reg on
n
c

分别输入回车


结果--bochs虚拟机显示红色字体

Hello, OS world!


完成一个简单操作系统的启动。


--可能会出现的问题,需要了解的一些知识。

1.Ctrl+Alt+T  启动Terminal的快捷键

2.sudo  权限不够的时候在命令前面加上sudo

3.出现问题可以将问题代码复制到网上直接查,然后调试,网上很多解决问题的方法

你可能感兴趣的:(操作系统)