Linux用戶和內核空間之間的通信實現

該設備自己定義了一些ioctl命令字範圍在SIOCDEVPRIVATE到SIOCDEVPRIVATE + 15之間),調用函數dev_ioctl實現對該設備指定的ioctl命令的操作。

■ dev_ioctl()

功能:用來處理所有設備接口的ioctl請求,只是一個包裝器, 實際的動作將由dev_ifsioc()來實現。dev_ioctl做的只是檢查這個調用是否具有了正當的權限。

■ dev_ifsioc()

功能:真正處理所有設備接口的ioctl請求。

具體操作說明:函數首先要做的一些事情包括得到與ifr.ifr_name相匹配的設備的結構,但這是在實現特定的接口命令之後。這些特定的接口命令被放置到一個巨大的switch語句之中。其中SIOCDEVPRIVATE命令和其他的在0x89F0到0x89FF之間的代碼將出現在switch語句中的一個分支——default語句中,代碼最後還增加了對無線網絡的支持。內核執行時會檢查表示設備的結構變量中,是否已經定義了一個與設備相關的ioctl句柄(handler)。這裏的句柄是一個函數指針,它在表示設備的結構變量中do_ioctl部分。如果已經設置了這個句柄,那麼內核將會執行它。如ipv6隧道設備體,在初始化時,就作了說明:dev->do_ioctl = ip6ip6_tnl_ioctl,其中函數ip6ip6_tnl_ioctl就是該設備對應的ioctl句柄,由於隧道設備是自己定義的ioctl命令字,因而執行應在default語句中,進而調用到自己定義的ioctl處理函數ip6ip6_tnl_ioctl。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章