汇编语言的可读性太差
mbr->loader->kernel
loader的作用:启动保护模式,拉入kernel
提前将mbr和loader存放在0扇区前512字节和1扇区,将kernel代码存放在9扇区。加电后bios扫描0扇区前512字节也就是mbr代码,加载到7c00处,然后从7c00处执行mbr程序,mbr程序去第二扇区加载loader,.bin到BIOS的可用区域的0x900,mbr执行完后jmp到0x900执行loader中编写的内容。loder中将9扇区的kernel加载到BIOS的0x1500位置,loader执行完后跳到0x1500执行kernel的内容。
编写liba.asm,封装汇编操作
编写stringio.h,
编写扩展内核libc.c
编写oskernel.c

四个文件上次到Ubuntu后编译
编写执行编译的脚本,减少重复写命令
- #!/bin/bash
- rm -rf temp
- mkdir temp
-
- nasm -f elf32 oskernel.asm -o ./temp/oskernel.o
- nasm -f elf32 liba.asm -o ./temp/liba.o
-
- gcc -c -m16 -march=i386 -masm=intel -nostdlib -ffreestanding -mpreferred-stack-boundary=2 -lgcc -shared libc.c -o ./temp/libc.o
-
- ld -m elf_i386 -N -Ttext 0x8000 --oformat binary ./temp/oskernel.o ./temp/liba.o ./temp/libc.o -o ./temp/kernel.bin
- echo "Done!"
编译

然后将kernel.bin拷贝到win上 ,使用dd写入虚拟磁盘.
用Bochs-win64-2.6.11.exe启动