//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...
可能是什么错误?谢谢。
答案 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