将中断处理程序放到C里编写
鉴于代码相比之前,多出了很多配套的固定代码,因此代码量和代码中来突增,本文就不再一个一个贴代码了,需要的直接去看我上传在csdn的代码吧(文末有链接)
文件结构
主要看interrupt中的异常处理和makefile文件中的编译命令改动
makefile
.PHONY:build burn
mbr_source=boot/mbr.S
mbr_target=boot/mbr.bin
loader_source=boot/loader.S
loader_target=boot/loader.bin
hard_disk=/home/lhj/Public/bochs/bin/hd60M.img
build:
nasm -I boot/include/ -o $(mbr_target) $(mbr_source)
nasm -I boot/include/ -o $(loader_target) $(loader_source)
gcc -m32 -I lib/kernel -m32 -I lib/ -m32 -I kernel/ -c -fno-builtin -o build/main.o kernel/main.c
gcc -m32 -I lib/kernel -m32 -I lib/ -m32 -I kernel/ -c -fno-builtin -o build/interrupt.o kernel/interrupt.c
gcc -m32 -I lib/kernel -m32 -I lib/ -m32 -I kernel/ -c -fno-builtin -o build/init.o kernel/init.c
nasm -f elf -o build/print.o lib/kernel/print.S
nasm -f elf -o build/kernel.o kernel/kernel.S
ld -m elf_i386 -Ttext 0xc0001500 -e main -o build/kernel.bin build/main.o build/init.o build/interrupt.o build/print.o build/kernel.o
burn:
dd if=$(mbr_target) of=$(hard_disk) bs=512 count=1 conv=notrunc
dd if=$(loader_target) of=$(hard_disk) bs=512 count=3 seek=2 conv=notrunc
dd if=./build/kernel.bin of=$(hard_disk) bs=512 count=200 seek=9 conv=notrunc
1.缺少相关库,需要完善编译环境
解决方法:Ubuntu 编译出现fatal error: bits/libc-header-start.h: No such file or directory
本实验所有源码计算机系统结构与操作系统实验三bochs源代码