Linux输入驱动程序中的NULL指针取消引用

时间:2015-11-29 13:56:00

标签: c linux input linux-kernel linux-device-driver

//Init Module
...
set_bit(EV_ABS, joystick_dev->evbit);

set_bit(ABS_X, joystick_dev->absbit);
set_bit(ABS_Y, joystick_dev->absbit);
set_bit(ABS_Z, joystick_dev->absbit);
...

//Kernel Thread
...
int g[3];

g[0] = -1;
g[1] = 0;
g[2] = 0;

input_report_abs(joystick_dev, ABS_X, g[0]);
input_report_abs(joystick_dev, ABS_Y, g[1]);
input_report_abs(joystick_dev, ABS_Z, g[2]);

input_sync(joystick_dev);
...

执行突然停在

input_report_abs(joystick_dev, ABS_Y, g[1]);
执行

input_report_abs(joystick_dev, ABS_X, g[0]);

并抛出以下异常 -

BUG: unable to handle kernel NULL pointer dereference...

可能是什么错误?谢谢。

2 个答案:

答案 0 :(得分:0)

我认为您忘记为g[0]分配值。

// Kernel Thread ... int g[3];

g[1] = -1; g[2] = 0; g[3] = 0;

int g[3]表示g[0],g[1],g[2]对吗?希望你能得到你想要的东西。

答案 1 :(得分:0)

问题是在Linux中,在注册ABS事件时,我们需要设置它们的参数,对于Relative和事件来说,的情况。所以我们需要添加它。

input_set_abs_params(joystick_dev, ABS_X, 0, 255, 4, 8);
input_set_abs_params(joystick_dev, ABS_Y, 0, 255, 4, 8);
input_set_abs_params(joystick_dev, ABS_Z, 0, 255, 4, 8);

现在它会正常工作。这在此处记录:

https://www.kernel.org/doc/Documentation/input/input-programming.txt