使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
然后跳转到入口地址处开始执行,
遇到的问题是, 此时还没有分页机制,
内核文件中的这部分(启动初始化代码)应该如何操作?
0xc01xxxxx -> 0x1xxxxx
已经折腾糊涂了, 请对汇编熟悉的朋友指点.
--
[34m光阴似箭, 日月如梭, 童年的文章如此作 [0m
[34m青春不再, 往日情怀, 未曾珍惜的我不再拥有 [0m
[m [1;33m※ 来源:·水木社区 newsmth.net·[FROM: 123.127.211.*] [m
【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................
【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................
--
[m [1;33m※ 来源:·水木社区 newsmth.net·[FROM: 119.105.192.*] [m
启动分页,则对虚拟地址进行操作。
【 在 forel (无知/我就是一个笑话) 的大作中提到: 】
: kernel的虚拟地址在0xc0000000以上,
: 一般加载时在0x100000,
: 使用grub引导时, 如果内核符合multiboot要求, grub将内核加载到上述地址后,
: ...................
--
[m [33m※ 来源:·水木社区 http://newsmth.net·[FROM: 58.61.86.*] [m
第一个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