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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux系統(tǒng)安裝PCI驅(qū)動(dòng)指南(pci驅(qū)動(dòng)linux)

PCI(Peripheral Component Interconnect,外圍部件互連)總線是目前許多計(jì)算機(jī)中用于連接周邊設(shè)備的標(biāo)準(zhǔn)總線之一。Linux系統(tǒng)擁有廣泛的驅(qū)動(dòng)程序支持,包括PCI設(shè)備驅(qū)動(dòng)程序。安裝PCI驅(qū)動(dòng)程序是Linux系統(tǒng)配置中重要的一部分。本文提供了Linux系統(tǒng)安裝PCI驅(qū)動(dòng)程序的詳細(xì)指南。

成都創(chuàng)新互聯(lián)公司專注于白城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供白城營(yíng)銷型網(wǎng)站建設(shè),白城網(wǎng)站制作、白城網(wǎng)頁設(shè)計(jì)、白城網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造白城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供白城網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

之一步:確定PCI設(shè)備的信息

在安裝PCI驅(qū)動(dòng)程序之前,我們需要知道PCI設(shè)備的具體信息。為此,可以使用lspci命令。在終端窗口中輸入命令“l(fā)spci”并按下回車鍵。該命令將返回一個(gè)PCI設(shè)備的列表。通常,該列表包括設(shè)備名稱、廠商名稱、設(shè)備ID和子系統(tǒng)ID。例如,以下是一個(gè)具有三個(gè)PCI設(shè)備的lspci輸出:

00:00.0 Host bridge: Intel Corporation 440FX – 82441FX PMC [Natoma] (rev 02)

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]

00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)

第二步:查找PCI設(shè)備的驅(qū)動(dòng)程序

一旦確定了PCI設(shè)備的信息,下一步就是查找設(shè)備的驅(qū)動(dòng)程序。通常情況下,Linux內(nèi)核自帶了大部分PCI設(shè)備的驅(qū)動(dòng)程序。為了確定設(shè)備是否有內(nèi)置的驅(qū)動(dòng)程序,可以使用modinfo命令。在終端窗口中輸入“modinfo”命令并輸入PCI設(shè)備的名稱。例如,如果我們想了解Intel 440FX芯片組的modinfo信息,可以輸入以下命令:

modinfo intel-440fx

該命令將返回有關(guān)設(shè)備驅(qū)動(dòng)程序的詳細(xì)信息,包括版本號(hào)、作者和文件路徑等。

如果設(shè)備的驅(qū)動(dòng)程序沒有被內(nèi)置在內(nèi)核中,那么我們需要從其他來源獲取它。最常見的選項(xiàng)是在Linux內(nèi)核源代碼中查找驅(qū)動(dòng)程序或從Linux社區(qū)的網(wǎng)站下載它。

第三步:安裝PCI設(shè)備的驅(qū)動(dòng)程序

在確定了設(shè)備驅(qū)動(dòng)程序的來源,并將其下載或復(fù)制到計(jì)算機(jī)上之后,我們需要將其安裝到Linux系統(tǒng)中。

在大多數(shù)情況下,驅(qū)動(dòng)程序?qū)⒃谙螺d后作為源代碼提供。為了安裝驅(qū)動(dòng)程序,我們需要使用構(gòu)建工具像gcc等來編譯它們。為此,我們需要打開終端并進(jìn)入已解壓縮的驅(qū)動(dòng)程序文件夾:

$ cd /path/to/driver/source

接下來,運(yùn)行“make”命令來編譯驅(qū)動(dòng)程序:

$ make

命令將開始構(gòu)建一個(gè)Linux內(nèi)核模塊,并在當(dāng)前文件夾中生成相應(yīng)的文件。接下來,我們需要將模塊加載到Linux內(nèi)核中。為此,我們可以使用inod命令,例如:

$ sudo inod pci-driver.ko

在此示例中,“pci-driver”是設(shè)備驅(qū)動(dòng)程序文件的名稱,而“.ko”表示這是一個(gè)Linux內(nèi)核模塊。

如果驅(qū)動(dòng)程序沒有安裝,則可以使用modprobe命令來安裝它:

$ sudo modprobe pci-driver

該命令將安裝設(shè)備驅(qū)動(dòng)程序并將其添加到Linux內(nèi)核中。

第四步:驗(yàn)證設(shè)備驅(qū)動(dòng)程序是否正確安裝

為了驗(yàn)證設(shè)備驅(qū)動(dòng)程序是否正確安裝,可以使用lspci命令再次運(yùn)行該設(shè)備的列表。在返回的列表中,應(yīng)該可以看到設(shè)備及其相應(yīng)的驅(qū)動(dòng)程序已正確安裝。例如,以下是Intel 440FX芯片組安裝了其相應(yīng)驅(qū)動(dòng)程序后的lspci輸出:

00:00.0 Host bridge: Intel Corporation 440FX – 82441FX PMC [Natoma] (rev 02)

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]

00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)

00:01.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01)

00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)

在該列表中,可以看到該芯片組的所有設(shè)備都已正確識(shí)別,并且已正確安裝其相應(yīng)驅(qū)動(dòng)程序。

結(jié)論

PCI設(shè)備是現(xiàn)代計(jì)算機(jī)中常見的設(shè)備類型,因此安裝其驅(qū)動(dòng)程序是管理和配置Linux系統(tǒng)的重要部分。通過使用本指南提供的簡(jiǎn)單步驟,可以輕松地安裝任何PCI設(shè)備的驅(qū)動(dòng)程序并將其添加到Linux內(nèi)核中。

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

  • 如何讓linux重新枚舉pci設(shè)備
  • linux如何用驅(qū)動(dòng)程序查看 計(jì)算機(jī)系統(tǒng)上的所有PCI設(shè)備的I/O配置信息。

如何讓linux重新枚舉pci設(shè)備

在Linux下,lspci可以枚舉所有PCI設(shè)鎮(zhèn)梁備。它是通過讀取PCI配置空間(PCI Configuration Space)信息來實(shí)現(xiàn)PCI設(shè)備的枚舉的。這里,我通過兩種方式來簡(jiǎn)單的模擬一下lspci的功能。一種是通過PCI總線的CF8和CFC端口來枚舉(參考PCI總線規(guī)范);另一種是利用proc filesystem。

  方法一:這種方法需要對(duì)端口進(jìn)行操作,在Linux下,普通應(yīng)用程序沒有權(quán)限讀寫I/O 端口,需圓仿要通過iopl或ioperm來提升權(quán)限,我的代碼里面使用iopl。

  

   view plaincopyprint?

  /*

  * Enum all pci device via the PCI config register(CF8 and CFC).

  */

  #include

  #include

  #include

  #include

  

  #define PCI_MAX_BUS 255 /* 8 bits (0 ~ 255) */

  #define PCI_MAX_DEV 31 /* 5 bits (0 ~ 31) */

  #define PCI_MAX_FUN 7 /* 3 bits (0 ~ 7) */

  

  #define CONFIG_ADDRESS 0xCF8

  #define CONFIG_DATA 0xCFC

  

  #define PCICFG_REG_VID 0x00 /* Vendor id, 2 bytes */

  #define PCICFG_REG_DID 0x02 /* Device id, 2 bytes */

  #define PCICFG_REG_CMD 0x04 /* Command register, 2 bytes */

  #define PCICFG_REG_STAT 0x06 /* Status register, 2 bytes */

  #define PCICFG_REG_RID 0x08 /* Revision id, 1 byte */

  

  

  void list_pci_devices()

  {

  unsigned int bus, dev, fun;

  unsigned int addr, data;

  

  //printf(“BB:DD:FF VID:DID\n”);

  

  

  for (bus = 0; bus >16);

  addr = 0xL | (bus

  #include

  #include

  #include

  #include

  #include

  

  #define PCI_MAX_BUS 255 /* 8 bits (0 ~ 255) */

  #define PCI_MAX_DEV 31 /* 5 bits (0 ~ 31) */

  #define PCI_MAX_FUN 7 /* 3 bits (0 ~ 7) */

  

  /*

  * PCI Configuration Header offsets

  */

  #define PCICFG_REG_VID 0x00 /* Vendor id, 2 bytes */

  #define PCICFG_REG_DID 0x02 /* Device id, 2 bytes */

  #define PCICFG_REG_CMD 0x04 /* Command register, 2 bytes */

  #define PCICFG_REG_STAT 0x06 /* Status register, 2 bytes */

  #define PCICFG_REG_RID 0x08 /* Revision id, 1 byte */

  #define PCICFG_REG_PROG_INTF 0x09 /* Programming interface code, 1 byte */

  #define PCICFG_REG_SUBCLASS 0x0A /* Sub-class code, 1 byte */

  #define PCICFG_REG_BASCLASS 0x0B /* Base class code, 1 byte */

  #define PCICFG_REG_CACHE_LINESZ 0x0C /* Cache line size, 1 byte */

  #define PCICFG_REG_LATENCY_TIMER 0x0D /* Latency timer, 1 byte */

  #define PCICFG_REG_HEADER_TYPE 0x0E /* Header type, 1 byte */

  #define PCICFG_REG_BIST 0x0F /* Builtin self test, 1 byte */

  #define PCICFG_REG_BAR0 0x10 /* Base addr register 0, 4 bytes */

  #define PCICFG_REG_BAR1 0x14 /* Base addr register 1, 4 bytes */

  #define PCICFG_REG_BAR2 0x18 /* Base addr register 2, 4 bytes */

  #define PCICFG_REG_BAR3 0x1C /* Base addr register 3, 4 bytes */

  #define PCICFG_REG_BAR4 0x20 /* Base addr register 4, 4 bytes */

  #define PCICFG_REG_BAR5 0x24 /* Base addr register 5, 4 bytes */

  #define PCICFG_REG_CIS 0x28 /* Cardbus CIS Pointer */

  #define PCICFG_REG_SVID 0x2C /* Subsystem Vendor ID, 2 bytes */

  #define PCICFG_REG_SDID 0x2E /* Subsystem ID, 2 bytes */

  #define PCICFG_REG_ROMBAR 0x30 /* ROM base register, 4 bytes */

  #define PCICFG_REG_CAPPTR 0x34 /* Capabilities pointer, 1 byte */

  #define PCICFG_REG_INT_LINE 0x3C /* Interrupt line, 1 byte */

  #define PCICFG_REG_INT_PIN 0x3D /* Interrupt pin, 1 byte */

  #define PCICFG_REG_MIN_GNT 0x3E /* Minimum grant, 1 byte */

  #define PCICFG_REG_MAX_LAT 0x3F /* Maximum lat, 1 byte */

  

  

  void list_pci_devices()

  {

  unsigned int bus, dev, fun;

  

  //printf(“BB:DD:FF VID:DID(RID)\n”);

  

  

  for (bus = 0; bus >16;

  

  printf(“%02X:%02X:%02X”, bus, dev, fun);

  if (rid > 0) {

  printf(” %04X:%04X (rev %02X)\n”, vid, did, rid);

  } else {

  printf(” %04X:%04X\n”, vid, did);

  }

  }

  } // end func

  } // end device

  } // end bus

  }

  

  int main(int argc, char **argv)

  {

  list_pci_devices();

  

  return 0;

  }

  

  這兩種方法各有優(yōu)缺點(diǎn),之一種方法方便移植到其他OS,第二種就只適用于Linux。但是,之一種方法需要對(duì)I/O port進(jìn)行直接操作。第二種就不需要。

  注意:執(zhí)行這兩段代碼時(shí),需要超級(jí)用戶(root) 權(quán)限。

  補(bǔ)充:今天在枚舉 Westmere-EP Processor(Intel Xeon Processor 5500 Series(Nehalem-EP))的 IMC(Integrated Memory Controller)時(shí)發(fā)現(xiàn)一個(gè)問題。lspci無法枚舉到IMC設(shè)備。Westmere-EP 是 Intel 新的處理器架構(gòu)。和以往的CPU不一樣,它把Memory Controller集成到了CPU里面。IMC控制器被映射到了PCI總線上,Bus Number 是0xFE~0xFF,procfs(/proc/bus/pci/)下沒有這幾個(gè)設(shè)備。但是,通過 CF8/CFC 端口可以枚舉到這些設(shè)備。

  3. 這段代碼是在驅(qū)動(dòng)中可以用來查找特定的pci device,并且返回一個(gè)pci_dev的結(jié)構(gòu)體變量。通過這樣一個(gè)struct變量,內(nèi)核提供的接口函數(shù)可以直接套用,如pci_read_config_word(),pci_write_config_word()等。

   view plaincopyprint?

  void list_pci_device()

  {

  struct pci_dev *dev;

  struct pci_bus *bus,*childbus;

  

  list_for_each_entry(bus, &pci_root_buses, node) { //globle pci_root_buses in pci.h

  list_for_each_entry(dev, &bus->devices, bus_list) { // for bus 0

  printk(“%02X:%02X:%02X %04X:%04X\n”,dev->bus->number,dev->devfn >> 3, dev->devfn & 0x07,dev->vendor,dev->device);

  }

  list_for_each_entry(childbus, &bus->children,node) { // for bus 1,2,3,…

  list_for_each_entry(dev, &childbus->devices, bus_list) {

  printk(“%02X:%02X:%02X %04X:%04X\n”,dev->bus->number,dev->devfn >> 3, dev->devfn & 0x07,dev->vendor,dev->device);

  }

  }

linux如何用驅(qū)動(dòng)程序查看 計(jì)算機(jī)系統(tǒng)上的所有PCI設(shè)備的I/O配置信息。

# lspci -tv# 列出所有PCI設(shè)備

關(guān)于pci驅(qū)動(dòng) linux的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

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


網(wǎng)頁標(biāo)題:Linux系統(tǒng)安裝PCI驅(qū)動(dòng)指南(pci驅(qū)動(dòng)linux)
當(dāng)前URL:http://www.5511xx.com/article/cdsodhh.html