小白一只。记录自己的操作系统实现之路。
第一章 马上动手写一个操作系统 //我崩溃了两天才完成的第一章,耐心点,你也可以完成,不懂找百度,准没错。
运行需要环境与软件://具体系统安装 可寻求同学 百度等帮助,网上很多经验与例子,出现问题可以将问题代码复制到网上直接查,然后调试,耐心做。
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.出现问题可以将问题代码复制到网上直接查,然后调试,网上很多解决问题的方法