linux内核启动时链接地址,linux内核启动时几个关键地址

linux内核启动时几个关键地址

1、名词解释

ZTEXTADDR

解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。

ZRELADDR

内核启动在RAM中的物理地址。压缩的内核映像被解压到这个地址,然后执行。

This is the address where the decompressed kernel will be written, and eventually executed. The following constraint must be valid:

__virt_to_phys(TEXTADDR) == ZRELADDR

The initial part of the kernel is carefully coded to be position independent.

TEXTADDR

内核启动的虚拟地址,与ZRELADDR相对应。一般内核启动的虚拟地址为RAM的第一个bank地址加上0x8000。

TEXTADDR = PAGE_OFFSET + TEXTOFFST

Virtual start address of kernel, normally PAGE_OFFSET + 0x8000.This is where the kernel image ends up. With the latest kernels, it must be located at 32768 bytes into a 128MB region. Previous kernels placed a restriction of 256MB here.

TEXT_OFFSET

内核偏移地址,即内核起始位置相对于内存起始位置的偏移,对于相对于物理内存还是相对于虚拟内存都是一样的结果。在arch/arm/makefile中设定。

PHYS_OFFSET

RAM第一个bank的物理起始地址,即物理内存的起始地址。

Physical start address of the first bank of RAM.

PAGE_OFFSET

RAM第一个bank的虚拟起始地址,即内核虚拟地址空间的起始地址。

2、小结

从上面分析可知道,linux内核被bootloader拷贝到RAM后,解压代码从ZTEXTADDR开始运行(这段代码是与位置无关的PIC)。内核被解压缩到ZREALADDR处,也就是内核启动的物理地址处。相应地,内核启动的虚拟地址被设定为TEXTADDR,满足如下条件:

TEXTADDR = PAGE_OFFSET + TEXT_OFFSET

内核启动的物理地址和虚拟地址满足入下条件:

ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)= virt_to_phys(TEXTADDR)

假定开发板为smdk2410,则有:

内核启动的虚拟地址

TEXTADDR = 0xC0008000

内核启动的物理地址

ZRELADDR = 0x30008000

如果直接从flash中启动还需要设置ZTEXTADDR地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值