Kernel

從使用者空間模擬字元設備

  • October 24, 2018

我們目前正致力於為不同感測器建構數據視覺化系統。

為了使 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問題答案的評論

要考慮的更簡單的替代方案是偽 tty ptytty0tty,它是將兩個串列埠連接在一起的核心模組。

引用自:https://unix.stackexchange.com/questions/477117