日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入探究:Linux字符驅(qū)動的工作原理(linux字符驅(qū)動)

在計算機科學(xué)領(lǐng)域中,操作系統(tǒng)(OS)是一種基本軟件,為各種程序提供資源和服務(wù),如內(nèi)存,進程管理和文件系統(tǒng)等。Linux是一種Unix操作系統(tǒng),以其開放源代碼,高度可定制性和普及性而聞名于世。 對于Linux驅(qū)動程序而言,一個同樣重要的組成部分——字符驅(qū)動程序,是一個相當重要的技術(shù),它包含在Linux內(nèi)核中,并與硬件通信。

什么是Linux字符驅(qū)動程序?

字符設(shè)備是那些以字節(jié)流的形式傳輸數(shù)據(jù)的設(shè)備。相對于塊設(shè)備(例如硬盤和USB存儲設(shè)備)和網(wǎng)絡(luò)設(shè)備(如Wi-Fi和以太網(wǎng)),字符設(shè)備是跨越多種設(shè)備類型及其驅(qū)動程序并作為文件流傳輸數(shù)據(jù)的設(shè)備。典型的字符設(shè)備對象包括串口,終端,打印機,聲卡和USB輸入設(shè)備等。

Linux字符設(shè)備驅(qū)動是一種硬件抽象層,在應(yīng)用程序和硬件設(shè)備之間提供通信接口。 Linux內(nèi)核提供了一個框架以允許創(chuàng)建字符設(shè)備驅(qū)動程序,而這些驅(qū)動程序可以與用戶空間的應(yīng)用程序通信。

Linux字符驅(qū)動函數(shù)

Linux字符設(shè)備驅(qū)動程序依靠操作系統(tǒng)提供的常規(guī)函數(shù)進行操作。 在Linux內(nèi)核中,與字符設(shè)備驅(qū)動器相關(guān)聯(lián)的常規(guī)函數(shù)包括open,read,write,ioctl和release等。下面將對這些函數(shù)進行更詳細的說明:

1. open()

open函數(shù)被用來初始化字符設(shè)備驅(qū)動程序和硬件,以便在應(yīng)用程序和設(shè)備之間建立數(shù)據(jù)傳輸通道。 open()函數(shù)接受兩個參數(shù):filename和flags。 filename是字符串類型的文件名,引用指定的設(shè)備節(jié)點。 flags參數(shù)包含一組位標識,它們可以影響打開設(shè)備所執(zhí)行的操作。

2. read()

read函數(shù)用于從用戶緩沖區(qū)讀取數(shù)據(jù)并將其發(fā)送到設(shè)備。 read()函數(shù)的基本結(jié)構(gòu)是:

ssize_t read(struct file *filp, char *buf, size_t count, loff_t *f_pos);

3. write()

write函數(shù)將應(yīng)用程序緩沖區(qū)中的數(shù)據(jù)寫入設(shè)備。 它的一般格式為:

ssize_t write(struct file *filp, const char *buf, size_t count, loff_t *f_pos);

4. ioctl()

ioctl函數(shù)也被稱為設(shè)備IO控制器,用于與設(shè)備交互數(shù)據(jù),并且只能由特定驅(qū)動程序內(nèi)部調(diào)用。 ioctl()函數(shù)的基本格式是:

int ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);

5. release()

最后一個函數(shù)釋放設(shè)備并與其關(guān)聯(lián)的驅(qū)動程序。 release()函數(shù)的基本構(gòu)造如下所示:

int release(struct inode *inode, struct file *filp);

Linux字符驅(qū)動文件

在Linux內(nèi)核中創(chuàng)建字符設(shè)備驅(qū)動程序間需要使用兩個主要文件:驅(qū)動程序文件和設(shè)備節(jié)點文件。 設(shè)備節(jié)點文件是用戶程序和驅(qū)動程序交互的橋梁。

可以在/dev目錄下創(chuàng)建設(shè)備節(jié)點文件。然后,可以使用mknod命令將字符設(shè)備節(jié)點文件與驅(qū)動程序關(guān)聯(lián)。 設(shè)備節(jié)點使用mknod命令創(chuàng)建,并通過major和minor numbers控制。 驅(qū)動程序可以通過這些數(shù)字將設(shè)備節(jié)點識別為其驅(qū)動程序的特定實例。 設(shè)備節(jié)點文件的內(nèi)容表示了設(shè)備節(jié)點的類型及其實例的major和minor numbers。

例如,以下mknod命令將創(chuàng)建名為my_device的設(shè)備節(jié)點:

sudo mknod /dev/my_device c

由于Linux分配給字符驅(qū)動的major number是唯一的,這樣可以確保命名不會與其他設(shè)備節(jié)點文件命名沖突。 minor number由驅(qū)動程序指定,用于識別設(shè)備節(jié)點的特定實例。

字符驅(qū)動程序注冊

當內(nèi)核啟動時,驅(qū)動程序應(yīng)使用一些信息來注冊內(nèi)核中的內(nèi)容。 驅(qū)動程序使用register_chrdev()函數(shù)注冊驅(qū)動程序,并通過調(diào)用該函數(shù)來提供驅(qū)動程序的所有信息。

在主函數(shù)中,通過調(diào)用函數(shù)register_chrdev()傳遞應(yīng)使用的major number,第二個參數(shù)是與此設(shè)備的主要驅(qū)動程序關(guān)聯(lián)的驅(qū)動程序名稱。 驅(qū)動程序的名稱可以是任何字符串。 在設(shè)備注冊完成后,可以使用字符設(shè)備名稱打開設(shè)備節(jié)點。

相關(guān)問題拓展閱讀:

  • LINUX 終端設(shè)備驅(qū)動?

LINUX 終端設(shè)備驅(qū)動?

在Linux系統(tǒng)中,終端是一種字符型設(shè)備,它有多種類型,通常使用tty (Teletype)來簡稱各種類型的終端設(shè)備。對于嵌入式系統(tǒng)而言,最普遍采用的是UART (Universal Asynchronous Receiver/Tranitter)串行端口,日常生活中簡稱串口。

Linux內(nèi)核中tty的層次結(jié)構(gòu)它包含tty核心tty_10.c、tty或路規(guī)在n_tty.C(頭現(xiàn)N_11Y線路規(guī)程)和tty驅(qū)動實例xxx_tty.c,激慧tty線路規(guī)程的工作是以特殊的方式格式化從一個用戶或者硬件收到的數(shù)據(jù),這種格式化常常采用一個協(xié)議轉(zhuǎn)換的形式tty _io.c本身是一個標準的字符設(shè)備驅(qū)動,它對上有字符改備的職貢,買現(xiàn)tle_operatIonS雙貝圖效。但是tty核心層對下又定義了tty_driver的架構(gòu),這樣tty設(shè)備驅(qū)動的主體工作就變成了琪允tty_driVeT依構(gòu)體中的成員,實現(xiàn)其中的tty_operations的成員函數(shù),而不再是去實現(xiàn)file_operations這一級的工作。tty設(shè)枯衡備發(fā)送數(shù)據(jù)的流程為:tty核心從一個用戶獲取將要發(fā)送給一個tty設(shè)備的數(shù)據(jù),tty核心將數(shù)據(jù)傳遞給tty線路規(guī)程驅(qū)動,接著數(shù)據(jù)被傳遞到tty驅(qū)動,tty驅(qū)動將數(shù)據(jù)轉(zhuǎn)換為可以發(fā)送給硬件的格式。接收數(shù)據(jù)的流程為:從tty硬件接收到的數(shù)據(jù)向上交給tty驅(qū)動,接著進入tty線路規(guī)程驅(qū)動,再進入tty核心,在這里它被一個用戶獲取。盡管一個特定的底層UART設(shè)備驅(qū)動完全可以遵循上述tty_driver的方法來設(shè)計,即定義tty_driver并實現(xiàn)tty_operations中的成員函數(shù),但是鑒于串口之間的共性,Linux考慮在文件drivers’ttyliserial’serial_core.c中實現(xiàn)了UART設(shè)備的通用tty驅(qū)動層(我們可以稱其為串口核心層)。這樣,UART驅(qū)動的明敗答主要任務(wù)就進一步演變成了實現(xiàn)serial-core.c中定義的一組uart_xxx接口而不是tty_xxx接口。因此,按照面向?qū)ο蟮乃枷耄梢哉J為tty_driver是字符設(shè)備的泛化、serial-core是tty_driver的泛化,而具體的串口驅(qū)動又是serial-core的泛化。

linux 字符驅(qū)動的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux 字符驅(qū)動,深入探究:Linux字符驅(qū)動的工作原理,LINUX 終端設(shè)備驅(qū)動?的信息別忘了在本站進行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


本文標題:深入探究:Linux字符驅(qū)動的工作原理(linux字符驅(qū)動)
轉(zhuǎn)載源于:http://www.5511xx.com/article/cojjdss.html