Orange's:一个操作系统的实现_1th_环境搭建

这章节主要是搭建操作系统环境和编写一个简单程序

环境

  • Deepin操作系统
  • Nasm
  • bochs
  • bximage(bochs自带的软盘映象制作软件)
  • 参考书籍:《Orange’S:一个操作系统的实现》
  • 我们自己写一个操作系统的话就需要有个虚拟机和软盘来运行这个操作系统,但是我们又不至于真的买个软盘,所以我们可以使用bximage生成一个虚拟软盘,把我们写的系统生成相应的文件烧录到虚拟软盘里面,使用dd命令就可以,在bochs启动的时候选择使用我们的虚拟软盘启动就可以。

软件安装及简单命令

Nasm

  1. Nasm源码下载地址:Nasm
  2. 解压并进入解压目录
  3. 执行命令

    1
    2
    3
    ./configure
    make
    make install
  4. 简单指令

    1
    2
    汇编指令:
    nasm boot.asm -o boot.bin

Bochs

  1. Bochs下载地址:Bochs官网
  2. 解压并进入解压目录
  3. Bochs依赖软件安装

    1
    2
    3
    sudo apt-get install build-essential
    sudo apt-get install xorg-dev
    如果执行4命令报出别错误的话可能是别的依赖软件没有安装 ,请自行百度
  4. 执行以下命令

    1
    2
    3
    ./configure --enable-debugger --enable-disasm   ;//这个命令是将bochs设置为可调式的
    make
    make instal
  5. Bochs简单命令

    1
    2
    3
    4
    5
    我们在使用bochs启动的时候可以选择硬盘启动或者是软盘启动,所以这个时候,我们需要配置相应的配置文件,我们可能会在bochs源码里面发现有“.bochsrc”或者是“bochsrc” ,我们也可以自己写一个配置文件使用“bochs -f yourname” 这命令来启动我们自己写的配置文件“yourname"。(linux下的.文件被隐藏使用 “ls -al”查看)
    启动配置文件: bochs -f yourname(直接bochs也可以启动默认配置文件)
    继续执行直到遇见断点:c
    单步执行 : n
    看寄存器信息:dump_cpu

打印一个”Hello World”

在我们接触C语言的时候最基础的工程就是使用printf打印出”Hello World!”.这里我们也使用汇编打印一个hello

  1. 创建boot.asm并书写一下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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) 黑底红字(BL = 0Ch,高亮)
    mov dl, 0
    int 10h ; 10h 号中断
    ret
    BootMessage: db "Hello, OS world!"
    times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
    dw 0xaa55 ; 结束标志
  2. 生成bin文件

    1
    nasm boot.asm -o boot.bin
  3. bximage生成512字节的虚拟软盘

    1. 在终端下执行bximage
    2. 选择1,再输入”fd”(选择虚拟软盘),再确认,再确认,最终生成1.44M的a.img文件
    3. 也可以使用dd命令代替bximage,
      1
      dd if=/dev/zero of=a.img bs=1440k count=1
  4. dd命令将boot.bin烧录到a.img

    1
    dd if=./boot.bin of=./a.img bs=512 count=1 conv=notrunc
  5. 配置bochs文件

    1. 将烧录的a.img移到bochs的源码目录中
    2. 在bochs的源码目录里面,执行“ls -al”,可以看到一个.bochsrc
    3. vim .bochsrc
      1. 设置floppya
      2. 将boot设置为:floppy
  6. 终端执行”bochs -f .bochsrc”
  7. Please choose one: [6] 6
  8. 如果bochs带调试功能:需要输入c继续执行,才能执行。
  9. 现象:

总结

这个章节主要是搭建操作系统运行的环境和编写一个简单的裸机文件,这个汇编程序比较简单,但是这个org命令让我想到了之前在学习内核的时候的相对地址和绝对地址,疑问编译器编译的指令是相对地址是从000h编译的,但是我们自己创建的引导扇区是从07C00h开始执行的,所以需要用到org命令。

-------------本文结束感谢您的阅读-------------