Device Tree内存节点疑问:reg字段重叠与命名地址不符
Device Tree内存节点的正确解读
节点名称memory@40000000的作用
节点名称里的@40000000是节点的单元地址,用来区分同类型的多个节点。对于memory节点来说,它通常对应该节点描述的内存区域起始地址,这里也是完全匹配的。
reg字段的正确解析
你之前对reg字段的拆分存在错误,<0x00 0x40000000 0x00 0x20000000>并不是两个内存区间,而是单个64位内存区域的描述格式:
- 前两个值
0x00和0x40000000拼接成64位起始物理地址:0x0000000040000000,如果是32位系统,高32位的0x00可以忽略,实际起始地址就是0x40000000 - 后两个值
0x00和0x20000000拼接成64位内存大小:0x0000000020000000(即512MB)
所以这个reg字段实际描述的是从0x40000000开始,长度为0x20000000的一块连续内存,不存在区间重叠的问题。
节点名称与reg起始地址的对应
节点名称里的@40000000正好对应reg解析出的起始地址0x40000000,二者完全匹配,之前的误解源于错误拆分了reg的结构。
额外说明
Device Tree中reg字段的格式由系统地址空间位数决定:
- 32位系统中,每个内存区域用
<起始地址 大小>两个值描述 - 64位系统中,每个内存区域用
<高32位地址 低32位地址 高32位大小 低32位大小>四个值描述
这个节点采用的是64位描述格式,所以才会出现四个数值。
内容的提问来源于stack exchange,提问作者Little Tree
相关产品推荐
相关产品推荐

