8.加载内核并初始化内核

1. 用 C 语言写内核

int main(void){
   
	while(1);
	return 0;
}

最最简单、没有实用的内核。咱们的目的是加载内核并初始化内核。所以内核不需要太复杂。

用 gcc 编译器:

gcc -c -o main.o main.c //编译汇编到目标代码,不进行链接。

ld 进行链接程序,指定可执行程序的起始虚拟地址。

ld main.o -Ttext 0xc0001500 -e main -o kernel.bin

最终生成的 kernel.bin 可执行文件,是一个 elf 文件。起始虚拟地址指定为0xc0001500。

把 kernel.bin 写到虚拟硬盘文件的第 9 个扇区。写100 KB,因为以后内核的体积会越来越大。

dd if=kernel.bin of=路径/hd60M.img bs=512 count=200 seek=9 conv=notrunc

此时,内核准备好了,也到硬盘中了,接下来该加载到内存中了。

2. 加载内核

加载内核是 loader 的工作。所以进一步修改 loader.S。

加载内核可以在分页之前,也可以在分页之后。为了简单,就在启用分页之前吧,使用的地址是物理地址,不是虚拟地址。

咱们把它放在低 1MB 的空间里。再看一下低 1MB 的内存布局。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值