2015-01-06 34 views
3

我正在关注Linux设备驱动程序(第三版)。当我尝试模仿第6章中的scull示例时,会报告错误。它说:init_MUTEX在Linux内核版本3.2中去了哪里?

error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration] 

谁能告诉我init_MUTEX哪里去了? 顺便问一下,有没有可以检查所有内核API更改的列表?

+1

我的开发平台是Debian的喘息内核版本3.2.0-4。我知道本书中的例子是针对内核2.6的。但我想尝试在内核3.2中的所有实例进行学习。 –

+0

像其他人说的那样,旧的基于信号量的互斥体被新的Mutex API所取代。查看Documentation/locking/mutex-design.txt了解更多信息。 – tux3

回答

6

init_MUTEX{_LOCKED}() was initially implemented as a semaphore。信号灯只有在旧的2.6.16内核,现在互斥与早期信号量实现更换,检查以下API和linux/mutex.h

struct mutex { ... 
}; 

mutex_{init,lock,trylock,unlock,lock_interruptible}() 
+0

thx为您的答案。我认为内核2.6和内核3.2之间存在差异。 –

+0

@askb,有没有什么理由为什么linux从互斥量作为简单的信号量转移到全新的对象? – ransh

2

使用mutex_init()代替:

struct scull_pipe { 
    ... 
    struct mutex mutex; 
    ... 
}; 

mutex_init(&(lptr->device.mutex)); 
+0

不需要有内部括号。 – 0andriy

+0

那些是从原来的。 –

相关问题