grub kernel加载内核

迷你苑 2011-04-13 08:59:02
最近想实践下32保护模式下编程,不知道用grub kernel怎么加载我的内核,链接成elf可以吗?或者说linux 内核什么标准,用grub可以加载???
...全文
552 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdisksys 2011-10-08
  • 打赏
  • 举报
回复
我比你惨一点,grub能直接引导ELF文件,而引导纯二进制文件我还没有测试成功.
迷你苑 2011-04-22
  • 打赏
  • 举报
回复
几天没上,这么多人回复了
grub源代码里有个multiboot-elf格式启动的例子
感觉能满足我的要求,有兴趣的可以看看
kkkwdb 2011-04-15
  • 打赏
  • 举报
回复
linux内核确实是单纯的二进制文件,以0.12为例:
通过Makefile文件,可以得知
内核的Image由boot/bootsect boot/setup tools/system 3部分组成。
其中bootsect和setup由as86和ld86编译链接(因为当时gcc不支持编译16为程序)
system则由gcc编译。
同时内核有个自带的产生Image的工具build。以boot/bootsect boot/setup tools/system为参数可以得到Image。通过build的源码可知,Image的组件其实就是把以上3部分去掉头部,然后组合在一起,也就是形成了纯粹的二进制内核文件Image。
2.6内核也一样,内核编译完成后,在源码目录树下会生成一个未压缩的二进制内核,而在arch/i386/boot下则会生成压缩的内核也就是bzImage(解压后也是纯粹的二进制文件)。
楼主可以自己写引导代码,然后通过grub的链式加载到内存中执行。也可以直接写也给引导扇区代码(MBR),系统启动后直接执行。
辰岡墨竹 2011-04-14
  • 打赏
  • 举报
回复
嗯zImage前面的bootsect.s、head.s和setup.s应该是BIN格式的,就是我前面说的类似COM的没有文件头的可执行代码段。后面有个piggy是被压缩的内核。那个bootsect.s就是一个引导扇区。嗯,挺麻烦的,而且bzImage和zImage的格式详细文档也特别少,必须去读2.4/2.6内核的源码(我学校功课忙,之前只看过1.0的源码)。你还是直接写一个引导扇区让GRUB加载吧。
辰岡墨竹 2011-04-14
  • 打赏
  • 举报
回复
嗯,没动Linux源码时间太长,记忆混淆了……我当时以为initrd前面一段有附加的引导代码,抱歉。翻了一下以前保存的资料(以前存了忘了看)。
vmlinux的内核是ELF格式的,不过一般现在都是zImage或者bzImage压缩的,这种格式前面会有一段自解压代码。
不过如果你的确不必使用Linux内核的格式,如果是你自己的系统,完全可以写一个512B的引导扇区文件(就像多数OS源码那样),让GRUB来Chain Load。这个引导扇区的任务类似GRUB的Stage1或者Windows的BOOTSECT,就是去搜索认识的文件系统并查找下一阶段的引导程序,比如Stage2或者NTLDR。
Areslee 2011-04-14
  • 打赏
  • 举报
回复
干嘛要用GRUB。。。。。真麻烦
做成PE,在DOS下做个PELOADER不就行了
火雲邪神 2011-04-14
  • 打赏
  • 举报
回复
内核是单纯的二进制文件,没有任何格式(没有文件头)。 <- kernel is ELF format
kkkwdb 2011-04-14
  • 打赏
  • 举报
回复
3楼说的不对,GRUB直接加载内核。initrd是在系统引导过程中挂载的一个临时根文件系统,initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。
内核是单纯的二进制文件,没有任何格式(没有文件头)。
辰岡墨竹 2011-04-14
  • 打赏
  • 举报
回复
嗯,GRUB不是直接加载内核的,它先加载initrd的。这个initrd很类似一个COM文件,是只有一个段最大64KB的没有文件头的可执行文件。你只要模仿任何一个操作系统的引导扇区代码,直接编译为没有文件头的BIN格式,就可以被GRUB加载。
迷你苑 2011-04-13
  • 打赏
  • 举报
回复
怎么没有人回复呀?发错地方了吗?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧