2011-09-15 57 views
1

我正在寫一個內核對象(.ko文件,這通常是設備驅動程序)的Linux的一些問題。
我必須使用一些機制來保護在這個項目中的關鍵部分,但我很困惑的內核對象。關於內核對象

在使用insmod將我的模塊插入內核後,我找不到使用命令ps -A的模塊進程。
這是否意味着該IRQ將喚起模塊處理,使我不得不使用互斥同步它們?

此外
這是有點不清楚,所以我想指出的問題。這個內核對象用於包過濾,它基於netfilter。
我的困惑是:每個數據包都會啓動我的模塊的進程,以便我必須使用互斥鎖來同步它們,否則當數據包到達本地NIC時會發生其他一些事情?

回答

1

除非你的模塊會出現什麼,據我知道ps -A列在開始KTHREAD。內核對象不會啓動任何進程,事實上,插入和刪除模塊的函數都在中斷上下文中運行(如果我不是自定義的話)。

無論如何,我假設你已經設定了一堆回調,與Netfilters和每一個數據包是由內核這些回調將被稱爲處理時間註冊它們。這就是你的意思是「一個包開始一個過程」。嗯,不,因爲netfilter的註冊回調也是從中斷上下文運行的,因此這裏沒有過程概念。這意味着,根據您註冊回調的哪個鉤點(本地in,本地out,前向...),每個數據包都可能觸發中斷。這就是爲什麼我個人認爲你應該儘量讓你的代碼在netfilter鉤子中儘可能少。

最後,你不能使用互斥也不信號燈在中斷上下文,因爲這將鎖定整個內核。如果你真的需要在中斷環境中同步某些東西,你應該看看自旋鎖http://www.mjmwired.net/kernel/Documentation/spinlocks.txt

希望這會有所幫助。