操作系统真相还原真相第五章----将内核加载到内存

内核kernel.bin是elf文件格式的文件,装载在磁盘中。由main.c编译链接生成的。

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

gcc -m32 -c -o kernel/main.o kernel/main.c
ld -m elf_i386 -Ttext 0xc0001500 -e main -o kernel/kernel.bin kernel/main.o
这里有个要注意的地方,使用的是Ubuntu64位系统,所以要使用以上的编译方法才能生成32位文件格式的ELF文件,否则在初始化内核时会出现问题。
这里默认把内核加载到的虚拟地址为0xc0001500。
把内核文件加载到虚拟的硬盘中dd if=/boch/kernel/kernel.bin of=/boch/hd60M.img bs=512 count=200 seek=9 conv=notrunc
修改load.S文件,加入读取内核的程序,解析ELF文件的程序,加载到虚拟地址的程序,三部分组成。
1.读取内核的程序

在这里插入图片描述
将内核加载到缓冲区,然后根据ELF文件进行解析。根据上图,这里把内核先加载到0x70000.加载得程序
在这里插入图片描述
2.初始化内核
根据ELF文件头,解析出各个program头的位置和各个段的位置以及需要加载到的虚拟地址。
3.将程序加载到相应位置。

发布了24 篇原创文章 · 获赞 3 · 访问量 930

猜你喜欢

转载自blog.csdn.net/HIT_zhanmusi/article/details/103644219