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

四:中断处理:

相关推荐
码农编程录2 小时前
【notes12】kbuild,内核模块化,字符设备驱动,设备树,platform总线,设备驱动模型
驱动开发
乔碧萝成都分萝2 小时前
二十六、IIO子系统 + SPI子系统 + ICM20608
linux·驱动开发·嵌入式
A星空1236 小时前
二、交叉编译工具链(arm-linux-gnueabihf-gcc)安装与验证,搭建 TFTP+NFS 服务,调试开发板网络连通性;
linux·c++·驱动开发·单片机·嵌入式硬件
嵌入式-老费10 小时前
Linux camera驱动开发(camera和飞控的结合)
驱动开发
一路往蓝-Anbo1 天前
第 10 章:OpenAMP 实战——构建 M33 与 Linux 的 RPMsg 消息隧道
linux·运维·服务器·驱动开发·stm32·单片机·嵌入式硬件
『往事』&白驹过隙;1 天前
瑞芯微(RK平台)调试指令常用整理
linux·arm开发·驱动开发
哈哈浩丶2 天前
安卓系统全流程启动
android·linux·驱动开发
哈哈浩丶3 天前
ATF (ARM Trusted Firmware) -2:完整启动流程(冷启动)
android·linux·arm开发·驱动开发
哈哈浩丶3 天前
OP-TEE-OS:综述
android·linux·驱动开发
哈哈浩丶3 天前
ATF (ARM Trusted Firmware) -1:综述
linux·arm开发·驱动开发