Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

请教启动问题

1 view
Skip to first unread message

无知/我就是一个笑话

unread,
Jun 27, 2010, 5:56:34 AM6/27/10
to
kernel的虚拟地址在0xc0000000以上,
一般加载时在0x100000,

使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
然后跳转到入口地址处开始执行,
遇到的问题是, 此时还没有分页机制,
内核文件中的这部分(启动初始化代码)应该如何操作?
0xc01xxxxx -> 0x1xxxxx

已经折腾糊涂了, 请对汇编熟悉的朋友指点.


--
[34m光阴似箭, 日月如梭, 童年的文章如此作 [0m
[34m青春不再, 往日情怀, 未曾珍惜的我不再拥有 [0m


[m [1;33m※ 来源:·水木社区 newsmth.net·[FROM: 123.127.211.*] [m

无知/我就是一个笑话

unread,
Jun 27, 2010, 6:10:34 AM6/27/10
to
大概看的linux启动的大概过程(一些没看明白),
启动部分的代码地址在0x100000,
启动部分相当于一个独立的执行文件, vmlinux部分作为数据?
然后将vmlinux部分的代码解压到某个位置, 跳转过去执行,
不存前面的问题.
如果不这样做有没有其他办法?

【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................

可爱的龙猫

unread,
Jun 27, 2010, 7:10:36 AM6/27/10
to
kernel的地址是在1MB以上。只要稍微设置一下段页寄存器就可以任意访问内存了,这个代码里面也有。

【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................

--

[m [1;33m※ 来源:·水木社区 newsmth.net·[FROM: 119.105.192.*] [m

苍天

unread,
Jun 28, 2010, 11:17:10 AM6/28/10
to
未启动分页,则对物理地址进行操作。

启动分页,则对虚拟地址进行操作。

【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................

--

[m [33m※ 来源:·水木社区 http://newsmth.net·[FROM: 58.61.86.*] [m

无知/我就是一个笑话

unread,
Jun 30, 2010, 12:44:24 AM6/30/10
to
因为对二进制文件一知半解,
我不知道正确做法.

第一个jmp会有问题吗? link时LMA=0x100000, VMA=0x80100000
加载到1M位置上执行理论上是否可以, 需要注意的.


--------
Disassembly of section .text:

80100000 <_start>:
80100000: fa cli
80100001: eb 0d jmp 80100010 <start0x00100000>
80100003: 90 nop

80100004 <multiboot_header>:
80100004: 02 b0 ad 1b 03 00 add 0x31bad(%eax),%dh
8010000a: 00 00 add %al,(%eax)
8010000c: fb sti
8010000d: 4f dec %edi
8010000e: 52 push %edx
8010000f: e4 bf in $0xbf,%al

80100010 <start0x00100000>:
80100010: bf 00 20 00 00 mov $0x2000,%edi


--------

80100000 <_start>:
80100000: fa cli
80100001: e9 0e 00 00 80 jmp 100014 <phys+0x14>
80100006: 66 90 xchg %ax,%ax

80100008 <multiboot_header>:
80100008: 02 b0 ad 1b 03 00 add 0x31bad(%eax),%dh
8010000e: 00 00 add %al,(%eax)
80100010: fb sti
80100011: 4f dec %edi
80100012: 52 push %edx
80100013: e4 bf in $0xbf,%al

80100014 <start0x00100000>:
80100014: bf 00 20 00 00 mov $0x2000,%edi


【 在 Bonaparte (苍天) 的大作中提到: 】
: 未启动分页,则对物理地址进行操作。
: 启动分页,则对虚拟地址进行操作。


--
[34m光阴似箭, 日月如梭, 童年的文章如此作 [0m
[34m青春不再, 往日情怀, 未曾珍惜的我不再拥有 [0m


[m [1;35m※ 来源:·水木社区 newsmth.net·[FROM: 123.127.211.*] [m

0 new messages