91在线一级黄片|91视频在线观看18|成人夜间呦呦网站|91资源欧美日韩超碰|久久最新免费精品视频一区二区三区|国产探花视频在线观看|黄片真人免费三级片毛片|国产人无码视频在线|精品成人影视无码三区|久久视频爱久久免费精品

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

新聞中心

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

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

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

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

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

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

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

1. open()

open函數(shù)被用來(lái)初始化字符設(shè)備驅(qū)動(dòng)程序和硬件,以便在應(yīng)用程序和設(shè)備之間建立數(shù)據(jù)傳輸通道。 open()函數(shù)接受兩個(gè)參數(shù):filename和flags。 filename是字符串類(lèi)型的文件名,引用指定的設(shè)備節(jié)點(diǎn)。 flags參數(shù)包含一組位標(biāo)識(shí),它們可以影響打開(kāi)設(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ù)寫(xiě)入設(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ū)動(dòng)程序內(nèi)部調(diào)用。 ioctl()函數(shù)的基本格式是:

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

5. release()

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

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

Linux字符驅(qū)動(dòng)文件

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

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

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

sudo mknod /dev/my_device c

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

字符驅(qū)動(dòng)程序注冊(cè)

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

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

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

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

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

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

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

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

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


分享題目:深入探究:Linux字符驅(qū)動(dòng)的工作原理(linux字符驅(qū)動(dòng))
當(dāng)前地址:http://m.jiaoqi3.com/article/cojjdss.html