insmod:Unable to handle kernel NULL pointer dereference at virtual address 0000000c

今天编写一个key.ko驱动模块文件,使用insmod命令报错出一下的代码,头痛了一天,找了一天的错误终于发现是指针的问题。

[   74.970000] Unable to handle kernel NULL pointer dereference at virtual address 0000000c
[   74.980000] pgd = ee2e4000
[   74.980000] [0000000c] *pgd=6e06c831, *pte=00000000, *ppte=00000000
[   74.985000] Internal error: Oops: 17 [#1] PREEMPT SMP ARM
[   74.985000] Modules linked in: mykey(O+)
[   74.985000] CPU: 2 PID: 1388 Comm: insmod Tainted: G           O 3.14.0 #30
[   74.985000] task: ee1d4780 ti: ee262000 task.ti: ee262000
[   74.985000] PC is at of_get_named_gpiod_flags+0xa4/0xcc
[   74.985000] LR is at _raw_spin_unlock_irqrestore+0x18/0x44
[   74.985000] pc : [<c01f8398>]    lr : [<c052da54>]    psr: a0000053
[   74.985000] sp : ee263dd0  ip : ee263ddc  fp : c007278c
[   74.985000] r10: 00000001  r9 : ee0ca840  r8 : bf002000
[   74.985000] r7 : bf00050c  r6 : fffffffe  r5 : 00000000  r4 : 00000000
[   74.985000] r3 : 00000000  r2 : 00000000  r1 : c0562b38  r0 : c0772618
[   74.985000] Flags: NzCv  IRQs on  FIQs off  Mode SVC_32  ISA ARM  Segment user
[   74.985000] Control: 10c5387d  Table: 6e2e404a  DAC: 00000015
[   74.985000] Process insmod (pid: 1388, stack limit = 0xee262240)
[   74.985000] Stack: (0xee263dd0 to 0xee264000)
[   74.985000] 3dc0:                                     ee263ddc c087bc24 00000000 00000000
[   74.985000] 3de0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   74.985000] 3e00: 00000000 fffffdfb ee922e80 bf00061c bf0004d0 bf00206c eefc9d90 c00ae620
[   74.985000] 3e20: 00030003 10000000 ee262000 00000000 bf0004d0 c00087b4 eea52000 00000000
[   74.985000] 3e40: c076f2f8 c0884630 ee922e80 ef1e9620 ee0caa00 00000000 eefc9d30 c00ae620
[   74.985000] 3e60: ef1e9620 0000c662 00000000 0000001c eefc9d20 c00ae620 00000001 0000909a
[   74.985000] 3e80: ee0ca840 ee263f58 ee263f58 bf0004c4 bf0004d0 bf00050c 00000001 00000001
[   74.985000] 3ea0: c007278c c0074f9c bf0004d0 00007fff c007301c 0000065f c00727e4 ee262000
[   74.985000] 3ec0: bf0004c4 bf00060c f00a8638 00000000 00000000 bf0004d0 6e72656b 00006c65
[   74.985000] 3ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   74.985000] 3f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   74.985000] 3f20: 00000000 00000000 00000000 c00a4260 000000d2 0001b1b7 001e0058 001cefc2
[   74.985000] 3f40: 00000080 c000e5a4 ee262000 00000000 00000000 c00755a4 f0094000 0001b1b7
[   74.985000] 3f60: f00a7fa8 f00a7ded f00aeeb8 00000624 000007f4 00000000 00000000 00000000
[   74.985000] 3f80: 0000002a 0000002b 00000014 00000000 00000010 00000000 00000000 bef49e64
[   74.985000] 3fa0: 00000069 c000e420 00000000 bef49e64 001e0058 0001b1b7 001cefc2 00000000
[   74.985000] 3fc0: 00000000 bef49e64 00000069 00000080 bef49e68 001cefc2 bef49e68 00000000
[   74.985000] 3fe0: 00000000 bef49ae8 000387e8 0000bc70 60000050 001e0058 e1a04000 ba00001a
[   74.985000] [<c01f8398>] (of_get_named_gpiod_flags) from [<bf00206c>] (init_module+0x6c/0x1f0 [mykey])
[   74.985000] [<bf00206c>] (init_module [mykey]) from [<c00087b4>] (do_one_initcall+0x30/0x144)
[   74.985000] [<c00087b4>] (do_one_initcall) from [<c0074f9c>] (load_module+0x173c/0x1c68)
[   74.985000] [<c0074f9c>] (load_module) from [<c00755a4>] (SyS_init_module+0xdc/0xe0)
[   74.985000] [<c00755a4>] (SyS_init_module) from [<c000e420>] (ret_fast_syscall+0x0/0x30)
[   74.985000] Code: e28dd038 e8bd8070 e59f0024 e59f101c (e595200c) 
[   75.265000] ---[ end trace 9d4778776cea6297 ]---
Segmentation fault

出错原因

 我的if(pmykey = NULL)少写了一个=号,导致pmykey在赋值的时候直接变成空指针,在下面的程序每当要用到这个指针时就会出错

所以当你出现这个问题时检查一下你的某一个指针是否也像我一样被不小心赋值成了一个空指针!!!

猜你喜欢

转载自blog.csdn.net/imysy_22_/article/details/126844088