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

四:中断处理:

相关推荐
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
Svan.11 天前
Portable Watch:基于STM32的便携智能手表
arm开发·驱动开发·stm32·嵌入式硬件·硬件工程·pcb工艺·智能手表
楼台的春风12 天前
【Linux驱动开发 ---- 4_驱动开发框架和 API】
linux·c语言·c++·人工智能·驱动开发·嵌入式硬件·ubuntu
楼台的春风12 天前
【Linux驱动开发 ---- 1.1_Linux 基础操作入门】
linux·c语言·c++·人工智能·驱动开发·嵌入式硬件·ubuntu
sukalot12 天前
window显示驱动开发—输出合并器阶段
驱动开发·算法
sukalot13 天前
window显示驱动开发—使用状态刷新回调函数
驱动开发
车载操作系统---攻城狮13 天前
[驱动开发篇] SPI 驱动开发 - 原理解析篇
驱动开发
楼台的春风13 天前
【Linux驱动开发 ---- 4.1_sysfs 详解】
linux·运维·c语言·数据库·人工智能·驱动开发·嵌入式硬件
爱喝西北风的东北风13 天前
Linux树莓派项目实战:外网访问、PWM呼吸灯、超声波测距与驱动开发
linux·运维·驱动开发
Super Mark14 天前
CLion + STM32环境配置,亲测有效(2025.06.19记)
驱动开发·stm32·嵌入式硬件