Kernel
從使用者空間模擬字元設備
我們目前正致力於為不同感測器建構數據視覺化系統。
為了使 Linux 應用程序的開發成為可能,我們需要模擬不同字元設備的行為,因為設備驅動程序和硬體設計尚未完成。
那麼有沒有辦法接收系統呼叫(open(),read(),write()……)在一個特定文件中,例如,也從使用者空間執行的C程序?
read() (Userspace Application/Database) <========= (~/mydev) <===== (dummy_driver)
您可以在使用者空間中使用cuse *Character Device,*它是fuse庫的一部分,在大多數係統中作為包提供。一個範例“驅動程序”是cuse.c。當您編譯並執行此範例時:
sudo ./cuse -f --name=mydevice
它創建
/dev/mydevice
並接收所有對它的打開、關閉、讀取、寫入和 ioctl 呼叫。要“解除安裝”設備(在保險絲術語中),只需終止該程序。該範例可能未分發,因此要編譯,下載(或 git clone)zip,切換到
libfuse/example
目錄,然後編譯如 C 文件所示:gcc -Wall cuse.c $(pkg-config fuse --cflags --libs) -o cuse -I.
您可能需要安裝一個
fuse-devel
包或類似的東西才能工作。如果您需要實現更多 ioctl,請查看此連結作為對此stackexchange問題答案的評論。