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

Where has init_MUTEX gone in linux kernel version 3.2?

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

    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 header

struct mutex { ...
};

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

改用mutex_init():

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

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