0

我是内核编程的新手,我有两个问题:

  1. 我的设备正在注册(通过动态注册),但我的应用程序无法打开设备文件。可能的原因是什么?
  2. 当我的设备驱动程序检测到除以零时,返回的适当错误代码是什么?

我的代码在内核中实现了简单的算术运算。我使用ioctl()基于接口在用户空间和内核之间进行通信。

if(out.b==0) /*checking for divide by zero*/
  out.res=-EINVAL;
else
  out.res=out.a/out.b;

copy_to_user((values*)ioctl_param,&out,sizeof(values));
break; 
4

1 回答 1

0

如果您不向我们展示您的代码,我们可能无法回答第一个问题。

至于第二个,EINVAL或者也许ERANGE

在您的情况下,您需要区分ioctl_param结构中返回的信息(顺便说一句,这是一个非常糟糕的变量名)和ioctl()调用本身的返回状态。

请记住,ioctl()如果成功完成则返回 0,如果失败则设置 errno。内核和 C 库为您完成了大部分工作。通常你所要做的就是从你的函数中返回-EINVAL或类似的。ioctl()

像这样的东西:

if(out.b == 0) /*checking for divide by zero*/
  return -EINVAL;

out.res=out.a / out.b;

copy_to_user((values*)ioctl_param,&out,sizeof(values));
break; 
于 2012-05-18T07:42:29.197 回答