一、概述
我這裡pci 裝置是powerpc2020 和fpga 通過pci 匯流排進行相連通訊。
二、驅動模型:
#include
#include
#include
#include
#include
#include
#include
#define send_buf_size (8192)
#define recv_buf_size (131072)
#define module_name "interrupt"
/* 指明該驅動程式適用於哪一些pci裝置 */
static const struct pci_device_id pcidevtbl = ,
{},};
static struct file_operations fops = ;
//分配初始化混雜裝置物件
static struct miscdevice misc =
static irqreturn_t interrupt(int irq, void *dev_id)
;static int __init pci_init(void)
if (!pci_register_driver(&demo_pci_driver))
return 0;
}static void __exit pci_exit(void)
module_init(pci_init);
module_exit(pci_exit);
module_license("gpl");
三、**分析:
1、簡單的混雜裝置驅動模型不必贅述。
2、主要分析static struct pci_driver demo_pci_driver;結構體。
這個結構體中定義了pci 從裝置的deviceid device name 等等一些資訊,這些資訊很重要,如果填錯在pci 註冊的的時候會報錯,當然也不會進入對應的probe 函式中去。
3、進入pci 註冊成功後的probe 中後會有一些模型化的步驟。具體我們如下分析。
四、pci probe 分析
int demo_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* new device inserted */
err = pci_set_dma_mask(pdev, dma_bit_mask(32));
if (err)
err = pci_set_consistent_dma_mask(pdev, dma_bit_mask(32));
if (err) else else
send_buf = pci_alloc_consistent(pdev, send_buf_size, &send_buf_hw);
if (send_buf == null) else
Linux下的PCI驅動程式設計
pci裝置上有三種位址空間 pci的i o空間 pci的儲存空間和pci的配置空間。cpu可以訪問pci裝置上的所有位址空間,其中i o空間和儲存空間提供給裝置驅動程式使用,而配置空間則由linux核心中的pci初始化 使用。核心在啟動時負責對所有pci裝置進行初始化,配置好所有的pci裝置,包括中...
實時Linux下的PCI驅動開發(下)
進入驅動的hpi相關部分後,就要好好研究pci2040的datasheet了。說實話,乙個驅動程式的大部分內容,就是把datasheet裡的內容翻譯成 所以每乙個驅動工程師都應該深入的閱讀硬體文件。首先看pci2040的配置空間,如下所示 有兩個最重要的基位址,乙個是hpi csr記憶體基位址,可以...
Linux的PCI驅動分析
1.關鍵資料結構 pci裝置上有三種位址空間 pci的i o空間 pci的儲存空間和pci的配置空間。cpu可以訪問pci裝置上的所有位址空間,其中i o空間和儲存空間提供給裝置驅動程式使用,而配置空間則由linux核心中的pci初始化 使用。核心在啟動時負責對所有pci裝置進行初始化,配置好所有的...