先将上节的代码
#if 1
usb_buffer_alloc(usbdev, len, GFP_ATOMIC, &usb_dma_buff_phys_addr);
//初开始没有给bus_buff赋值,导致内核引用出现错误
#else
usb_buff = usb_buffer_alloc(usbdev, len, GFP_ATOMIC, &usb_dma_buff_phys_addr); //分配缓冲空间,用来返回缓冲地址
#endif
改为1这样就能弹出oops错误,但是还需要汇编代码,要不然弹出的oops错误不知从何处找到错误
现在来先修改一下Makefile,加入下面一句
arm-linux-objdump -D -m arm -S usbmouse_as_key.ko>usbmouse.dis
下面这个模块加载之后,移动鼠标就会弹出以下oops错误,
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 17 [#1]
Modules linked in: usbmouse_as_key
CPU: 0 Not tainted (2.6.29.4-FriendlyARM #14)
PC is at usbmouse_callback+0x1c/0xac [usbmouse_as_key]
LR is at usb_hcd_giveback_urb+0x6c/0x108
pc : [<bf0002b0>] lr : [<c01a2754>] psr: 60000093
sp : c035de18 ip : c035de48 fp : c035de44
r10: 00000000 r9 : bf0003a0 r8 : 00000000
r7 : c38984c0 r6 : bf000c5c r5 : c3898400 r4 : 00000000
r3 : 00000000 r2 : 00000003 r1 : 00000204 r0 : c38fdb80
Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: c000717f Table: 33954000 DAC: 00000017
Pro