我正在关注 Linux设备驱动程序(第3版)。当我尝试模仿第6章中的 scull 示例时,会报告错误。它说:
error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]
谁能告诉我init_MUTEX去了哪里? 顺便说一句,是否有一个列表可以检查所有内核API更改?
答案 0 :(得分: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}()
答案 1 :(得分:2)
改为使用mutex_init():
struct scull_pipe {
...
struct mutex mutex;
...
};
mutex_init(&(lptr->device.mutex));