LiteOS-grup引导
上篇降到自己实现MBR的引导,但是要进入系统入口还需要做很多事情,利用grup来帮助我们引导系统,
grup 能引导多系统
http://blog.csdn.net/xiaoyi23000/article/details/50504527
MBOOT_MAGIC equ 0x1BADB002; MBOOT_FLAGS equ 0x00; MBOOT_CHECKSUM equ -(MBOOT_MAGIC + MBOOT_FLAGS); [BITS 32] section .text dd MBOOT_MAGIC dd MBOOT_FLAGS dd MBOOT_CHECKSUM dd start [GLOBAL start] [EXTERN kernel_entry] start: cli;禁止中断,保护模式下不能用bios提供的中断功能 call kernel_entry; 调用内核入口函数 jmp $
从这里开始就可以开始用C语言来写内核代码了。
由于windows 下的gcc还不支持elf_i386,只支持i386pe格式,因此要链接的话,只有在linux下的gcc来链接了。
kernel.c
const char *VGA_BUFFER = (const char*)0x000b8000;// vga 显存开始地址 int kernel_entry() { while (1); return 0; }
编译引导:nasm -f elf boot.asm -o boot.o
编译内核代码:gcc -masm=intel -c -nostdlib kernel.c -o boot.o
链接引导和内核代码:ld -T link.ld -m elf_i386 -nostdlib boot.o kernel.o -o kernel
mnt挂载后,然后把kernel放在grup的目录中,生成磁盘映像文件。卸载即可生成。如何制作映像文件在此不阐述。
生成的映像文件作为虚拟机的启动程序
引导成功