2015-01-06 37 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

那些是從原來的。 –

相關問題