開啟字元設備而不建立設備節點

開啟字元設備而不建立設備節點

我遇到一個問題,第三方應用程式打開了不應該打開的設備節點。

我編寫了一個 SPI 從設備驅動程序,用於對訊息進行一些處理。當驅動程式在“初始化模式”下載入時,它僅回復特定訊息。要重新初始化通信,我必須卸載並重新載入驅動程式。問題是系統有一個以 root 身份運行的第三方應用程序,它打開所有字元設備。使這一切順利進行的唯一方法是停止應用程式並卸載,這會為整個專案帶來巨大的問題。

是否可以在沒有實際設備節點的情況下開啟與字元設備的連接?現在我使用 fopen('/dev/spi') 一切正常,直到我需要重新載入並出現上述問題。是否可以進行任何類型的系統調用,從而在沒有實際 /dev/spi 檔案的情況下產生特定主/次節點號的檔案描述符?

答案1

如果有問題的應用程式僅打開/dev樹中的設備節點那你可以將你的設備節點放在其他地方,如果它適用於你自己的程式。

設備節點所在的檔案系統必須設定掛載選項,dev以便對設備節點檔案進行特殊處理。

(免責聲明:我沒有測試過這個,但我以前做過類似的事情...)

tmpfs例如,一個範例是安裝一個小型檔案系統,/my-dev/並在那裡建立設備節點。

mkdir -p /my-dev

mount -t tmpfs -o dev,size=<size> tmpfs /my-dev

mknod /my-dev/spi <type> <maj> <min>

在哪裡<size>是 tmpfs 的大小,<type>是設備節點類型,<maj> <min>是主要:次要設備編號;分別參見mount和的手冊頁mknod

....然後fopen("/my-dev/spi")在您的程式中使用。

(當然,請確保udev或類似的內容不是為設備建立一個節點。

相關內容