驱动开发系列 - pci驱动

一:pci驱动定义

cpp 复制代码
#include <linux/module.h> 
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/pci.h>

MODULE_LICENSE("GPL");

#define MY_VENDOR_ID 0xAAAA  //厂家ID, PCI厂家ID在全球统一分配和管理
#define MY_DEVICE_ID_NET1 0xFF01 //卡ID
#define MY_DEVICE_ID_NET2 0xFF02 //卡ID 

//驱动中支持多个卡,用此来标识每个卡的信息
enum my_asic_type {
	CHIP_MY_A0 = 0,
	CHIP_MY_B0 = 1,
	CHIP_LAST
};

//设置驱动所支持的PCI卡列表,本例子支持A0, B0两个卡
struct pci_device_id my_network_driver_pci_table[] = {
	{
		MY_VENDOR_ID, 
		MY_DEVICE_ID_NET1, 
		PCI_ANY_ID,
		PCI_ANY_ID,
		0,
		0,
		CHIP_MY_A0
	},
	{
		MY_VENDOR_ID, //factory id
		MY_DEVICE_ID_NET2,//device id
		PCI_ANY_ID,
		PCI_ANY_ID,
		0,
		0,
		CHIP_MY_B0
	},

};

//probe函数
static int my_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
	return 0;
}

//remove 函数
static void my_driver_remove(struct pci_dev *pdev)
{
	return;
}

//pci_driver 定义
struct pci_driver my_network_pci_driver = {
	.name = "myntwrk",
	.probe = my_driver_probe,
	.remove = my_driver_remove,
	.id_table = my_network_driver_pci_table,
};

static int my_network_driver_init(void)
{
	pci_register_driver(&my_network_pci_driver);
	return 0;
}

static void my_network_driver_exit(void)
{
	pci_unregister_driver(&my_network_pci_driver);
}

module_init(my_network_driver_init);
module_exit(my_network_driver_exit);




//MakeFile
obj-m := mypci.o

KERNEL_DIR := /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd)

EXTRA_CFLAGS = -g 
ccflags-y := -O0

all:
	make -C $(KERNEL_DIR) M=$(PWD) modules 
clean:
	make -C $(KERNEL_DIR) M=$(PWD) clean

二:probe和remove实现:

三:增加DMA:

四:中断处理:

相关推荐
枳实-叶3 小时前
【Linux驱动开发】第12天:Linux设备树核心:树形结构+节点+属性 完整全解
linux·运维·驱动开发
世微 如初3 小时前
基于AP5160的大功率LED恒流驱动设计:原理分析与外围计算
驱动开发·单片机·芯片
路溪非溪8 小时前
Linux下物理总线驱动模型之SDIO驱动框架
linux·驱动开发
高翔·权衡之境1 天前
主题10:实时性——硬实时与软实时
服务器·网络·驱动开发·信息与通信·智能硬件
不怕犯错,就怕不做1 天前
ARM设备异常断电容易造成数据损坏,硬件如何设计
linux·驱动开发·嵌入式硬件
枳实-叶1 天前
【Linux驱动开发】第10天:设备树零基础入门——DTS/DTB/DTC全解+编译流程
linux·运维·驱动开发
枳实-叶1 天前
【Linux驱动开发】第11天:设备树(Device Tree)超详细全解:从诞生背景到工作原理
linux·运维·驱动开发
沃普天科技1 天前
USB显示器驱动板触摸收款机显示器收银机点菜机广告机
驱动开发·游戏·计算机外设·电脑·ar·音视频·硬件工程
小此方1 天前
Re:Linux系统篇(十九)进程篇·四:内核托底与生死交错 ,深度硬核剖析“僵尸”与“孤儿”进程
linux·运维·驱动开发
charlie1145141912 天前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发