uboot内核入口点30008000的由来(50008000同理)

本文探讨了Linux内核入口点30008000(或50008000)的来源,解释了由于uboot不使用虚拟内存,内核启动后会启用MMU进行虚拟内存映射。内核的起始地址由链接器在编译时决定,并通过PAGE_OFFSET和TEXT_OFFSET计算得出,这些值在不同平台和配置中有所不同。在ARM架构下,内核映像加载到特定物理地址,随后进行虚拟内存设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uboot没有虚拟内存管理,其程序直接访问物理地址,所以30008000是物理地址,跳到这个地址,则内核便可以直接运行起来,而内核运行起来后,会马上启动MMU,进行虚拟内存映射(几乎是马上,之前只是比对了CPU和ARCH两个参数),然后其程序访问的便是虚拟内存。你之所以有这个困惑,我想是因为没有弄明白uboot和内核其实是两个独立的
映像,内核启动后uboot映像便不起作用了,而且其空间也会被内核初始化,这时kernel的stext实际上是由
内核映射生成时的链接器来决定的,链接器指定c0008000这么一个不存在于物理地址空间的地址,是因为内核
是运行于虚拟空间的,因为它马上就启动了MMU。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值