linux设备驱动程序中允许和不允许做什么?

时间:2019-06-04 19:06:58

标签: linux-kernel linux-device-driver

我对linux设备驱动程序有一个一般性问题。经常让我感到困惑的是,在Linux设备驱动程序中允许或不允许执行哪些操作?

是否要遵循任何规则或种类的查询列表?

例如,以下示例是不允许的?

msleep(1000);
al = kmallock(sizeof(val));
printk(KERN_ALERT "faild to print\n";
ret = adc_get_val()*0.001;

1 个答案:

答案 0 :(得分:1)

在linux设备驱动程序编程中,它取决于您所处的上下文。需要区分两个上下文:

  • 流程上下文
  • IRQ上下文。

只能在流程上下文中进行休眠,或者您可以安排工作以供以后执行(有几种机制可以做到这一点)。这是一个复杂的主题,无法在段落中描述。

分配内存可以休眠,这取决于调用kmalloc的参数/标志。

始终可以调用

print(一旦内核被调用),否则请使用early_printk。

我不知道add_get_val函数的作用。它不是Linux内核的一部分。并且正如已经提到的,float值不能在内核中轻松使用。