Unable to handle kernel NULL pointer dereference at virtual address 00000000

# insmod rgb_led.ko
match successed
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = 88768000
[00000000] *pgd=88741831, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] PREEMPT SMP ARM
Modules linked in: rgb_led(O+)
CPU: 0 PID: 114 Comm: insmod Tainted: G O 4.1.15+ #4
Hardware name: Freescale i.MX6 Ultralite (Device Tree)
task: 88679c80 ti: 8806c000 task.ti: 8806c000
PC is at led_probe+0x1d8/0x554 [rgb_led]
LR is at of_get_address+0x1c/0x138
pc : [<7f00038c>] lr : [<804eeefc>] psr: a0060013
sp : 8806dd80 ip : 00000000 fp : 778e80dc
r10: 00000001 r9 : 88717f40 r8 : 00000007
r7 : fffffdfb r6 : f004021c r5 : 8096a504 r4 : 7f000d18
r3 : 00000000 r2 : ffffffea r1 : 00000004 r0 : 00000000
Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 10c5387d Table: 8876806a DAC: 00000015
Process insmod (pid: 114, stack limit = 0x8806c210)
Stack: (0x8806dd80 to 0x8806e000)
dd80: 88101c10 7f000b7c 00000000 80a10d1c 88101c10 7f000b7c fffffdfb 8034760c
dda0: 80a10d1c 88101c10 7f000b7c 00000000 00000007 80345ed4 88101c10 7f000b7c
ddc0: 88101c44 8098c108 00000000 803460e8 00000000 7f000b7c 8034605c 8034444c
dde0: 8803095c 880f7f34 7f000b7c 88557b80 00000000 80345688 7f000ac0 8096d820
de00: 884c8100 7f000b7c 8096d820 884c8100 7f003000 803466d4 8096d820 8096d820
de20: 884c8100 7f003010 8096d820 80009704 00000000 8040003f 88001f00 800e4b40
de40: 00000001 88717380 8040003e 8bc644e0 8bb57000 00000000 00000001 8040003e
de60: 00000001 88001f00 80969260 88001f00 000000d0 8096a6ec 778e80dc 800e61cc
de80: 7f000bc0 7f000bc0 884c80c0 00000001 7f000c08 00000001 778e80dc 80684b4c
dea0: 00000001 7f000c08 8806df58 7f000bc0 88717f48 80095e48 7f000bcc 00007fff
dec0: 80093440 800efed8 800935c4 00c44008 7f000d08 a0a679ac 7f000bcc 00000000
dee0: a0a66000 00002587 009c11c1 00000000 0000000f 00000000 00000000 00000000
df00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
df20: 00000000 00000000 00000000 00000000 00000018 00000000 00000003 00c44008
df40: 0000017b 8000f684 8806c000 00000000 00000000 800966bc a0a66000 00002587
df60: a0a674fc a0a673ae a0a682ac 00000dac 00000fdc 00000000 00000000 00000000
df80: 0000001e 0000001f 00000016 00000013 00000011 00000000 00c44008 ffffffff
dfa0: 7ea6ef45 8000f500 00c44008 ffffffff 00000003 00c44008 00000000 7ea6ef45
dfc0: 00c44008 ffffffff 7ea6ef45 0000017b 00000000 00000000 76fb6000 00000000
dfe0: 7ea6ec98 7ea6ec88 00026cb8 76f0fad2 80060030 00000003 d7f7dff3 e9feee7f
[<7f00038c>] (led_probe [rgb_led]) from [<8034760c>] (platform_drv_probe+0x44/0xa4)
[<8034760c>] (platform_drv_probe) from [<80345ed4>] (driver_probe_device+0x16c/0x2b0)
[<80345ed4>] (driver_probe_device) from [<803460e8>] (__driver_attach+0x8c/0x90)
[<803460e8>] (__driver_attach) from [<8034444c>] (bus_for_each_dev+0x6c/0xa0)
[<8034444c>] (bus_for_each_dev) from [<80345688>] (bus_add_driver+0x140/0x1ec)
[<80345688>] (bus_add_driver) from [<803466d4>] (driver_register+0x78/0xf8)
[<803466d4>] (driver_register) from [<7f003010>] (led_platform_driver_init+0x10/0x30 [rgb_led])
[<7f003010>] (led_platform_driver_init [rgb_led]) from [<80009704>] (do_one_initcall+0x80/0x1d8)
[<80009704>] (do_one_initcall) from [<80684b4c>] (do_init_module+0x58/0x1a8)
[<80684b4c>] (do_init_module) from [<80095e48>] (load_module+0x165c/0x1d48)
[<80095e48>] (load_module) from [<800966bc>] (SyS_finit_module+0x64/0x74)
[<800966bc>] (SyS_finit_module) from [<8000f500>] (ret_fast_syscall+0x0/0x3c)
Code: e5940018 eb53bcb8 e594301c e584002c (e5936000)
---[ end trace 13e21d4f75523d46 ]---

此bug发生情况:弄开发板的rgb灯的驱动,加载驱动的时候,报错。看内容是非法指针的使用,才导致系统出错。

首先看红色部分,打印了match successed,此为led_probe函数的开头的printk,接着看红色部分 PC is at led_probe,错误发生在led_probe中,检查后,发现某个结构体指针没有赋值就用了,所以报错了。

原文地址:https://www.cnblogs.com/Rainingday/p/13942775.html