驱动开发系列 - 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:

四:中断处理:

相关推荐
风华同学8 小时前
【Linux驱动篇】字符设备驱动开发
linux·运维·驱动开发
Coder_Boy_11 小时前
前端和后端软件系统联调经典问题汇总
java·前端·驱动开发·微服务·状态模式
Coder_Boy_1 天前
DDD从0到企业级:迭代式学习 (共17章)之 四
java·人工智能·驱动开发·学习
LYFlied1 天前
AI时代下的规范驱动开发:重塑前端工程实践
前端·人工智能·驱动开发·ai编程
hkhkhkhkh1232 天前
Linux设备节点基础知识
linux·服务器·驱动开发
东哥很忙XH2 天前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
坏一点2 天前
Yocto项目构建(3)——构建和部署树莓派镜像
linux·驱动开发·嵌入式硬件
红糖果仁沙琪玛2 天前
AD7616驱动开发-FPGA
驱动开发·fpga开发
hkhkhkhkh1233 天前
Linux 内核三大核心结构体详解(驱动开发视角)
linux·数据结构·驱动开发·字符设备
Coder_Boy_3 天前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务