#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...