Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712589
  • 博文数量: 60
  • 博客积分: 2849
  • 博客等级: 少校
  • 技术积分: 1011
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-10 15:38
文章分类
文章存档

2013年(4)

2012年(11)

2011年(5)

2010年(3)

2009年(9)

2008年(19)

2007年(9)

分类:

2007-04-05 09:40:46

使用grub中的内核demo(原创)

 

1.       下载grub-0.97源程序解压缩,进入到docs目录。找到boot.S  kernel.c  multiboot.h这三个文件,就是我们的试验对象。原理可以搜索多重引导规范multiboot,在grubofficial site可以找到。有不清楚的过程可以和我联系(msn及邮件都是这个:jinglexy at yahoo dot com dot cn2007.04.05

2.       建立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

 

 

3.       建立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

 

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

5.       疑问:如果将虚拟地址改为0xc0000000grub装载kernel时会打印“Selected item cannot fit into memory”,这个是什么缘故?哪个大虾愿意解释一下,谢了哦,邮件和msn都是jinglexy at yaoo dot com dot cn,有了答案我就在这里贴出来。

阅读(1444) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~