引用第1楼kasim于2010-01-28 10:30发表的 :
我想内核已经很明确的告诉你问题所在了
这是内核死掉之前的call stack。可以看到,上面所说的__copy_to_user()调用应该是由最后一步的keys_read()引起的。对应你的驱动源代码,可以发现是keys_read()里面的
[code]
ret = copy_to_user(buf, (void *)key7_status, min(sizeof(key7_status), count));
.......
首先谢谢您的解答,我有点明白了,但是我现在把KEY_DOWN的值改为了2,不是0了,但还是报错了,报错的代码是
[root@FriendlyARM plg]# insmod key7.ko
keys initialized!
[root@FriendlyARM plg]# ./key7_2_test
keysenter in open!
enter in irq! //我打印了些消息,看看是否进入中断
key_status is 2<1>Unable to handle kernel NULL pointer dereference at virtual address 00000002
pgd = c39a4000
[00000002] *pgd=33056031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1]
Modules linked in: key7
CPU: 0 Not tainted (2.6.29.4-FriendlyARM #6)
PC is at __copy_to_user+0xb8/0x314
LR is at keys_read+0x140/0x15c [key7]
pc : [<c0129458>] lr : [<bf0002a8>] psr: 80000013
sp : c306bf04 ip : c306be30 fp : c306bf54
r10: 00000000 r9 : c306a000 r8 : 00000000
r7 : 00000004 r6 : c306bf78 r5 : bf000ad8 r4 : 00000001
r3 : 00000000 r2 : 80000000 r1 : 00000002 r0 : 00000000
Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: c000717f Table: 339a4000 DAC: 00000015
Process key7_2_test (pid: 571, stack limit = 0xc306a268)
Stack: (0xc306bf04 to 0xc306c000)
bf00: 00000000 00000001 00000000 00000001 bf0002a8 40024000 bece3ca0
bf20: 00000000 00000000 00000000 00000000 c306a000 c3055100 00000000 c306bf78
bf40: 00000003 c0028008 c306bf74 c306bf58 c0088468 bf000178 00000000 00000000
bf60: c3055100 00000003 c306bfa4 c306bf78 c0088580 c00883c4 00000000 00000000
bf80: 00000000 00000000 0000008e 000085f8 00000000 000083f4 00000000 c306bfa8
bfa0: c0027e60 c0088544 000085f8 00000000 00000003 00000000 00000004 00000001
bfc0: 000085f8 00000000 000083f4 00000003 00000000 00000000 40025000 bece3d34
bfe0: 00000000 bece3c90 00008598 400dda3c 60000010 00000003 00000000 00000000
Backtrace:
[<bf000168>] (keys_read+0x0/0x15c [key7]) from [<c0088468>] (vfs_read+0xb4/0xe8)
r8:c0028008 r7:00000003 r6:c306bf78 r5:00000000 r4:c3055100
[<c00883b4>] (vfs_read+0x0/0xe8) from [<c0088580>] (sys_read+0x4c/0x84)
r7:00000003 r6:c3055100 r5:00000000 r4:00000000
[<c0088534>] (sys_read+0x0/0x84) from [<c0027e60>] (ret_fast_syscall+0x0/0x2c)
r6:000083f4 r5:00000000 r4:000085f8
Code: e4a08004 e4a0e004 e8bd01e0 e1b02f82 (14d13001)
---[ end trace 9707b15fc03fdeb0 ]---
Segmentation fault
[root@FriendlyARM plg]#
为什么现在还是报这个错呢?麻烦解答下,谢谢!