- 论坛徽章:
- 0
|
接触linux不久,对ioremap的返回空间有些疑问。。。
环境arm, linux2.6
在设备上察看vmallocinfo,结果如下:
[root@FriendlyARM /proc]# cat vmallocinfo
0xc4808000-0xc480a000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc480c000-0xc480e000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4810000-0xc4812000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4814000-0xc4816000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4818000-0xc481a000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc481c000-0xc481e000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4820000-0xc4822000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4824000-0xc4826000 8192 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4a00000-0xc4b01000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4c00000-0xc4d01000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc4e00000-0xc4f01000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc5000000-0xc5101000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc5200000-0xc5301000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
0xc5400000-0xc5501000 1052672 __arm_ioremap_pfn+0x78/0x330 ioremap
[root@FriendlyARM /proc]#
其中红色部分,就是连续执行了addr1=ioremap(0x20000000,4); addr2=ioremap(0x20000004,4);的结果。
问题:
1、个人理解,既然是只分配4个字节,那么ioremap返回一个page就够了阿。为什么会返回8K空间(2个page)呢?
2、addr1和addr2分别是0xc4810000,0xc4814000。既然每个地址空间的分配只占了8K,那中间间隔的那8K呢,做什么用?比如从0xc4812000到0xc4814000这段空间,空闲着吗?为什么不是连续分配给addr1和addr2呢?
3、实际上addr1和addr2 map的物理空间是连续的,那么如果访问addr1+4是否就等于访问addr2呢?
多谢各位! |
|