do while (0)
do while (0)
google以下知道動態初始化用的,但是這個函式具體實現什麼功能,這裡的init_work(_work, _func, _data)的_func在初始化的時候執行嗎
init_work會在你定義的_work工作佇列裡面增加乙個工作任務,該任務就是_func。_func這個任務會需要一些資料作為引數,這個引數就是通過_data傳遞的。
任務的啟動是通過排程程式schedule_work來處理的。
init_list_head是初始化乙個鍊錶,就是在此之前,鍊錶是不存在的。
(_work)->pending是排程程式需要使用的乙個標誌,沒有仔細研究用處。
prepare_work就是進行賦值,確定鍊錶中這個物件的任務和資料。
init_timer是初始化這個物件的任務時間,具體作用沒有研究。
在2.6.22版本中,init_work已經做了大幅度的修改。init_work現在使用2個引數,分別是鍊錶和任務,去掉了資料。這時我們的任務func以_work作為引數。我們需要將我們的work結構加入到我們的data結構中,然後使用container_of這個函式來求出我們的data的指標。
巨集定義函式container of的解釋
從kernel裡面摳出的一些與巨集container of有關的 如下 1 此巨集作用是從結構體的某元素 member 出發,得到結構體的首位址 2 container of的引數解釋 3 ptr 指向結構體中member這個元素的指標。3 offsetof的解釋 1 格式這樣看比較明顯 優先順序比...
對INIT WORK的理解
以前核心裡對這個函式是這樣定義的 define init work work,func,data 可以理解為init work會在你定義的 work工作佇列裡面增加乙個工作任務,該任務就是 func。func這個任務會需要一些資料作為引數,這個引數就是通過 data傳遞的。而現在看驅動的時候你會發現...
INIT WORK的暫時理解
scsih fw event add insert and queue up fw event ioc per adapter object fw event object describing the event context this function will acquire ioc fw ...