社区
汇编语言
帖子详情
grub kernel加载内核
迷你苑
2011-04-13 08:59:02
最近想实践下32保护模式下编程,不知道用grub kernel怎么加载我的内核,链接成elf可以吗?或者说linux 内核什么标准,用grub可以加载???
...全文
552
10
打赏
收藏
grub kernel加载内核
最近想实践下32保护模式下编程,不知道用grub kernel怎么加载我的内核,链接成elf可以吗?或者说linux 内核什么标准,用grub可以加载???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
怎么没有人回复呀?发错地方了吗?
m
kernel
:极简
内核
该
内核
兼容多引导,并随
GRUB
一起
加载
。 博客文章 生成命令 nasm -f elf32
kernel
.asm -o kasm.o gcc -m32 -c
kernel
.c -o kc.o ld -m elf_i386 -T link.ld -o
kernel
kasm.o kc.o 在模拟器上测试 qemu-system-i386 ...
win10+centos7+centos7桌面双系统安装.docx
同时修改默认
加载
内核
的启动顺序,修改成如下: [root@test ~]# cat /etc/default/
grub
GRUB
_TIMEOUT=5
GRUB
_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB
_DEFAULT=0
GRUB
_DISABLE_SUBMENU=...
Linux开机过程
开机BIOS自检 MBR引导
grub
引导菜单
加载
内核
kernel
启动init进程 读取inittab文件,执行rc.sysinit,rc等脚本 启动mingetty,进入登录界面
Linux学习-70-启动引导程序(
GRUB
)
加载
内核
的过程
Linux学习-70-启动引导程序(
GRUB
)
加载
内核
的过程
GRUB
无法
加载
内核
系统无法
加载
内核
。解决方法如下:
grub
>ls
grub
>ls (hd0,x)/ #找出WUBI安装的盘,里面有ubuntu/这个目录。
grub
>insmod ntfs #
加载
ntfs模块,因为WUBI将ubuntu安装到了我分的ntfs盘上
grub
>set root=(hd0,5) #这里...
汇编语言
21,459
社区成员
41,602
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章