2012-09-27 142 views
4

我試圖添加一個新的系統調用到linux內核3.2.x. 雖然在互聯網搜索有用的參考材料我有一個印象,就是執行系統調用作爲一個可加載模塊是不可能的,因爲在SO質疑Is it possible to add a system call via a LKM?使用LKM實現Linux系統調用

我發現了另外一個鏈接,說這「有添加系統調用的方式而不用使用模塊作爲包裝重新編譯內核,但這超出了本文的範圍「。 來源http://hekimian-williams.com/?p=20

我知道靜態實現系統調用將需要我每次我做任何更改時編譯內核代碼。有沒有像上述博客中指定的方式,我可以作爲一個模塊來實現它。

任何建議或方向的指針非常讚賞。

+1

能夠爲您解決問題了嗎?使用開放式字符設備,您可以使用read(),write(),ioctl()等從用戶空間與內核空間進行通信。結果將更加便攜。 – Peter

+0

@Peter是的,它可以通過我正在尋找這個解決方案,因爲我正在試圖學習這一點。你有什麼想法這個博客的人在說什麼..謝謝 – abhi

回答

4
  1. 找到sys_call_table/ia32_sys_call_table
  2. 製作一個拷貝,並修改它,如你所願(讓它成爲my_sys_call_table
  3. 找到system_call條目(這一個和其他人)
  4. 修改NR_syscalls表規模的情況下,比較instruction已改變
  5. 修改sys_call_table參考system_call指向my_sys_call_table

    500  call *sys_call_table(,%eax,4) 
         -> 
    500  call *my_sys_call_table(,%eax,4) 
    
  6. 盈利?

玩得開心:)使用的設備驅動程序模型,而不是

+0

@llya感謝您的答覆..我會盡力實施您的建議。雖然在第6點你是什麼意思的利潤?..謝謝 – abhi

+1

@abhi:請注意,'system_call'在'.text'段和RO。您需要找到一種方法來寫入只讀內核的內存。另外請注意,對於SMP系統,寫入操作必須是原子操作。 「利潤?」意味着從第6步開始你將獲得利潤:) –