我对linux设备驱动程序有一个一般性问题。经常让我感到困惑的是,在Linux设备驱动程序中允许或不允许执行哪些操作?
是否要遵循任何规则或种类的查询列表?
例如,以下示例是不允许的?
msleep(1000);
al = kmallock(sizeof(val));
printk(KERN_ALERT "faild to print\n";
ret = adc_get_val()*0.001;
答案 0 :(得分:1)
在linux设备驱动程序编程中,它取决于您所处的上下文。需要区分两个上下文:
只能在流程上下文中进行休眠,或者您可以安排工作以供以后执行(有几种机制可以做到这一点)。这是一个复杂的主题,无法在段落中描述。
分配内存可以休眠,这取决于调用kmalloc的参数/标志。
始终可以调用print(一旦内核被调用),否则请使用early_printk。
我不知道add_get_val函数的作用。它不是Linux内核的一部分。并且正如已经提到的,float值不能在内核中轻松使用。