Linux驅(qū)動(dòng)基礎(chǔ)-Linux中設(shè)備分類

原創(chuàng) 2020-03-20 17:29:00 Linux驅(qū)動(dòng)

Linux系統(tǒng)上每一個(gè)設(shè)備的運(yùn)行都有其固定的規(guī)則,而且設(shè)備種類、型號(hào)眾多,將每一個(gè)設(shè)備的固定規(guī)則寫入內(nèi)核是不現(xiàn)實(shí)的,也是沒(méi)有意義的。所以每一個(gè)設(shè)備都會(huì)有相對(duì)應(yīng)的驅(qū)動(dòng),小到一個(gè)led燈,大到一個(gè)網(wǎng)卡,都要有相關(guān)的驅(qū)動(dòng)。驅(qū)動(dòng)程序可以看做是應(yīng)用程序和實(shí)際設(shè)備之間的一個(gè)軟件層。應(yīng)用程序控制一個(gè)設(shè)備,首先要向驅(qū)動(dòng)發(fā)出信號(hào),驅(qū)動(dòng)接收到信號(hào)再控制設(shè)備完成相對(duì)應(yīng)的動(dòng)作。應(yīng)用程序想要獲取設(shè)備采集的數(shù)據(jù)同樣也是要經(jīng)過(guò)驅(qū)動(dòng)來(lái)完成。

Linux中設(shè)備分類

Linux系統(tǒng)將設(shè)備分成三個(gè)基本類型,每個(gè)模塊通常實(shí)現(xiàn)為其中某一類。

1、字符設(shè)備

字符設(shè)備是一個(gè)能夠像字節(jié)流一樣被訪問(wèn)的設(shè)備,由字符設(shè)備驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)這種特性。字符設(shè)備驅(qū)動(dòng)程序通常至少要實(shí)現(xiàn)打開(kāi)、關(guān)閉、讀取和寫入系統(tǒng)調(diào)用。字符設(shè)備是一個(gè)順序訪問(wèn)的,只有在設(shè)備響應(yīng)后才能讀到相應(yīng)信息。不能隨機(jī)訪問(wèn),且每個(gè)字符設(shè)備都有一個(gè)設(shè)備號(hào),設(shè)備號(hào)由主設(shè)備號(hào)和次設(shè)備號(hào)組成。常見(jiàn)的字符設(shè)備如串口、IIC等。字符設(shè)備的對(duì)應(yīng)的文件都在/dev目錄下,每一個(gè)文件對(duì)應(yīng)一個(gè)硬件。在linux系統(tǒng)中/dev目錄下使用ls -l命令查看詳細(xì)信息,第一個(gè)字母“c”為字符設(shè)備文件的標(biāo)識(shí)。

 

2、塊設(shè)備

和字符設(shè)備類似,塊設(shè)備也是通過(guò)/dev目錄下的文件系統(tǒng)節(jié)點(diǎn)來(lái)訪問(wèn)。塊設(shè)備上能夠容納文件系統(tǒng)。常見(jiàn)的塊設(shè)備如磁盤、emmc  flash、nand  flash、 SD卡等。每個(gè)塊設(shè)備同樣有r--+’/h渦陽(yáng)【5片【一個(gè)設(shè)備號(hào),設(shè)備號(hào)由主設(shè)備號(hào)和次設(shè)備號(hào)組成。在linux系統(tǒng)中/dev目錄下使用ls -l命令查看詳細(xì)信息,第一個(gè)字母“b”為塊設(shè)備文件的標(biāo)識(shí)。/dev下每個(gè)塊設(shè)備文件對(duì)應(yīng)一個(gè)磁盤的分區(qū)。

 

3、網(wǎng)絡(luò)設(shè)備

任何網(wǎng)絡(luò)相關(guān)的事務(wù)都要經(jīng)過(guò)一個(gè)網(wǎng)絡(luò)接口,即一個(gè)能夠與其他主機(jī)交換數(shù)據(jù)的設(shè)備。通常,接口是個(gè)硬件設(shè)備,但也可能是純軟件設(shè)備,比如在ifconfig查看網(wǎng)口信息的時(shí)候有一個(gè)lo,就是網(wǎng)絡(luò)回環(huán)(loopback)接口。訪問(wèn)網(wǎng)絡(luò)接口的方法是給它們分配一個(gè)唯一的名字,比如eth0、eth1、lo等。但這個(gè)名字在文件系統(tǒng)中不存在相應(yīng)的節(jié)點(diǎn)。網(wǎng)絡(luò)接口沒(méi)有像字符設(shè)備和塊設(shè)備一樣的設(shè)備號(hào),只有一個(gè)唯一的名字,如eth0、eth1等,而這個(gè)名字也不需要與設(shè)備文件節(jié)點(diǎn)對(duì)應(yīng)。內(nèi)核使用一套與數(shù)據(jù)包傳輸相關(guān)的函數(shù)來(lái)與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序通信,它們不同于字符設(shè)備和塊設(shè)備的read()和write()方法。


 

各種字符設(shè)備和塊設(shè)備都體現(xiàn)了linux“一切都是文件的”的設(shè)計(jì)思想,網(wǎng)絡(luò)設(shè)備是唯一沒(méi)有體現(xiàn)這一思想的設(shè)備。

設(shè)備節(jié)點(diǎn)、設(shè)備驅(qū)動(dòng)及設(shè)備的關(guān)聯(lián)

整個(gè)系統(tǒng)上掛載的設(shè)備很多,當(dāng)我們?cè)L問(wèn)一個(gè)設(shè)備節(jié)點(diǎn)時(shí),系統(tǒng)是如何知道使用哪個(gè)設(shè)備驅(qū)動(dòng)及訪問(wèn)哪個(gè)設(shè)備的呢?這個(gè)是通過(guò)設(shè)備號(hào)來(lái)實(shí)現(xiàn)的。創(chuàng)建一個(gè)設(shè)備節(jié)點(diǎn)時(shí)需要指定主設(shè)備號(hào)和次設(shè)備號(hào)。對(duì)于設(shè)備節(jié)點(diǎn)來(lái)說(shuō),名字不是重要的,設(shè)備號(hào)才是最重要的,它實(shí)際指定了對(duì)應(yīng)的驅(qū)動(dòng)程序和對(duì)應(yīng)的設(shè)備。主設(shè)備號(hào)用來(lái)區(qū)分不同種類的設(shè)備,而次設(shè)備號(hào)用來(lái)區(qū)分同一類型的多個(gè)設(shè)備。對(duì)于常用設(shè)備,Linux有約定俗成的編號(hào),如硬盤的主設(shè)備號(hào)是3。在/dev目錄下使用命令ls -l加名字可查看相應(yīng)的主設(shè)備號(hào)和次設(shè)備號(hào)。

 

主設(shè)備號(hào)

驅(qū)動(dòng)程序在初始化時(shí),會(huì)注冊(cè)它的驅(qū)動(dòng)及對(duì)應(yīng)主設(shè)備號(hào)到系統(tǒng)中,這樣當(dāng)應(yīng)用程序訪問(wèn)設(shè)備節(jié)點(diǎn)時(shí),系統(tǒng)就知道它所訪問(wèn)的驅(qū)動(dòng)程序了。可以通過(guò)/proc/devices文件來(lái)驅(qū)動(dòng)系統(tǒng)設(shè)備的主設(shè)備號(hào)。

 

次設(shè)備號(hào)

驅(qū)動(dòng)程序運(yùn)行時(shí),每發(fā)現(xiàn)一個(gè)它能驅(qū)動(dòng)的設(shè)備,就會(huì)創(chuàng)建一個(gè)設(shè)備對(duì)象,并為其分配一個(gè)次設(shè)備號(hào)以區(qū)分不同的設(shè)備。這樣當(dāng)應(yīng)用程序訪問(wèn)設(shè)備節(jié)點(diǎn)時(shí)驅(qū)動(dòng)程序就可以根據(jù)次設(shè)備號(hào)知道它所訪問(wèn)的設(shè)備了。


相關(guān)產(chǎn)品 >

  • FETA40i-C核心板

    Allwinner A40i是全志開(kāi)發(fā)的一款工業(yè)級(jí)處理器,A40i作為全國(guó)產(chǎn)工業(yè)級(jí)芯片中的佼佼者,采用更低功耗的4核ARM Cortex-A7架構(gòu),工作溫度-40-85℃,是一款高性能低功耗超高性能CPU主芯片。飛凌嵌入式深度研究全志A40i芯片參數(shù)、原理圖、datasheet規(guī)格書推出了以FETA40i核心板為主的一系列全國(guó)產(chǎn)工業(yè)級(jí)嵌入式計(jì)算機(jī)板卡,并提供了用于評(píng)估的A40i工控板、 A40i開(kāi)發(fā)板。 了解詳情
    FETA40i-C核心板
  • FETT507-C核心板

    推薦T507,全志T507核心板采用工業(yè)級(jí)處理器設(shè)計(jì)開(kāi)發(fā),提供T507規(guī)格書,T507各類設(shè)計(jì)資料。FETT507-C核心板集成全志T507四核工業(yè)級(jí)處理器設(shè)計(jì)開(kāi)發(fā),Cortex-A53架構(gòu),主頻1.5GHz,集成G31 GPU,內(nèi)存2GB DDR3L,存儲(chǔ)8GB eMMC。整板工業(yè)級(jí)運(yùn)行溫寬,支持絕大部分當(dāng)前流行的視頻及圖片格式解碼,具有穩(wěn)定可靠的工業(yè)級(jí)產(chǎn)品性能、低功耗以及豐富的用戶接口等優(yōu)勢(shì),搭載Linux、Android、Ubuntu*操作系統(tǒng),適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域 了解詳情
    FETT507-C核心板

推薦閱讀 換一批 換一批