2015-09-28 69 views
0

我有要求在用戶空間編寫一個Linux設備驅動程序。如何在Linux的用戶空間庫中捕獲系統調用?

如何編寫一個庫,當鏈接到應用程序時,該庫可以處理對特定設備的系統調用。

應用程序應該能夠將諸如/dev/mydev0設備上使用open()read()write()ioctl(),但這些調用應該在用戶空間庫,而不是一個內核模塊終止。

請告知,如果這是可能的,我該如何做到這一點。

+1

您可以捕獲使用通常的'LD_PRELOAD'技巧等系統調用的C-包裝;你不能直接捕獲'int 80' /'sysenter'指令(也就是說,如果有人調用了「手動」系統調用,而不通過libc包裝器)。 –

+0

嗨,請您詳細說明這些LD_PRELOAD「技巧」是如何工作的?這可能是我可以使用的東西。 –

+0

http://superuser.com/a/370054/25859 –

回答

1

Linux是一個單片內核這意味着一般來說,你問的是不可能的;您不能在用戶模式下編寫任意驅動程序。

可能(如您的標題暗示),使用上ptrace(2)陷阱系統調用,基本上他們重定向到函數庫中。然而,這不是一個簡單,直接的解決方案。

參見:

FUSE(文件系統在用戶空間)可能是你在找什麼。這是一種允許文件系統驅動程序專門通過用戶空間進程實現的機制。例如,這是如何執行sshfs

資源: