请教:Linux中PHYS

[复制链接]
查看11 | 回复10 | 2021-1-27 06:34:29 | 显示全部楼层 |阅读模式
Linux中,在linux/arch/arm/kernel/head.S文件中,有下面的代码:
#if(PHYS_OFFSET&0x001fffff)
#error"PHYS_OFFSETmustbeataneven2MiBboundary!"
#endif
请教诸位:
1、为什么PHYS_OFFSET必须位于2MiB边界呢?
2、很不好意思地问一下,这个2MiB是什么意思?我听说过2Mb,、2MB,没听过2MiB。从上面if语句的"PHYS_OFFSET&0x001fffff"这个条件来看,此处的2MiB应该就是指2MB,但写成2MiB是啥意思啊?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
自己顶一下,等待高手指教
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
可能跟你具体的ARM核的外设有关吧,一般是不会有这种限制的,PHYS_OFFSET只是起始物理地址,比如可以是0x20008000
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
这个从代码上来看,是说HYS_OFFSET必须大于2Mb,
这应该和arm体系有关,具体为什么是2mb,还得去看硬件手册。
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
1、必须在2M边界这个规律应该和具体arm核无关,这是linux2.6内核中的关于arm架构的标准代码,不是针对某一款具体cpu的。应该是所有arm架构的cpu都遵循这个规律。
2、PHYS_OFFSET的确是起始物理地址,但不可以是0x20008000。由上面的代码即可确定(必须在2M边界啊)。实际上另有一个宏KERNEL_RAM_PADDR,是内核存放的起始地址,其值为PHYS_OFFSET+0x8000。
3、这个代码限制的是PHYS_OFFSET的低21位必须为0,也就是限制其必须2M对齐,而不是必须大于2M。
我没在arm手册上发现这个限制啊,真晕
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
说是"在2M边界"可能不太确切,准确的说法应该是“2M对齐”的。
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
我个人估计,可能和arm加电时的存储器映射有关系,数款armcpu都是在刚加电时。把0~1FFFFF的地址空间映射为flash空间。
可能因为这个原因导致的,RAM的起始物理地址,必须是2M对齐的。
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
标准内核都是X86平台的,你打个补丁以后才会是arm平台,但是都是arm核,不同外围的CPU的代码也是不一样的,而且PHYS_OFFSET这个宏是和具体平台相关的,比如我用得AT91RM9200,就是在\include\asm-arm\arch-at91rm9200\memory.h里面定义的
引用4楼youxuesifang的回复:1、必须在2M边界这个规律应该和具体arm核无关,这是linux2.6内核中的关于arm架构的标准代码,不是针对某一款具体cpu的。应该是所有arm架构的cpu都遵循这个规律。
2、PHYS_OFFSET的确是起始物理地址,但不可以是0x20008000。由上面的代码即可确定(必须在2M边界啊)。实际上另有一个宏KERNEL_RAM_PADDR,是内核存放的起始地址,其值为PHYS_OFFSET+0x8000。
3、这个代码限制的是PHYS_OFFSET的低21位必须为0,也就是限制其必须2M对齐,而不是必须大于2M。
我没在arm手册上发现这个限制啊,真晕

回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
而且我的内核里没有linux/arch/arm/kernel/head.S这个文件,而是head-armv.S
回复

使用道具 举报

千问 | 2021-1-27 06:34:29 | 显示全部楼层
在新的2.6内核版本中,arm相关代码已经被合并到mainline了,所以新版本的2.6内核不再需要打arm补丁了。
PHYS_OFFSET的值的确应该是根据具体cpu的内存来确定,这应该是属于bsp中必须确定的常量之一,所以,你用atmel的芯片在meomory.h中定义。但是,判断这个值是否2M对齐的这个代码则是处于文件"linux/arch/arm/kernel/head.S"中。
就是说,PHYS_OFFSET的定义应该是根据自己开发板和cpu芯片的具体情况,但是PHYS_OFFSET须2M对齐,则是属于arm架构cpu的共性。
现在我不太确定,这个共性是怎么来的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行