init_MUTEX在linux内核版本3.2中去了哪里?

时间:2015-01-06 15:13:31

标签: linux linux-kernel kernel driver linux-device-driver

我正在关注 Linux设备驱动程序(第3版)。当我尝试模仿第6章中的 scull 示例时,会报告错误。它说:

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

谁能告诉我init_MUTEX去了哪里? 顺便说一句,是否有一个列表可以检查所有内核API更改?

2 个答案:

答案 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));