Linux pci驅動原始碼

2021-06-04 05:58:48 字數 2318 閱讀 2713

#include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef linux26

#include #endif

#include "plx.h"

#define device_name "plxdriver"

#define plx_8311

//static int imajor;

static int plx_major = 0;

struct cdev cdev;

dev_t devno;

struct class *plx_class;

static struct plx *cards[plx_max_ifaces];

bool found_card_flag = 0;

static void plx_release(struct plx *plx)

static int shrec_open(struct inode *inode, struct file *file)

static int shrec_release( struct inode *inode, struct file *file )

static struct file_operations shrec_fops = ;

static int __devinit plx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

if (pci_enable_device(pdev))

else

cards[x] = plx;

plx->dev = pdev;

plx->region = pci_resource_start(pdev,0); //1、獲取plx位址空間基位址0的首位址,該位址為實體地址,由系統啟動是儲存在pdev結構體中

plx->len = pci_resource_len(pdev,0); //獲取基位址0的空間大小

if (check_mem_region(plx->region, plx->len)) //2、檢查該區域是否可用

if (request_mem_region(plx->region, plx->len, "plx")) //3、申請使用該區域

plx->addr = ioremap(plx->region, plx->len); //4、將該區域的物理位址對映為虛擬位址,程式對只能對虛擬位址進行讀寫

if (!plx->addr)

pci_set_drvdata(pdev, plx);

printk("found plx card %d\n",x);

found_card_flag = 1;

res = 0;

}return res;

err_out_free_plx:

if (plx->freeregion_plx)

release_mem_region(plx->region, plx->len);

if (plx->addr)

iounmap(plx->addr);

if (plx)

kfree(plx);

return -eio;

}static void __devexit plx_remove_one(struct pci_dev *pdev)

}static struct pci_device_id plx_pci_tbl =

, /*probe pci cards*/

/*tejxapci*/

, ,,};

module_device_table(pci, plx_pci_tbl);

static struct pci_driver plx_driver =

;static int __init plx_driver_init(void)

else

if(found_card_flag)

device_create( plx_class, null, devno, device_name);

} else

printk("not found synway card!\n");

return 0;

}static void __exit plx_driver_cleanup(void) }

module_init(plx_driver_init);

module_exit(plx_driver_cleanup);

原創 Linux PCI驅動框架分析(三)

說明 kernel版本 4.14 arm64處理器 使用工具 source insight 3.5,visio 先回顧一下pcie的架構圖 那麼問題來了,platform device是在什麼時候建立的呢?那就不得不提到device tree裝置樹了。我們看看pcie host的裝置樹內容 pcie...

原創 Linux PCI驅動框架分析(二)

說明 kernel版本 4.14 arm64處理器 使用工具 source insight 3.5,visio 話不多說,直接開始。來一張更詳細的結構體組織圖 linux pci驅動框架,基於linux裝置驅動模型,因此有必要先簡要介紹一下,實際上linux裝置驅動模型也是乙個大的topic,先挖個...

隱藏驅動模組 原始碼

xp親測有效,使用我們自己編寫的列舉驅動模組會看不到。列舉驅動模組請看文章 但是使用ark工具依然能看到我們隱藏的驅動某塊,比如kernel detective 和pchunter 但是隱藏的驅動模組為紅色,意為ark工具檢測到了該模組進行了隱藏 include typedef unsigned l...