8 linux elf kernel-module virtual-memory linux-kernel
我对内核如何加载到内存中有一些疑问。经过检查,/proc/kallsyms
我能够找到内核中各种符号的地址。
$ cat /proc/kallsyms | head -n 10
00000000 t __vectors_start
80008240 T asm_do_IRQ
80008240 T _stext
80008240 T __exception_text_start
80008244 T do_undefinstr
80008408 T do_IPI
8000840c T do_DataAbort
800084a8 T do_PrefetchAbort
80008544 t gic_handle_irq
800085a0 T secondary_startup
Run Code Online (Sandbox Code Playgroud)
puts
在 0x200 的偏移量处说函数。当加载到内存 at 说地址时0x8048000
,我将能够puts
在0x8048000 + 0x200
. 内核也一样吗?即内核映像是否作为 1 个连续.text
部分加载到内存中?内核加载到映射的1MiBPAGE_OFFSET + 0x00100000
物理地址(虚拟地址)。通常8MiB
的虚拟空间是为内核映像保留的PAGE_OFFSET + 0x00100000