**该系列文章为bilibili李述铜老师手写基于x86 32位的操作系统课程笔记,如有疑问欢迎评论沟通**
前言:
前一天的读取磁盘函数实现完成后,利用实模式下的该读取磁盘函数将Kernel数据读取进操作系统中,函数调用如下所示:
//SYS_KERNEL_LOAD_ADDR已在comm/boot_info.h的文件中定义为:(1024*1024)
//意思是Kernel部分的起始位置
void load_kernel(void){
//磁盘读取,内核从100个扇区开始读是为了给loader预留足够的位置,读500个扇区是留足够的内存给kernel使用
read_disk(100, 500, (uint8_t*)SYS_KERNEL_LOAD_ADDR);
for(;;){}
}
一、向Kernel传递boot_info(内存信息)
方法一:将Boot_info写在固定的位置,再由Kernel自行去取:如图所示:
方法二:将内核的入口地址处视为存放了一个接收启动信息参数的函数,使用函数调用的形式将boot_info传入内核中,并使程序进入到内核中执行。函数如下所示:
((void (*)(boot_info_t *))SYS_KERNEL_LOAD_ADDR)(&boot_info);