主题 : 出现错误Unable to handle kernel NULL pointer dereference at virtual address 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 56028
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
综合积分: 66 分
注册时间: 2011-09-28
最后登录: 2012-07-17
楼主  发表于: 2011-11-24 16:55

 出现错误Unable to handle kernel NULL pointer dereference at virtual address

我编写了一个ADC转换的驱动程序,编译没有错误,在开发板上安装也没有提示错误
但是我在执行应用程序时,出现以上错误,问一下怎么回事?
我的执行过程如下:
[...... @mini2440]  insmod ADCdriver.ko
[                             ]  insmod ok ,the major is 221
[                            ]   mknod /dev/mini2440_adc c 221 0
[                             ]  ./app_adc  这个是应用程序,执行完这个就出现一情况


         ./app_adc
Read ADC Device failed!

Unable to handle kernel NULL pointer dereference at virtual address 00000004
pgd = c3ac8000
[00000004] *pgd=33acf031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1]
last sysfs file: /sys/devices/virtual/vc/vcs2/dev
Modules linked in: ADCdriver
CPU: 0    Not tainted  (2.6.32.2-FriendlyARM #5)
PC is at adc_read+0xc0/0x178 [ADCdriver]
LR is at adc_read+0x24/0x178 [ADCdriver]
pc : [<bf000188>]    lr : [<bf0000ec>]    psr: 40000013
sp : c3aebf18  ip : c3aebf18  fp : c3aebf54
r10: 00000000  r9 : c3aea000  r8 : c00300c8
r7 : becb5cfc  r6 : 00000004  r5 : bf0004cc  r4 : c3a9af00
r3 : 00000024  r2 : a0000013  r1 : 00000000  r0 : 00000001
Flags: nZcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 33ac8000  DAC: 00000015
Process app_adc (pid: 699, stack limit = 0xc3aea270)
Stack: (0xc3aebf18 to 0xc3aec000)
bf00:                                                       c3aea000 00000000
bf20: c3aebf54 c3aebf30 c0168540 c0168284 c3936280 c3a9af00 becb5cfc c3aebf78
bf40: 00000003 c00300c8 c3aebf74 c3aebf58 c009d22c bf0000d8 00000000 00000000
bf60: c3a9af00 00000003 c3aebfa4 c3aebf78 c009d344 c009d188 00000000 00000000
bf80: ffffffff 00000000 ffffffff 405aa0f9 00000000 40900000 00000000 c3aebfa8
bfa0: c002ff20 c009d308 405aa0f9 00000000 00000003 becb5cfc 00000004 becb5cfc
bfc0: 405aa0f9 00000000 40900000 00000003 00000000 00000000 00000000 becb5d24
bfe0: 00000000 becb5cf8 00008278 00013b8c 60000010 00000003 30546031 30546431
Backtrace:
[<bf0000c8>] (adc_read+0x0/0x178 [ADCdriver]) from [<c009d22c>] (vfs_read+0xb4/0
xe8)
r8:c00300c8 r7:00000003 r6:c3aebf78 r5:becb5cfc r4:c3a9af00
[<c009d178>] (vfs_read+0x0/0xe8) from [<c009d344>] (sys_read+0x4c/0x84)
r7:00000003 r6:c3a9af00 r5:00000000 r4:00000000
[<c009d2f8>] (sys_read+0x0/0x84) from [<c002ff20>] (ret_fast_syscall+0x0/0x28)
r6:40900000 r5:00000000 r4:405aa0f9
Code: e5943018 e2131b02 13e0000a 1afffff4 (e5913004)
---[ end trace bf4ed200be5e6874 ]---
Segmentation fault

      这是驱动程序的问题,怎么解决啊?高手指点一下

级别: 新手上路
UID: 56028
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
综合积分: 66 分
注册时间: 2011-09-28
最后登录: 2012-07-17
1楼  发表于: 2011-11-24 16:56
是不是应用程序的问题啊?还是驱动程序?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2011-11-24 18:06
PC is at adc_read+0xc0/0x178 [ADCdriver]

这说明程序挂在ADCdriver内核模块的adc_read()函数里了。有可能是函数本身的设计问题,也有可能是因为应用程序调用read()时传入的参数不合法引起的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 56028
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
综合积分: 66 分
注册时间: 2011-09-28
最后登录: 2012-07-17
3楼  发表于: 2011-11-25 07:52

 回 2楼(kasim) 的帖子

PC is at adc_read+0xc0/0x178 [ADCdriver]
LR is at adc_read+0x24/0x178 [ADCdriver]

这个看出是read函数的问题吗?对于一些错误,怎么样才能看出那里出问题了?是靠经验吗?
我在网上查这种问题所在 都说是地址没有映射造成的(我映射地址了)!我在看看read函数 多谢了!