操作系统入门(
六) –
多汇编文件的整合
我们的带文件分配表的boot已经做好了,并且可以把kernel.img文件装入内存执行起来,但是在进入保护模式之前还有一些初始化的准备工组要做,那么就必须在kernel里面下文章了,可能有的人会说这个kernel应该只是一个loader而已,没错,不过随便吧。
由于东西可能很多,所以把它拆分成几个文件,方便管理,主文件只需要像调用子程序那样轻松就可以了。
要说明一下的是多个文件的情况下先把单个文件编译成obj文件然后用ld连接就可以了:
需要用到一个kernel.ld的文件
OUTPUT_FORMAT("binary")
ENTRY(
start
)
SECTIONS
{
.text 0x90000 : {
*(.text)
}
.data
0x90500
: {
*(.data)
}
.bss : {
*(.bss)
}
}
start
这个start是入口调用代表在kernel.asm里面的global start,要一致
.text 就是代码段起始地址的定义,这里是0x90000
.data
就是数据段起始地址的定义
0x90500 的地址只是按估计定的,随便改,但是改完了会影响kernel.img的大小
命令要这样用(可以做一个bat):
nasm -f aout ../asm/kernel.asm -o ../obj/kernel.o
nasm -f aout ../asm/pnt.asm -o ../obj/pnt.o
nasm -f aout ../asm/readdisk.asm -o ../obj/readdisk.o
ld -T kernel.ld -s –e start ../obj/kernel.o ../obj/pnt.o ../obj/readdisk.o -o KERNEL.img