色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux PCI驅(qū)動(dòng)到底都干了些什么?(一)

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-04-30 15:41 ? 次閱讀

首先要明確兩個(gè)概念:Linux內(nèi)核 PCI設(shè)備驅(qū)動(dòng)和設(shè)備本身驅(qū)動(dòng)兩部分。工作中所謂的編寫設(shè)備驅(qū)動(dòng),其實(shí)就是編寫設(shè)備本身驅(qū)動(dòng)。因?yàn)長(zhǎng)inux 內(nèi)核的PCI驅(qū)動(dòng)是內(nèi)核自帶的。

當(dāng)然,并不是說(shuō)內(nèi)核幫咱們寫好了Linux PCI驅(qū)動(dòng)我們什么就不用做了,至少你要明白內(nèi)核大致都干了些什么,這樣你才能明白你該干什么,如何完成設(shè)備本身的驅(qū)動(dòng)。我們下面就來(lái)研究下Linux PCI驅(qū)動(dòng)到底都干了些什么。

Linux PCI 初始化代碼邏輯上分為三個(gè)部分:

(1)內(nèi)核的PCI設(shè)備驅(qū)動(dòng)程序
這個(gè)偽設(shè)備驅(qū)動(dòng)程序從總線0開(kāi)始查詢PCI系統(tǒng)并且定位系統(tǒng)中所有的PCI設(shè)備和PCI橋。它建立一個(gè)可以用來(lái)描述這個(gè)PCI系統(tǒng)拓樸層次的數(shù)據(jù)結(jié)構(gòu)鏈表。并且對(duì)所有的發(fā)現(xiàn)的PCI橋編號(hào)。
(2)PCI BIOS
這個(gè)軟件層提供在bib-pci-bios歸約中描述的服務(wù)。雖然Alpha AXP不提供BIOS服務(wù),在其Linux版本中包含了相應(yīng)的功能。
(3)PCI Fixup
與特定系統(tǒng)相關(guān)的PCI初始化修補(bǔ)代碼

而這里主要就是探討Linux內(nèi)核 PCI設(shè)備驅(qū)動(dòng),會(huì)在最后列出一段包含設(shè)備本身驅(qū)動(dòng)的示例代碼,僅供參考。

一、概述及簡(jiǎn)介

PCI(Periheral Component Interconnect)有三種地址空間:PCI I/O空間、PCI內(nèi)存地址空間和PCI配置空間。其中,PCI I/O空間和PCI內(nèi)存地址空間由設(shè)備驅(qū)動(dòng)程序(即上面提到的設(shè)備本身驅(qū)動(dòng))使用,而PCI配置空間由Linux PCI初始化代碼使用,這些代碼用于配置PCI設(shè)備,比如中斷號(hào)以及I/O或內(nèi)存基地址。所以這里的PCI設(shè)備驅(qū)動(dòng)就是要大致描述對(duì)于PCI設(shè)備驅(qū)動(dòng),Linux內(nèi)核都幫我們做了什么(主),接著就是我們應(yīng)該完成什么(次)。

(1)Linux內(nèi)核做了什么

簡(jiǎn)單的說(shuō),Linux內(nèi)核主要就做了對(duì)PCI設(shè)備的枚舉和配置;這些工作都是在Linux內(nèi)核初始化時(shí)完成的。

枚舉:對(duì)于PCI總線,有一個(gè)叫做PCI橋的設(shè)備用來(lái)將父總線與子總線連接。作為一種特殊的PCI設(shè)備,PCI橋主要包括以下三種:

Host/PCI橋: 用于連接CPU與PCI根總線,第1個(gè)根總線的編號(hào)為0。在PC中,內(nèi)存控制器也通常被集成到Host/PCI橋設(shè)備芯片中,因此Host/PCI橋通常也被稱為“北橋芯片組(North Bridge Chipset)”。

PCI/ISA橋: 用于連接舊的ISA總線。通常,PCI中類似i8359A中斷控制器這樣的設(shè)備也會(huì)被集成到PCI/ISA橋設(shè)備中。因此,PCI/ISA橋通常也被稱為“南橋芯片組(South Bridge Chipset)”

PCI-to-PCI橋(以下稱為PCI-PCI橋): 用于連接PCI主總線(Primary Bus)和次總線(Secondary Bus)。PCI-PCI橋所處的PCI總線稱為主總線,即次總線的父總線;PCI-PCI橋所連接的PCI總線稱為次總線,即主總線的子總線。

圖1 PCI系統(tǒng)示意圖

下圖摘自PCI Local Bus Specification Revision 2.1,可以看到PCI-PCI橋的Class Code(見(jiàn)圖3)就是0x060400。

圖2 Base class 06h

CPU通過(guò)Host/PCI橋與一條PCI總線相連,處在這種配置上的PCI總線稱為根總線。PC機(jī)中通常只有一個(gè)Host/PCI橋,在一條PCI總線的基礎(chǔ)上,可以再通過(guò)PCI橋連接到其他次一層的總線,例如通過(guò)PCI-PCI橋可以連接到另一條PCI總線,通過(guò)PCI-ISA橋可以連接到一條ISA總線。

事實(shí)上,現(xiàn)代PC機(jī)中的ISA總線正是通過(guò)PCI-ISA橋連接在PCI總線上的。這樣,通過(guò)使用PCI-PCI橋,就構(gòu)筑起了一個(gè)層次的、樹(shù)狀的PCI系統(tǒng)結(jié)構(gòu)。對(duì)于上層的總線而言,連接在這條總線上的PCI橋也是一個(gè)設(shè)備。但是這是一種特殊的設(shè)備,它既是上層總線上的一個(gè)設(shè)備,實(shí)際上又是上層總線的延伸。

所謂枚舉,就是從Host/PCI橋開(kāi)始進(jìn)行探測(cè)和掃描,逐個(gè)“枚舉”連接在第一條PCI總線上的所有設(shè)備并記錄在案。如果其中的某個(gè)設(shè)備是PCI-PCI橋,則又進(jìn)一步再探測(cè)和掃描連在這個(gè)橋上的次級(jí)PCI總線。就這樣遞歸下去,直到窮盡系統(tǒng)中的所有PCI設(shè)備。

其結(jié)果,是在內(nèi)存中建立起一棵代表著這些PCI總線和設(shè)備的PCI樹(shù)。每個(gè)PCI設(shè)備(包括PCI橋設(shè)備)都由一個(gè)pci_dev結(jié)構(gòu)體來(lái)表示,而每條PCI總線則由pci_bus結(jié)構(gòu)來(lái)表示。你有通過(guò)PCI橋建立起的硬件設(shè)備樹(shù),我有內(nèi)存中通過(guò)數(shù)據(jù)結(jié)構(gòu)構(gòu)建的軟件樹(shù),很和諧。

配置:PCI設(shè)備中一般都帶有一些RAMROM 空間,通常的控制/狀態(tài)寄存器和數(shù)據(jù)寄存器也往往以RAM區(qū)間的形式出現(xiàn),而這些區(qū)間的地址在設(shè)備內(nèi)部一般都是從0開(kāi)始編址的,那么當(dāng)總線上掛接了多個(gè)設(shè)備時(shí),對(duì)這些空間的訪問(wèn)就會(huì)產(chǎn)生沖突。

所以,這些地址都要先映射到系統(tǒng)總線上,再進(jìn)一步映射到內(nèi)核的虛擬地址空間。而所謂的配置就是通過(guò)對(duì)PCI配置空間的寄存器進(jìn)行操作從而完成地址的映射(只完成內(nèi)部編址映射到總線地址的工作,而映射到內(nèi)核的虛擬地址空間是由設(shè)備本身的驅(qū)動(dòng)要做的工作)。

(2)Linux內(nèi)核怎么做的

這里首先要說(shuō)明的是,對(duì)于PCI的設(shè)備初始化(即上面提到的枚舉和配置工作),PC機(jī)的BIOS和Linux內(nèi)核都可以做。一般而言,只要是采用PCI總線的PC機(jī),其BIOS就必須提供對(duì)PCI總線操作的支持,因而稱為PCI BIOS。

而且最早Linux內(nèi)核也是通過(guò)這種BIOS調(diào)用的方式來(lái)獲取系統(tǒng)中的PCI設(shè)備信息的,但是不是所有的平臺(tái)都有BIOS(比如某些嵌入式系統(tǒng)),并且在實(shí)踐中也發(fā)現(xiàn)有些母板上的PCI BIOS存在這樣那樣的問(wèn)題,所以后來(lái)就改由Linux內(nèi)核自己動(dòng)手了,自己動(dòng)手豐衣足食呵呵。

不過(guò),Linux內(nèi)核還是很體貼的在make menuconfig的選項(xiàng)里為我們提供了自己選擇的權(quán)利,即PCI access mode,里面提供了四個(gè)選項(xiàng)分別是BIOS、MMconfig、Direct和Any。Direct方式就是拋開(kāi)BIOS而由內(nèi)核自己完成初始化工作的意思。

二、開(kāi)始我們的枚舉與配置之路

前面提到了PCI有三種地址空間,其中的PCI配置空間是給Linux內(nèi)核中的PCI初始化代碼用的,也就是我們這里的枚舉與配置時(shí)用到的。那么這個(gè)PCI配置空間里放的是什么東西呢,顯然應(yīng)該是寄存器,稱為配置寄存器組。當(dāng)PCI設(shè)備上電時(shí),硬件保持未激活狀態(tài)。即該設(shè)備只會(huì)對(duì)配置事務(wù)做出響應(yīng)。上電時(shí),設(shè)備上不會(huì)有內(nèi)存和I/O端口映射到計(jì)算機(jī)的地址空間;其他設(shè)備相關(guān)的功能,例如中斷報(bào)告,也被禁止。

PCI標(biāo)準(zhǔn)規(guī)定每個(gè)設(shè)備的配置寄存器組最多可以有256字節(jié)的連續(xù)空間,其中開(kāi)頭的64字節(jié)的用途和格式是標(biāo)準(zhǔn)的,稱為配置寄存器的頭部。系統(tǒng)中提供一些與硬件有關(guān)的機(jī)制,使得PCI配置代碼可以檢測(cè)在一個(gè)給定的PCI總線上所有可能的PCI配置寄存器頭部,從而知道哪個(gè)PCI插槽上目前有設(shè)備,哪個(gè)插槽上暫無(wú)設(shè)備。這是通過(guò)讀PCI配置寄存器頭部上的某個(gè)域完成的(一般是“Vendor ID" 域)。如果一個(gè)插槽上為空,上述操作會(huì)返回一些錯(cuò)誤返回值,如0xFFFFFFFF。

這種頭部(指64字節(jié)頭部)又有三種,其中“0型”(type 0)頭部用于一般的PCI設(shè)備,“1型”頭部用于各種PCI-PCI橋, “2型”頭部是用于PCI-CardBus橋的,CardBus是筆記本電腦中使用的總線,我們不關(guān)心。

而64字節(jié)頭部中的16個(gè)字節(jié)中又包含著有關(guān)頭部的類型、設(shè)備的種類、設(shè)備的一些性質(zhì)、由誰(shuí)制造等等信息。根據(jù)這16個(gè)字節(jié)中提供的信息,來(lái)確定應(yīng)該怎樣進(jìn)一步解釋和處理剩余頭部中的48個(gè)字節(jié)。對(duì)于這16個(gè)字節(jié)的地址,include/linux/pci.h中定義了這樣一些常數(shù):

#define PCI_VENDOR_ID 0x00 /* 16 bits */#define PCI_DEVICE_ID 0x02 /* 16 bits */ #define PCI_COMMAND 0x04 /* 16 bits */ #define PCI_STATUS 0x06 /* 16 bits */ #define PCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8 revision */ #define PCI_REVISION_ID 0x08 /* Revision ID */ #define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface */ #define PCI_CLASS_DEVICE 0x0a /* Device class */ #define PCI_CACHE_LINE_SIZE 0x0c /* 8 bits */ #define PCI_LATENCY_TIMER 0x0d /* 8 bits */ #define PCI_HEADER_TYPE 0x0e /* 8 bits */

對(duì)應(yīng)我們的圖3(見(jiàn)下)中的前16字節(jié)。而且我們也看到了緊挨著PCI_HEADER_TYPE(即存放頭部類型的寄存器)下面定義的就是上面提到的三種類型的頭部:

#define PCI_HEADER_TYPE_NORMAL 0#define PCI_HEADER_TYPE_BRIDGE 1#define PCI_HEADER_TYPE_CARDBUS 2

在Linux系統(tǒng)上,可以通過(guò)cat /proc/pci 等命令查看系統(tǒng)中所有PCI設(shè)備的類別、型號(hào)以及廠商等信息,那就是從這些寄存器來(lái)的。下面是在虛擬機(jī)中用lspci -x命令的信息截取(lspci命令也是使用/proc文件作為其信息來(lái)源):

00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)00: 86 80 90 71 06 00 00 02 01 00 00 06 00 00 00 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 ad 15 76 19 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

首先要說(shuō)明的是PCI寄存器是小端字節(jié)序格式的。那么根據(jù)最下面的PCI配置寄存器組的結(jié)構(gòu)(圖4),顯然這個(gè)Host bridge的Vendor ID是0x8086,我不說(shuō)你也能猜到這個(gè)Vendor就是Intel。

這里有個(gè)問(wèn)題要先說(shuō)清楚,就是這些寄存器的地址問(wèn)題,不然往后就進(jìn)行不下去了。配置寄存器可以讓我們來(lái)進(jìn)行配置以便完成PCI設(shè)備上的存儲(chǔ)空間的訪問(wèn),但這些配置寄存器本身也位于PCI設(shè)備地址空間中,如何訪問(wèn)這部分空間也就成了我們整個(gè)初始化工作的一個(gè)入口點(diǎn),就像每個(gè)可執(zhí)行程序都要有入口點(diǎn)一樣。

PCI采用的辦法是讓所有設(shè)備的配置寄存器組都采用相同的地址,由所在總線的PCI橋在訪問(wèn)時(shí)附加上其他條件來(lái)區(qū)分。而CPU則通過(guò)一個(gè)統(tǒng)一的入口地址向“宿主--PCI橋”發(fā)出命令,由相應(yīng)的PCI橋間接的完成具體的讀寫。對(duì)于i386結(jié)構(gòu)的處理器,PCI總線的設(shè)計(jì)者在I/O地址空間保留了8個(gè)字節(jié)用于這個(gè)目的,那就是0xCF8~0xCFF。

這8個(gè)字節(jié)構(gòu)成了兩個(gè)32位的寄存器,第一個(gè)是“地址寄存器”0xCF8,第二個(gè)是“數(shù)據(jù)寄存器”0xCFC。要訪問(wèn)某個(gè)設(shè)備中的某個(gè)配置寄存器時(shí),CPU先往地址寄存器中寫入目標(biāo)地址,然后通過(guò)數(shù)據(jù)寄存器讀寫數(shù)據(jù)。不過(guò),寫入地址寄存器的目標(biāo)地址是一種總線號(hào)、設(shè)備號(hào)、功能號(hào)以及設(shè)備寄存器地址在內(nèi)的綜合地址。格式如下圖:

圖3 寫入地址寄存器0xCF8的綜合地址

這里的總線號(hào)、設(shè)備號(hào)和功能號(hào)是對(duì)配置寄存器地址的擴(kuò)充,就是上面提到的附加的其他條件。

首先每個(gè)PCI總線都有個(gè)總線號(hào),主總線的總線號(hào)為0,其余的則由CPU在枚舉階段每當(dāng)探測(cè)到一個(gè)PCI橋時(shí)便為其指定一個(gè),依次遞增。設(shè)備號(hào)一般代表著一塊PCI接口卡(更確切的說(shuō)是PCI總線接口芯片),通常取決于插槽的位置。PCI接口卡上可以有若干個(gè)功能模塊,這些功能模塊共用一個(gè)PCI總線接口芯片,包括其中用于地址映射的電子線路,以降低成本。

從邏輯的角度說(shuō),每個(gè)“功能”實(shí)際上就是一個(gè)設(shè)備(看過(guò)USB設(shè)備驅(qū)動(dòng)的人很眼熟吧 ,呵呵),所以設(shè)備號(hào)和功能號(hào)合在一起又可以稱作“邏輯設(shè)備號(hào)”,而每塊卡上最多可以容納8個(gè)設(shè)備。

顯然,這些字段(指整個(gè)32bit)結(jié)合在一起就惟一確定了系統(tǒng)中的一項(xiàng)PCI邏輯設(shè)備。開(kāi)始時(shí),只有0號(hào)總線可以訪問(wèn),在掃描0號(hào)總線時(shí)如果發(fā)現(xiàn)上面某個(gè)設(shè)備是PCI橋,就為之指定一個(gè)新的總線號(hào),例如1,這樣1號(hào)總線就可以訪問(wèn)了,這就是枚舉階段的任務(wù)之一。

現(xiàn)在請(qǐng)讀者考慮一個(gè)問(wèn)題:當(dāng)我們拿到一塊PCI網(wǎng)卡,把它插到PC的主板上,打算寫個(gè)這個(gè)網(wǎng)卡的驅(qū)動(dòng)。那么第一步該干什么呢?讀者可以回顧前面的內(nèi)容,既然我們說(shuō)Linux內(nèi)核幫我們做了設(shè)備的枚舉和配置工作,那么我在寫網(wǎng)卡驅(qū)動(dòng)之前是不是可以先看看Linux內(nèi)核對(duì)我們的這個(gè)PCI網(wǎng)卡設(shè)備完成的枚舉工作的結(jié)果呢?或者直白些說(shuō),我把網(wǎng)卡插上了,現(xiàn)在Linux內(nèi)核有沒(méi)有識(shí)別出這塊設(shè)備呢?注意識(shí)別出設(shè)備跟能正常使用設(shè)備是不同的概念,這很好理解。

安裝過(guò)PC網(wǎng)卡驅(qū)動(dòng)的人都知道,當(dāng)設(shè)備的驅(qū)動(dòng)沒(méi)有安裝時(shí),我們?cè)谠O(shè)備管理器中是可以看到這個(gè)設(shè)備的,不過(guò)上面是一個(gè)黃色的大問(wèn)號(hào)。而在Linux系統(tǒng)中,我們可以通過(guò)lspci命令來(lái)查看。

下面是在LDD3的PCI驅(qū)動(dòng)那一章截取的一段內(nèi)容: lspci 的輸出( pciutils 的一部分, 在大部分發(fā)布中都有)和在 /proc/pci 和 /porc/bus/pci 中的信息排布. PCI 設(shè)備的 sysfs 表示也顯示了這種尋址方案, 還有 PCI 域信息,當(dāng)顯示硬件地址時(shí), 它可被顯示為 2 個(gè)值( 一個(gè) 8-位總線號(hào)和一個(gè) 8-位 設(shè)備和功能號(hào)), 作為 3 個(gè)值( bus, device, 和 function), 或者作為 4 個(gè)值(domain, bus, device, 和 function); 所有的值常常用 16 進(jìn)制顯示.

例如, /proc/bus/pci/devices 使用一個(gè)單個(gè)16位字段(來(lái)便于分析和排序), 而 /proc/bus/busnumber 劃分地址為3個(gè)字段. 下面內(nèi)容顯示了這些地址如何顯示, 只顯示了輸出行的開(kāi)始 :

$ lspci | cut -d: -f1-3000000.0 Host bridge 000000.1 RAM memory 000000.2 RAM memory 000002.0 USB Controller 000004.0 Multimedia audio controller 000006.0 Bridge 000007.0 ISA bridge 000009.0 USB Controller 000009.1 USB Controller 000009.2 USB Controller 00000c.0 CardBus bridge 00000f.0 IDE interface 000010.0 Ethernet controller 000012.0 Network controller 000013.0 FireWire (IEEE 1394) 000014.0 VGA compatible controller $ cat /proc/bus/pci/devices | cut -f1 0000 0001 0002 0010 0020 0030 0038 0048 0049 004a 0060 0078 0080 0090 0098 00a0 $ tree /sys/bus/pci/devices/ /sys/bus/pci/devices/ |-- 000000.0 -> ../../../devices/pci0000:00/000000.0 |-- 000000.1 -> ../../../devices/pci0000:00/000000.1 |-- 000000.2 -> ../../../devices/pci0000:00/000000.2 |-- 000002.0 -> ../../../devices/pci0000:00/000002.0 |-- 000004.0 -> ../../../devices/pci0000:00/000004.0 |-- 000006.0 -> ../../../devices/pci0000:00/000006.0 |-- 000007.0 -> ../../../devices/pci0000:00/000007.0 |-- 000009.0 -> ../../../devices/pci0000:00/000009.0 |-- 000009.1 -> ../../../devices/pci0000:00/000009.1 |-- 000009.2 -> ../../../devices/pci0000:00/000009.2 |-- 00000c.0 -> ../../../devices/pci0000:00/00000c.0 |-- 00000f.0 -> ../../../devices/pci0000:00/00000f.0 |-- 000010.0 -> ../../../devices/pci0000:00/000010.0 |-- 000012.0 -> ../../../devices/pci0000:00/000012.0 |-- 000013.0 -> ../../../devices/pci0000:00/000013.0 |--000014.0->../../../devices/pci0000:00/000014

所有的 3 個(gè)設(shè)備列表都以相同順序排列, 因?yàn)?lspci 使用 /proc 文件作為它的信息源。拿 VGA 視頻控制器作一個(gè)例子, 0x00a0 意思是 000014.0 當(dāng)劃分為域(16位), 總線(8位), 設(shè)備(5位)和功能(3位).為什么0x00a0對(duì)應(yīng)的是000014.0呢,這就要看圖2中的內(nèi)容了,根據(jù)圖2中的寄存器對(duì)應(yīng)0x00a0就代表著總線(8位), 設(shè)備(5位)和功能(3位).

0x00a0=0000000010100000,很容易看出高8位是總線號(hào)也就是0。剩下的0xa0=10100000,可以看出如果低3位表示功能號(hào),那么剩下的10100就是設(shè)備號(hào),補(bǔ)全成8位的值就是00010100即0x14.

圖4 PCI配置寄存器組

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11310

    瀏覽量

    209597
  • PCI
    PCI
    +關(guān)注

    關(guān)注

    4

    文章

    666

    瀏覽量

    130290
  • PCI設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8127

原文標(biāo)題:PCI設(shè)備驅(qū)動(dòng)(一)

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PCI2250 PCIPCI橋接器實(shí)施指南

    電子發(fā)燒友網(wǎng)站提供《PCI2250 PCIPCI橋接器實(shí)施指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-23 15:13 ?0次下載
    <b class='flag-5'>PCI</b>2250 <b class='flag-5'>PCI</b>到<b class='flag-5'>PCI</b>橋接器實(shí)施指南

    linux內(nèi)核中通用HID觸摸驅(qū)動(dòng)

    linux內(nèi)核中,為HID觸摸面板實(shí)現(xiàn)了個(gè)通用的驅(qū)動(dòng)程序,位于/drivers/hid/hid-multitouch.c文件中。hid觸摸驅(qū)動(dòng)是以struct hid_driver
    的頭像 發(fā)表于 10-29 10:55 ?656次閱讀
    <b class='flag-5'>linux</b>內(nèi)核中通用HID觸摸<b class='flag-5'>驅(qū)動(dòng)</b>

    RTOS與Linux到底有什么區(qū)別

    很多做嵌入式開(kāi)發(fā)的小伙伴存在這樣的疑惑:RTOS與Linux到底有什么區(qū)別?
    的頭像 發(fā)表于 10-29 09:53 ?459次閱讀

    pci內(nèi)存控制器感嘆號(hào)有影響嗎

    PCI內(nèi)存控制器感嘆號(hào)通常表示硬件設(shè)備存在一些問(wèn)題,這可能會(huì)對(duì)您的計(jì)算機(jī)性能產(chǎn)生影響。以下是一些可能的原因和解決方法: 驅(qū)動(dòng)程序問(wèn)題:感嘆號(hào)可能表示
    的頭像 發(fā)表于 10-10 16:56 ?2559次閱讀

    驅(qū)動(dòng)到空調(diào)、機(jī)器人應(yīng)用,剖析格力的電機(jī)布局

    電子發(fā)燒友網(wǎng)報(bào)道(文/吳子鵬)電機(jī)俗稱馬達(dá),是種將電能轉(zhuǎn)換為機(jī)械能的裝置,主要作用是產(chǎn)生驅(qū)動(dòng)轉(zhuǎn)矩,作為用電器或各種設(shè)備的動(dòng)力源。電機(jī)在家用電器、工業(yè)設(shè)備、農(nóng)業(yè)設(shè)備、軍工設(shè)備以及交通工具中無(wú)處不在
    的頭像 發(fā)表于 10-09 00:10 ?7291次閱讀
    從<b class='flag-5'>驅(qū)動(dòng)到</b>空調(diào)、機(jī)器人應(yīng)用,剖析格力的電機(jī)布局

    LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED<b class='flag-5'>驅(qū)動(dòng)</b>器應(yīng)用的<b class='flag-5'>一些</b>指南和技巧

    linux系統(tǒng)的設(shè)備驅(qū)動(dòng)般分幾類

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)操作系統(tǒng)與硬件設(shè)備之間的通信和控制。Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)可以分為以下幾類: 字符設(shè)備
    的頭像 發(fā)表于 08-30 15:13 ?444次閱讀

    Linux設(shè)備驅(qū)動(dòng)程序分類有哪些

    Linux設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Linux設(shè)備驅(qū)動(dòng)程序的分類繁多,可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類。 按硬件類型分類
    的頭像 發(fā)表于 08-30 15:11 ?581次閱讀

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    ,需要了解Linux內(nèi)核的基本概念和API。以下是一些關(guān)鍵概念: 1.1 內(nèi)核模塊:Linux內(nèi)核模塊是種動(dòng)態(tài)加載和卸載的代碼,可以在不重新啟動(dòng)系統(tǒng)的情況下加載和卸載。
    的頭像 發(fā)表于 08-30 15:02 ?486次閱讀

    linux驅(qū)動(dòng)程序的編譯方法是什么

    Linux驅(qū)動(dòng)程序的編譯方法主要包括兩種: 與內(nèi)核起編譯 和 編譯成獨(dú)立的內(nèi)核模塊 。以下是對(duì)這兩種方法的介紹: 、與內(nèi)核起編譯 與內(nèi)
    的頭像 發(fā)表于 08-30 14:46 ?602次閱讀

    linux驅(qū)動(dòng)程序運(yùn)行在什么空間

    Linux 驅(qū)動(dòng)程序是操作系統(tǒng)的部分,負(fù)責(zé)管理硬件設(shè)備與操作系統(tǒng)之間的交互。驅(qū)動(dòng)程序運(yùn)行在內(nèi)核空間(Kernel Space),這是操作系統(tǒng)的核心部分,與用戶空間(User Spac
    的頭像 發(fā)表于 08-30 14:37 ?422次閱讀

    Linux 驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā),你知道多少?

    Linux驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā)的區(qū)別開(kāi)發(fā)層次不同:Linux驅(qū)動(dòng)開(kāi)發(fā)主要是針對(duì)硬件設(shè)備進(jìn)行編程,處于操作系統(tǒng)內(nèi)核層,直接與硬件交互,為上層
    的頭像 發(fā)表于 08-30 12:16 ?802次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)與應(yīng)用開(kāi)發(fā),你知道多少?

    PCI2250 PCIPCI橋數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《PCI2250 PCIPCI橋數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-10 09:34 ?0次下載
    <b class='flag-5'>PCI</b>2250 <b class='flag-5'>PCI</b>到<b class='flag-5'>PCI</b>橋數(shù)據(jù)表

    請(qǐng)問(wèn)esp32s3怎么添加nt35510驅(qū)動(dòng)到新工程中?

    請(qǐng)問(wèn)esp32s3怎么添加nt35510驅(qū)動(dòng)到新工程中
    發(fā)表于 06-27 06:30

    Nvidia與AMD新芯片,突破PCIe瓶頸

    AMD 和 Nvidia 的 GPU 依賴 PCI 總線與 CPU 進(jìn)行通信。CPU 和 GPU 有兩個(gè)不同的內(nèi)存域,數(shù)據(jù)必須通過(guò) PCI 接口從 CPU 域移動(dòng)到 GPU 域(并返
    的頭像 發(fā)表于 03-08 14:15 ?687次閱讀
    Nvidia與AMD新芯片,突破PCIe瓶頸
    主站蜘蛛池模板: 三级黄色a| 米奇影视999| 看看妇女的B免费看| 亚洲狠狠97婷婷综合久久久久| 刺激性视频黄页| 人妻洗澡被强公日日澡| 99久久99久久精品| 免费A级毛片无码无遮挡| 最近中文字幕MV免费高清在线| 久久99免费视频| 亚洲欧美日韩综合影院| 簧片高清在线观看| 夜蒲团之5阳性之教| 久久大综合| 最近最新的日本字幕MV| 美女张开腿让男生桶动态图| 中文成人在线视频| 美国ZOOM动物在线观看| 99热久久精品国产一区二区| 欧美巨大xxxx做受高清| 俄罗斯少女人体| 亚洲 综合 自拍 精品 在线| 精品香蕉99久久久久网站| 在线精品一卡乱码免费| 恋夜秀场1234手机视频在线观看| 99精品免费观看| 日韩精品免费在线观看| 国产老肥熟xxxx| 亚洲视频国产| 嫩草影院久久精品| 国产AV果冻传奇麻豆| 亚洲精品无码葡京AV天堂| 快播h动漫网| 大香网伊人久久综合网2020| 亚洲AV无码偷拍在线观看| 久久婷婷色一区二区三区| brazzers欧美孕交| 甜性涩爱在线播放| 久久久无码精品亚洲日韩按摩| 99精品电影| 亚洲 欧美 中文 日韩 另类|