Chinaunix首页 | 论坛 | 博客
  • 博客访问: 804937
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 726
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-19 15:04
个人简介

重新开始,做回自我,爱拼的男人最牛!

文章分类
文章存档

2021年(2)

2020年(3)

2019年(17)

2014年(1)

2011年(1)

2010年(63)

我的朋友

分类: 嵌入式

2010-01-19 15:28:04

最近老被一个地址问题困扰,编译不出错,但是一插入模块就出现“Unable to handle kernel NULL pointer dereference at virtual address...”的段错误。
 
解决方法:
出现这种问题一般是由于地址映射的问题,其实只要映射正确就可以解决该问题,我是用ioremap函数映射就OK了。
例如:假定要对SPI进行映射(我用的是S3C2410,物理地址为0x59000000)

static __iomem *base_addr;

然后在函数中使用 base_addr=ioremap(0x59000000,0x20);

 

这里把我的错误经历贴出,希望大家能够避免:

1.参考GPIO的虚拟地址规律:S3C2410_VA_GPIO=(S3C2410_PA_GPIO-S3C2410_PA_UART)+S3C2410_VA_UART;所以我就想当然,把其他的要使用的虚拟地址直接在GPIO的虚拟地址上加上两者物理地址的差,结果在插入模块的时候总出上面的错误。

2.用手工推算某寄存器的虚拟地址,然后直接赋值,这样带来的错误还是一样。

3.一定要区分物理地址与虚拟地址的概念。

阅读(778) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:小议ioremap

给主人留下些什么吧!~~