linux设备驱动程序

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:49:38
为什么驱动程序里面有明显的错误,系统还可以编译通过?
我故意将__put_user(1,buf,1)改为(1,buf,10)
我是用这个命令arm-linux-gcc -O2 -DMODULE -D__KERNEL__ -c test.c
希望高手帮一下忙!谢谢!

编译通过不意味着执行就没有问题。请见__put_user的源代码:
static inline void __put_user(unsigned long x, void * y, int size)
{
__gcc_barrier();
switch (size) {
case 1:
*(char *) y = x;
break;
case 2:
*(short *) y = x;
break;
case 4:
*(int *) y = x;
break;
case 8:
*(long *) y = x;
break;
default:
bad_user_access_length();
}
__gcc_barrier();
}
你改size为10,编译上不会有任何问题。但执行时,会导致调用bad_user_access_length(),这会导致一个kernel panic。
int bad_user_access_length(void)
{
panic("bad_user_access_length executed (not cool, dude)");
}