开发环境搭建
在liunx上开发
VMware虚拟机
linux系统unbuntu16.04
bochs(x86模拟器)(用它来运行自己写的操作系统)(官网下载,版本2.6.11)
nasm编译器(把汇编文件编译为二进制文件)(安装再ubuntu中)(sudo apt-get install nasm)。
思路
0.搭建环境
1.编写汇编文件
2.nasm生成可执行文件
3.制作虚拟软盘映像文件
4.把执行文件写到映像文件
5.把操作系统在虚拟机或模拟器中运行起来。
搭建环境
首先先在Ubuntu中安装 bochs2.6.11
sudo apt-get update //先升级一下,以免后续的安装出错
然后安装一些bochs需要的依赖 避免报错出问题
sudo apt-get install build-essential nasm
sudo apt-get install libx11-dev (否则会出现fatal error: X11/Xlib.h: No such file or directory)
sudo apt-get install xorg-dev (否则会出现fatal error:X11/extensions/Xrandr.h: No such file or directory)
sudo apt-get install libgtk2.0-dev
sudo apt-get install bison
官网下载新版本的压缩包 放到linux中解压
https://sourceforge.net/projects/bochs/files/bochs/2.6.11/
打开终端 进入你想放置的目录
解压
tar zxvf bochs-2.6.9.tar.gz
进入目录
cd bochs-2.6.9
执行
./configure --enable-debugger --enable-disasm
打开bochs-2.6.9文件夹下Makefile文件, 在90行左右找到LIBS 在后面添加 -lX11
在进行编译:
sudo make
sudo make install
按顺序操作应该是没有error的
安装完成输入 bochs 测试一下是否安装成功
跟上面一样说明bochs安装上了 但是没有配置正确
需要编写bochsrc配置文件。我们后面在开始写
编写汇编文件
boot.asm 简单源程序
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 ; 结束标志
编译成可执行文件
编译用到 Linux 下的 nasm 编译器
sudo apt-get install nasm
在boot.asm所在的目录编译源程序
nasm boot.asm -o boot.bin
制作虚拟软盘映像文件
在bochs的安装目录中,使用bximage生成镜像
如上过程生成hello.img镜像
把执行文件写到映像文件
dd if=boot.bin of=hello.img bs=512 count=1 conv=notrunc
编写bochs配置文件
命名为bochsrc.conf
megs:32
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest
floppya:1_44=hello.IMG,status=inserted
boot:floppy
log:bochs.out
其中第2、3行中的路径是根据BIOS-bochs-latest和VGABIOS-lgpl-latest的真实路径,可以在文件管理器中查找到。
把操作系统在虚拟机或模拟器中运行起来
在bochs启动自己编写的MBR
把虚拟软盘映像文件hello.img 、配置文件bochsrc.conf 放至bochs2.6.11的安装目录里,然后执行命令
bochs -f bochsrc.conf
输入 -f 的目的是直接使用配置文件bochsrc.conf
默认回车 6操作
输入c运行
成功显示helloos
以上过程都要执行 某一步出错可能就会出现[BIOS] no bootable device.这样的错误