Linux内核6.6 内存管理 (17)内核镜像区和线性映射区

内核镜像区和线性映射区

map_kernel中所有虚拟地址均 direct_map_end(0xffff800000000000),属于内核镜像专属虚拟区域,不在线性映射区内。内核正常运行时,CPU 直接访问这些虚拟地址执行代码(text 段)、读取数据(rodata、data 段),是内核 “工作时” 的主地址

线性映射区是内核用于直接访问物理内存的虚拟地址区域,由 map_mem 函数负责映射

物理地址到内核镜像区 __phys_to_kimg

https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/include/asm/memory.h#L310

map_kernel的地址计算:(通过 kimage_voffset 转换)

内核镜像区的虚拟地址与物理地址通过 kimage_voffset 关联(物理地址 = 虚拟地址 - kimage_voffset):

以 text 段为例:

虚拟起始 = 0xffff800080010000

物理起始 = 0xffff800080010000 - 0xffff7ffffcc00000 = 0x83410000(与日志中 Kernel text+rodata segment range (physical) 起始一致)。

整个内核镜像的物理地址范围:0x83410000 ~ 0x84ef0000(text+rodata 段),位于物理内存中(> PHYS_OFFSET 0x80000000)。

该虚拟地址范围:所有虚拟地址均 > direct_map_end(0xffff800000000000),属于内核镜像专属虚拟区域,不在线性映射区内。

物理地址到线性映射区 __phys_to_virt

映射规则(物理地址 ↔ 虚拟地址)

通过线性映射公式转换:虚拟地址 = 物理地址 - PHYS_OFFSET + PAGE_OFFSET

验证:物理起始 0x83410000 对应的线性虚拟地址:

0x83410000 - 0x80000000 + 0xffff000000000000 = 0xffff000003410000(与日志完全一致)。

该虚拟地址范围:由 PAGE_OFFSET(起始)和 direct_map_end(结束)界定:0xffff000000000000 ≤ 虚拟地址 < 0xffff800000000000

完整日志

这里还是建议先把kaslr关掉,不然PHYS_OFFSET每次都会显示不同的地址,这里我们可以看到,物理地址偏移是0x80000000,这个正常就是设备树里memory的内容,应该是固定的

表格对照

__phys_to_virt 用于将任意物理地址转换为线性映射区的虚拟地址,供内核管理物理内存;

__phys_to_kimg 用于将内核镜像的物理地址转换为内核镜像区的虚拟地址,供内核访问自身代码和数据。

同样也是这两个区域的功能对照

#嵌入式笔面经分享##嵌入式转岗的难度怎么样##嵌入式##嵌入式软开#
全部评论

相关推荐

还得是线下直接聊啊,还得是(也许有)本地人优势啊。1.温州非标自动化小厂,卓展机电,线下老板直接面试,没问什么技术问题。就是个人介绍?优缺点?你专升本为什么升本?升本好不好考?为什么不考研?职业规划?对我们家什么设备有印象(hr带我逛过一圈)?投了别的什么厂?我说:投了海康大华这类大厂,直接给我挂了。老板说正常,这些都比较吃学历。最后我也不明白老板什么意思,他说:你之后还会接着面试的(当时10月7号),有海康,腾讯,小米汽车的话,你直接去,不用来我这小厂里。我这也不会给你发邮件发offer,要不然你还得接,你来的话跟我们hr联系就好。我说:让我去大厂打螺丝,我肯定来小厂干研发设计,如果秋招能找到工作,我电网考试啥的就不折腾了。转头想想我说的挺蠢的后面老板起身送我出办公室门的时候,又说了“别来我这里”这种话,还说薪资你可以提。劝退我?我应届生argue得动薪资?晚上回去后主动给hr发了感谢接待,表达了一下意愿。尽管老板后面好像不高兴说了两遍劝退的话,但hr这回复算是给我兜底了?2.浙江温州乐清中厂,加西亚电子,做低压断路器的,面的是电子/工艺工程师,实习期要轮岗下车间。线上面试,几乎每个候选人10来分钟,通知群里一共10来个候选人。四五个人面我。个人介绍?优缺点?问我乐清能接受吗?你有什么想问的?总之是一些意向类的问题。唯一的技术问题:有做过根据pcb画原理图的活吗?逆向是吧,没做过,毕竟没这个需求,不过大致的流程我知道的(卡顿了一下,流程是啥来着,之前视频刷到过的啊!!!),emmm……也就知道个流程/尬笑。面试官:好的我明白了(也没问我流程是什么,估计是知道我的斤两了),面试结果3到5天通知你。(周五下午面的,周日写下日记)无所谓这个加西亚能不能过(当然希望能过啦,这样最起码心里有底,敢去a其他厂的薪资)感觉这趟秋招跟“外行都叫得出名字的厂”无缘了
查看13道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务