Linux内核的起始地址查看

我们先看一下入口地址的确定,同一文件。
sections{ /* * xxx: the linker does not define how output sections are * assigned to input sections when there are multiple statements * matching the same input section name. there is no documented * order of matching. * * unwind exit sections must be discarded before the rest of the * unwind sections get included. */ /discard/ : { *(.arm.exidx.exit.text) *(.arm.extab.exit.text) arm_cpu_discard(*(.arm.exidx.cpuexit.text)) arm_cpu_discard(*(.arm.extab.cpuexit.text)) arm_exit_discard(exit_text) arm_exit_discard(exit_data) exit_call#ifndef config_mmu *(.text.fixup) *(__ex_table)#endif#ifndef config_smp_on_up *(.alt.smp.init)#endif *(.discard) *(.discard.*) } . = page_offset + text_offset; .head.text : { _text = .; head_text }这个 sections 比较长,只放一部分。在这里有个比较重要的东西:
. = page_offset + text_offset;这一句表示了 linux 系统真正的启动地址。
page_offset 是 linux 内核空间的虚拟起始地址,定义在:
linux4.14/arch/arm64/include/asm/memory.h
注意,这里的地址都很重要,很多地方会用到。当然,这里的地址可能会随着 linux 内核版本的不同和硬件的不同,会变化。这里没有一个具体的数,因为 va_bits 中的数字是可选的,大家可以根据自己的平台算一下。
text_offset 定义在:
linux4.14/arch/arm/makefile 中:
这个值一般是 0x00008000 ,算出 page_offset 后加上这个值就是 linux 内核的起始地址。
修改这个偏移量就可以使linux内核拷贝到不同的地址,自己修改注意内存对齐。

三极管的替换原则
确保安全的医疗设计
固体摆式倾角传感器原理及其应用
特朗普政府加征关税引汽车厂商不满_特朗普钢铁征收关税有什么影响
朱骏:没有收到陈晓薇的辞职信
Linux内核的起始地址查看
人工智能面试会有偏心的现象吗
如何在函数库中调用指令?
存储芯片行业撑过寒冬 行业复苏或将加快来临
A股区块链上市公司概念股盘点整体表现明显低于上市公司
Dialog半导体公司助力客户的下一代产品开发
计算机三种网络系统如何设计 架构如何
解读东风雪铁龙C4世嘉“五星”安全的奥秘
信号输入加个电解电容器会不会充满电断开
aigo移动固态硬盘S9:带来独一无二的体验
无卤锡膏有哪些特点呢?
干货!神舟十一号的七个经典问答
汽车行业芯片短缺的原因
浅谈第三代半导体的氮化镓性能优势
参考时钟对SERDES性能的影响