linux系統的基本思路就是:一切都是檔案,無論是裡面儲存的資料還是外接裝置都是檔案。
因此操作每乙個裝置都會有對應的檔案描述符號,我們可以像操作檔案一樣操作它們,但注意與操作檔案還是有區別的。
直接操作裝置的函式:
_return int open(_in char* path, _in int flag);
_return int write(_in int fd, _in char* inputbuffer, _in bufferlen);
_return int read(_in int fd, _inout char* out, _in bufferlen);
開啟裝置、向裝置中寫資料、從裝置中讀資料。
裝置的檔案描述符是由系統自動分配的:
系統匯流排識別到裝置--->獲取裝置資訊--->匹配對應的裝置驅動--->掛載裝置。
如果你裝置沒掛載上,軟體方面來講絕大多數是驅動問題。
一般來講write函式是非阻塞的,read函式是阻塞的。如果想將read變為非阻塞的,open開啟裝置時候要去新增o_ndelay(或者o_nonblock)。如果想將write變為阻塞,open開啟裝置時要加上o_sync(或者o_dsync)標誌。
另外還有乙個標誌是操作裝置時常用的就是o_nctty,這個標誌的意義就是讓不將終端裝置的檔案描述符當做終端裝置來操作。
向裝置寫資料:
in device = open("/dev/tty0", o_dsync|o_wronly|o_nctty);
write(device, "****", 4);
從裝置讀資料:
char buffer[1024]=""; //初始化全置為空
in device = open("/dev/tty0", o_ndelay|o_rdonly|o_nctty);
read(device, buffer, 1024);
這些是資料處理的操作(讀、寫),還有兩個常用到的用於獲取裝置資訊的函式fcntl和ioctl,這個在下一片裡面再講。
linux裝置號之操作
在linux裝置驅動中,裝置號設乙個很重要的概念和變數。不論是主裝置號,還是次裝置號,在裝置驅動中都佔據了很重要的地位。那麼他在kernel中是如何操作的?這個資料結構都是通過那些函式可以很容易的在我們寫linux裝置驅動模組時被我們所使用呢?在include linux type.h檔案中我們能看...
18 linux裝置號之操作
在linux裝置驅動中,裝置號設乙個很重要的概念和變數。不論是主裝置號,還是次裝置號,在裝置驅動中都佔據了很重要的地位。那麼他在kernel中是如何操作的?這個資料結構都是通過那些函式可以很容易的在我們寫linux裝置驅動模組時被我們所使用呢?在include linux type.h檔案中我們能看...
19 linux裝置號之操作
在linux裝置驅動中,裝置號設乙個很重要的概念和變數。不論是主裝置號,還是次裝置號,在裝置驅動中都佔據了很重要的地位。那麼他在kernel中是如何操作的?這個資料結構都是通過那些函式可以很容易的在我們寫linux裝置驅動模組時被我們所使用呢?在include linux type.h檔案中我們能看...