linux設備的分類
A. linux驅動與設備節點簡介 & Android內核與Linux內核的區別
驅動是內核的一部分,作為直接訪問物理硬體的一個軟體層,用於應用程序與物理硬體設備通信。內核包含多種驅動,如WIFI、USB、Audio、藍牙、相機、顯示驅動。
(1)設備驅動程序三類:字元設備驅動程序、塊設備驅動程序、網路設備驅動程序;
(2)對應Linux三類設備:字元設備、塊設備、網路設備;
(3)常見字元設備:滑鼠、鍵盤、串口、控制台等;
(4)常見塊設備:各種硬碟、flash磁碟、RAM磁碟等;
(5)網路設備(網路介面):eth0、eth1,註:網路設備沒有設備節點,應用程序通過Socket訪問網路設備。由於網路設備面向報文,較難實現相關read、write等文件讀寫函數,所以驅動的實現也與字元設備和塊設備不同。
Linux使用對文件一樣的管理方式來管理設備,所有設備都以文件的形式存放在/dev目錄下,系統中的每個字元設備或者塊設備都必須為其創建一個設備文件,它包含了該設備的設備類型(塊設備或字元設備)、設備號(主設備號和次設備號)以及設備訪問控制屬性等。設備節點通過 mknod 命令創建,也可以由Udev用戶工具軟體在系統啟動後根據/sys目錄下每個設備的實際信息創建,使用後一種方式可以為每個設備動態分配設備號。
Linux中設備節點通過「mknod」命令創建,創建時需要指定主設備號和次設備號,即指定對應的驅動程序和對應的物理設備(訪問設備節點時就相當於通過其設備號訪問驅動程序進而間接訪問到物理設備)。主設備號用來區分不同種類的設備,而次設備號用來區分同一類型的多個設備。對於常用設備,Linux有約定俗成的編號,如硬碟的主設備號是3
理解:應用程序通過訪問設備節點讀取主設備號和次設備號,通過主設備號找對應的驅動,通過次設備號對應到具體物理設備。註:1個驅動對應一類設備,並用唯一主設備號標識。
Linux支持的各種設備的主設備號定義在include/linux/major.h文件中,已經在官方注冊的主設備號和次設備號在Documentation/devices.txt文件中。
Android系統最底層是Linux,並且在中間加上了一個Dalvik / ART的Java虛擬機,從表面層看是Android運行庫。每個Android應用都運行在自己的進程上,享有Dalvik / ART虛擬機為它分配的專有實例,並支持多個虛擬機在同一設備上高效運行,虛擬機執行的是專有格式的可執行文件(.dex) - 該格式經過優化,以將內存好用降到最低。
Android內核和Linux內核的差別主要體現在如下11個方面:
B. 簡述LINUX驅動中字元設備和塊設備的區別
在Linux驅動中,字元設備和塊設備是兩種不同的設備類型,它們則虛的區別主要在於數據傳輸的方式和設備訪問的方式。
字元設備
塊設備
字元設備是一種按字元為單位進行數據傳輸的設備,例如串口、鍵盤、滑鼠等。它們通常以流的形式傳輸數據,每次讀寫操作都只能讀寫一個字元。字元設備的訪問方式是困磨隨機訪問,即可以在任何位置讀孫尺燃寫數據。在Linux中,字元設備通常使用文件系統的方式進行訪問,即將字元設備映射為文件,然後通過文件操作函數進行訪問。
塊設備是一種按塊為單位進行數據傳輸的設備,例如硬碟、U盤等。它們通常以塊的形式傳輸數據,每次讀寫操作可以讀寫多個塊。塊設備的訪問方式是順序訪問,即必須按照塊的順序進行讀寫操作。在Linux中,塊設備通常使用塊設備驅動程序進行訪問,驅動程序將塊設備映射為塊設備文件,然後通過塊設備操作函數進行訪問。
總的來說,字元設備和塊設備的主要區別在於數據傳輸的方式和設備訪問的方式。字元設備以字元為單位進行數據傳輸,支持隨機訪問;塊設備以塊為單位進行數據傳輸,支持順序訪問。在Linux驅動中,字元設備和塊設備通常使用不同的驅動程序進行訪問。