动手写自己的第一个"操作系统"
2016-06-25 12:58
330 查看
参考资料:《Linux内核完全剖析–基于0.12内核》
1.首先编写代码
boot.s代码如下:
2.通过as86汇编语言程序的编译和链接生成我们需要的引导程序boot。
3.然后,通过bximage命令生成虚拟软盘。
4.之后将引导扇区写入软盘。这时需要注意刚才生成的boot是544B的,而不是512B,多出来的是MINIX的可执行文件的头结构,需要人工删除。所以用了dd命令删除了boot的前32B。
5.然后配置bochs的配置信息bochsrc.
我的配置信息(config4ji)如下:
6.然后运行bochs。
结果如下:
1.首先编写代码
boot.s代码如下:
! ! boot.s -- bootsect.c的框架程序。用代码0x07替代串msgl中1字符,然后在屏幕第一行显示。 BOOTSEG = 0x07c0 entry start start: jmpi go,BOOTSEG go: mov ax,cs mov ds,ax mov es,ax mov cx,#12 !需要显示的字符个数,包括回车和换行 mov dx,#0x1104 !从第18行,第5列开始显示 mov bx,#0x000c !颜色设置为红色 mov bp,#msgl !指向要显示的字符串 mov ax,#0x1301 int 0x10 loop0: jmp loop0 msgl: .ascii "Hello World" .byte 13,10 !回车和换行 .org 510 .word 0xAA55
2.通过as86汇编语言程序的编译和链接生成我们需要的引导程序boot。
as86 -0 -a -o Desktop/boot.o Desktop/boot.s //编译。生成与as部分兼容的目标文件。 ld86 -0 -s -o Desktop/boot Desktop/boot.o //链接。去掉符号信息。
3.然后,通过bximage命令生成虚拟软盘。
4.之后将引导扇区写入软盘。这时需要注意刚才生成的boot是544B的,而不是512B,多出来的是MINIX的可执行文件的头结构,需要人工删除。所以用了dd命令删除了boot的前32B。
dd bs=32 if=Desktop/boot of=a.img skip=1 //写入软盘或Image盘文件中
5.然后配置bochs的配置信息bochsrc.
我的配置信息(config4ji)如下:
#BIOS映像文件和VGA BIOS映像文件 romimage:file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest #这个是启动软盘,就是我们刚才做的那个 floppya:1_44=a.img,status=inserted #确定启动方式 boot:floppy
6.然后运行bochs。
bochs -f Desktop/config4ji
结果如下:
相关文章推荐
- Linux 自检和 SystemTap
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- LKRG:用于运行时完整性检查的可加载内核模块
- 一张图看尽 Linux 内核运行原理
- Greg Kroah-Hartman 解释内核社区是如何使 Linux 安全的
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- C#实现判断操作系统是否为Win8以上版本
- js获取本机操作系统类型的两种方法
- Linux操作系统添加新硬盘方法
- Linux内核链表实现过程
- java如何获取本地操作系统进程列表
- Linux rdesktop操作系统下远程登录Windows XP桌面
- 32位操作系统认出超出4G内存的方法
- Linux rpm tar 操作系统下软件的安装与卸载方法
- JavaScript 获取用户客户端操作系统版本
- jsp 获取客户端的浏览器和操作系统信息
- Windows 操作系统的安全设置
- php判断当前操作系统类型
- PHP获取用户的浏览器与操作系统信息的代码