当前位置: 技术问答>linux和unix
哪位大哥对“arm-linux的页表映射”比较熟悉啊?
来源: 互联网 发布时间:2016-07-08
本文导语: s3c2410手册和很多书籍上都说:“小页(4K)描述符的bit[1:0]应该为10(二进制)”。 可是我在读代码的时候发现:小页(4K)描述符的bit[1:0]并不为10(二进制)。 证据如下: 我们知道:在arm-linux下会把高端中断向量表0xffff0000,映...
s3c2410手册和很多书籍上都说:“小页(4K)描述符的bit[1:0]应该为10(二进制)”。
可是我在读代码的时候发现:小页(4K)描述符的bit[1:0]并不为10(二进制)。
证据如下:
我们知道:在arm-linux下会把高端中断向量表0xffff0000,映射到物理地址0x30001000处。映射的长度为1页(4K)。
代码这样实现的:
通过一个二级页表映射的,第一级我就不说了。第二级页表中存放的是一个小页描述符0x300010df,这样就把虚拟地址0xffff0000处的一页(4K)映射到了物理地址0x30001000处。
我们看到小页描述符0x300010df的bit[1:0]并不为10(二进制),而是为11(二进制)。
我就想是不是s3c2410手册和很多书籍上都写错了?请高手指点!感激涕零!
可是我在读代码的时候发现:小页(4K)描述符的bit[1:0]并不为10(二进制)。
证据如下:
我们知道:在arm-linux下会把高端中断向量表0xffff0000,映射到物理地址0x30001000处。映射的长度为1页(4K)。
代码这样实现的:
通过一个二级页表映射的,第一级我就不说了。第二级页表中存放的是一个小页描述符0x300010df,这样就把虚拟地址0xffff0000处的一页(4K)映射到了物理地址0x30001000处。
我们看到小页描述符0x300010df的bit[1:0]并不为10(二进制),而是为11(二进制)。
我就想是不是s3c2410手册和很多书籍上都写错了?请高手指点!感激涕零!
|
搜了下,貌似s3c2410映射的代码是这段?
*(tb_base + (0xffff0000>>20)) = VECTORS_PHY_BASE|(0x03
*(tb_base + (0xffff0000>>20)) = VECTORS_PHY_BASE|(0x03