GRUB 使用笔记
最近突然对Unix内核有了兴趣, 在网上 google 了一下,遇到的是 OSD, 一个 关于操作系统开发的网站 OSD, 学习了基本原理之后, 决定实践一下。MinGW32, NASM, OSD, GRUB 都下载,安装,开了个虚拟机,可是启动之后发现GRUB成功装载 内核, 但是数据段始终无法成功加载,内核初始化失败,郁闷啊!...
最近突然对Unix内核有了兴趣, 在网上 google 了一下,遇到的是 OSD, 一个
关于操作系统开发的网站 OSD, 学习了基本原理之后, 决定实践一下。MinGW32,
NASM, OSD, GRUB 都下载,安装,开了个虚拟机,可是启动之后发现GRUB成功装载
内核, 但是数据段始终无法成功加载,内核初始化失败,郁闷啊!...
郁闷中想起久违的FreeBSD, 开始吧!安装 FreeBSD 5.4 + NASM, make,
make install 投Unix, 情况依旧,郁闷!换内核,改用bkerndev的 Bran内核, 运
行正常了,高兴!可是c语言代码陆续加入内核后,GRUB 终于不高兴了,提示:
Error 13 : Invalid or unsupported executable format
改为 elf 后却提示:
Error 28: Selected item cannot fit into memory.
书到用时方恨少,只知道FreeBSD缺省的执行文件类型是 elf, 可从来没有见过
真面目. 看书去, elf, ld, objdump, section, 终于找到原因了: 如果内核是 elf
格式,只能有三个 SECTION: .text .data .bss , 否则 GRUB 0.9x 会提示:
Error 28: Selected item cannot fit into memory.
用 objdump -h main.o 的结果:
----------------------------------------------------
main.o: file format elf32-i386-freebsd
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000010c 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000140 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000140 2**2
ALLOC
3 .rodata.str1.1 00000015 00000000 00000000 00000140 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .comment 00000025 00000000 00000000 00000155 2**0
CONTENTS, READONLY
----------------------------------------------------
下载的Bran内核的链接脚本 link.ld
----------------------------------------------------
001 OUTPUT_FORMAT("binary")
002 ENTRY(start)
003 phys = 0x00100000;
004 SECTIONS
005 {
006 .text phys : AT(phys) {
007 code = .;
008 *(.text)
009 . = ALIGN(4096);
010 }
011 .data : AT(phys + (data - code))
012 {
013 data = .;
014 *(.data)
015 . = ALIGN(4096);
016 }
017 .bss : AT(phys + (bss - code))
018 {
019 bss = .;
020 *(.bss)
021 . = ALIGN(4096);
022 }
023 end = .;
024 }
----------------------------------------------------
第1行改为OUTPUT_FORMAT("elf-i386")(删除亦可, FreeBSD的用缺省elf)
第8行后加两行
*(.rodata*)
*(.comment*)
这样,ld 就会把 .rodata 和 .comment 合并到 .text 这一节中去了,输出的文件
就只有.text .data .bss三个 SECTION, GRUB 就能能成功装载!
相关文档
Bran的内核开发指南
http://rammaker.cosoft.org.cn/store/bkerndev_zh_CN/
OSD
http://my.execpc.com/~geezer/osd/index.htm
开源Unix的交叉参考
http://fxr.watson.org/
NASM (Netwide Assembler)
http://nasm.sourceforge.net/
GRUB
官方文档 :http://www.gnu.org/software/grub
http://linux.chinaunix.net/bbs/viewthread.php?tid=890961&extra=page%3D1
更多推荐
所有评论(0)