使用grub中的内核demo

来源:互联网 发布:汉字笔顺软件 编辑:程序博客网 时间:2024/05/27 00:47

下载grub-0.97源程序解压缩,进入到docs目录。找到boot.S  kernel.c  multiboot.h这三个文件,就是我们的试验对象。原理可以搜索多重引导规范multiboot,在grubofficial site可以找到。

 

建立testos.lds链接脚本:

 

  1 OUTPUT_FORMAT("elf32-i386") 

  2 ENTRY(start)

  3 virt = 0x100000; /* 1 meg */

  4 phys = 0x100000; /* 1 meg */

  5 SECTIONS

  6 {   .text virt : AT(phys)

  7     {   code = .;

  8         *(.text)

  9         . = ALIGN(4096);

 10     }

 11     .data :  AT(phys + (data - code))

 12     {   data = .;

 13          *(.data)

 14          . = ALIGN(4096);

 15     }

 16     .bss :  AT(phys + (bss - code))

 17     {   bss = .;

 18         *(.bss)

 19         *(COMMON)

 20         . = ALIGN(4096);

 21     }

 22     end = .;

 23 }

 24

 

 

建立Makefile编译脚本:

1 all:

  2         gcc -I./ -nostdlib -fno-builtin -O2 -Wall -c kernel.c

  3         gcc -I./ -nostdlib -fno-builtin -O2 -Wall -c boot.S

  4         ld kernel.o boot.o -T testos.lds -o testos.bin

  5         sudo mount -o loop ./floppy.img mnt

  6         sudo rm -f mnt/boot/testos.bin

  7         sudo install ./testos.bin mnt/boot

  8         ls mnt/boot

  9         sudo umount mnt

 10         sudo sync

 11

运行make指令编译,生成testos.bin文件。这样就是我们的”kernel_demo”,放到virtual pc 2007中运行一下(现在这个软件已经免费了,可以到微软官方网站下载),是不是程序打印的结果呢?(将内核testos.bin拷贝到安装了grub的软盘过程请参考这个博客的前面一篇文章,有不清楚的地方可以一起讨论一下哦)

 

疑问:如果将虚拟地址改为0xc0000000grub装载kernel时会打印“Selected item cannot fit into memory”,这个是什么缘故?