若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
此範例是修改LDD3第三章的scull (Simple Character Utility for Loading Localities),我所使用的Linux Kernel版本為3.19.0,程式碼在此。
此範例是修改LDD3第三章的scull (Simple Character Utility for Loading Localities),我所使用的Linux Kernel版本為3.19.0,程式碼在此。
scull設計藍圖
與硬體無關,從kernel取記憶體來模擬成字元裝置來使用。
如上圖所示,scull分成幾種裝置:
- scull0到scull3為記憶體區域,提供資料共享(shared)與持續性(persistence)功能。
- scullpipe0到scullpipe3為FIFO裝置,含有blocking與non-blocking IO功能。
- scullsingle提供同一時間只能被一個行程存取。
- scullpriv確保每個virtual console的記憶體不共享。
- sculluid與scullwuid讓同一個使用者可啟用裝置多次;當有人在使用時,sculluid會回傳裝置忙碌中,而scullwuid則會繼續等待(block)。
Major and Minor Numbers
此範例有提供script方便使用,例如要將scull module載入時,只要使用scull_load就行了,
sudo ./scull_load
sudo cp main.c /dev/scull0
cat /dev/scull0 | head -20 | tail -10
sudo ./scull_unload
沒有留言:
張貼留言