天天看點

linux開發筆記

  1. linux裝置控制接口

    裝置驅動程式的一個基本功能就是管理和控制裝置,同時為使用者應用程式提供管理和控制裝置的接口。驅動支援裝置控制接口,在Linux中這個接口是通過ioctl函數來實作的。

     ioctl是裝置驅動程式中對裝置的I/O通道進行管理的函數。所謂對I/O通道進行管理,就是對裝置的一些特性進行控制,例如序列槽的傳輸波特率、馬達的轉速等等。它的調用個數如下:

    int ioctl(int fd, ind cmd, …);

        其中fd是使用者程式打開裝置時使用open函數傳回的檔案标示符,cmd是使用者程式對裝置的控制指令,至于後面的省略号,那是一些補充參數,一般最多一個,這個參數的有無和cmd的意義相關。

        ioctl函數是檔案結構中的一個屬性分量,就是說如果你的驅動程式提供了對ioctl的支援,使用者就可以在使用者程式中使用ioctl函數來控制裝置的I/O通道。

     ioctl的必要性

        如果不用ioctl的話,也可以實作對裝置I/O通道的控制,但那是很亂的。例如,我們可以在驅動程式中實作write的時候檢查一下是否有特殊約定的資料流通過,如果有的話,那麼後面就跟着控制指令(一般在socket程式設計中常常這樣做)。但是如果這樣做的話,會導緻代碼分工不明,程式結構混亂,程式員自己也會頭昏眼花的。是以,我們就使用ioctl來實作控制的功能。要記住,使用者程式所作的隻是通過指令碼(cmd)告訴驅動程式它想做什麼,至于怎麼解釋這些指令和怎麼實作這些指令,這都是驅動程式要做的事情。

繼續閱讀