打印
[嵌入式linux]

请问一个关于LINUX2.6访问物理地址的问题

[复制链接]
2281|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
borbery|  楼主 | 2008-8-15 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,LINUX2.6的映射是和LINUX2.4不一样吗?
在LINUX2.4能跑的驱动在2.6下面出错:

Unable to handle kernel paging request at virtual address fefa40c0

访问的是AT91rm9200的TC3的寄存器。



下面是地址转换部分的代码:

#ifdef CONFIG_MMU

/*
 * Remap the peripherals from address 0xFFF78000 .. 0xFFFFFFFF
 * to 0xFEF78000 .. 0xFF000000.  (544Kb)
 */
 
#define AT91_IO_PHYS_BASE    0xFFF78000  
#define AT91_IO_VIRT_BASE    (0xFF000000 - AT91_IO_SIZE)

#else
/*
 * Identity mapping for the non MMU case.
 */
#define AT91_IO_PHYS_BASE    AT91_BASE_SYS
#define AT91_IO_VIRT_BASE    AT91_IO_PHYS_BASE
#endif

#define AT91_IO_SIZE    (0xFFFFFFFF - AT91_IO_PHYS_BASE + 1)

/* Convert a physical IO address to virtual IO address */

#define AT91_IO_P2V(x)    ((x) - AT91_IO_PHYS_BASE + AT91_IO_VIRT_BASE)

/*
 * Virtual to Physical Address mapping for IO devices.
 */

#define AT91_VA_BASE_SYS    AT91_IO_P2V(AT91_BASE_SYS)
#define AT91_VA_BASE_TCB1    AT91_IO_P2V(AT91RM9200_BASE_TCB1)




另外:
为什么是 #define AT91_IO_PHYS_BASE    0xFFF78000  
而不是   #define AT91_IO_PHYS_BASE    0xFFFFA000  呢?手册上的物理起始地址是FFFFA000啊!

相关帖子

沙发
borbery|  楼主 | 2008-8-15 12:56 | 只看该作者

re

自己顶一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

1

粉丝