我正在关注Linux设备驱动程序(第三版)。当我尝试模仿第6章中的scull示例时,会报告错误。它说:init_MUTEX在Linux内核版本3.2中去了哪里?
error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]
谁能告诉我init_MUTEX哪里去了? 顺便问一下,有没有可以检查所有内核API更改的列表?
我正在关注Linux设备驱动程序(第三版)。当我尝试模仿第6章中的scull示例时,会报告错误。它说:init_MUTEX在Linux内核版本3.2中去了哪里?
error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]
谁能告诉我init_MUTEX哪里去了? 顺便问一下,有没有可以检查所有内核API更改的列表?
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}()
thx为您的答案。我认为内核2.6和内核3.2之间存在差异。 –
@askb,有没有什么理由为什么linux从互斥量作为简单的信号量转移到全新的对象? – ransh
使用mutex_init()代替:
struct scull_pipe {
...
struct mutex mutex;
...
};
mutex_init(&(lptr->device.mutex));
不需要有内部括号。 – 0andriy
那些是从原来的。 –
我的开发平台是Debian的喘息内核版本3.2.0-4。我知道本书中的例子是针对内核2.6的。但我想尝试在内核3.2中的所有实例进行学习。 –
像其他人说的那样,旧的基于信号量的互斥体被新的Mutex API所取代。查看Documentation/locking/mutex-design.txt了解更多信息。 – tux3