Linux PCI驱动模型
来源:互联网 发布:吉首大学网络管理系统 编辑:程序博客网 时间:2024/05/22 14:17
(1)关键数据结构
A,pci_driver:这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe()和卸载设备的函数remove( )。
B,pci_dev:这个数据结构也在文件include/linux/pci.h里,它详细描述了一个PCI设备几乎所有的硬件信息,包括厂商ID、设备ID、各种资源等。
(2)
static struct pci_device_id demo_pci_tbl [] __initdata = {
};
struct demo_card {
}
static void demo_interrupt(int irq, void *dev_id, struct pt_regs*regs)
{
}
static struct file_operations demo_fops = {
};
static struct pci_driver demo_pci_driver = {
};
static int __init demo_init_module (void)
{
}
static void __exit demo_cleanup_module (void)
{
}
module_init(demo_init_module);
module_exit(demo_cleanup_module);
(3)初始化设备
static int __init demo_init_module (void)
{
}
驱动程序首先调用函数pci_present()检查PCI总线是否已经被Linux内核支持,如果系统支持PCI总线结构,这个函数的返回值为0,如果驱动程序在调用这个函数时得到了一个非0的返回值,那么驱动程序就必须得中止自己的任务了。在2.4以前的内核中,需要手工调用pci_find_device()函数来查找PCI设备,但在2.4以后更好的办法是调用pci_register_driver()函数来注册PCI设备的驱动程序,此时需要提供一个pci_driver结构,在该结构中给出的probe探测例程将负责完成对硬件的检测工作。
static int __init demo_probe(struct pci_dev *pci_dev, conststruct pci_device_id *pci_id)
{
}
(4)打开设备模块
static int demo_open(struct inode *inode, struct file*file)
{
}
(5)数据读写和控制信息模块
static int demo_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg)
{
}
(6)中断处理模块
static void demo_interrupt(int irq, void *dev_id, struct pt_regs*regs)
{
}
(7)释放设备模块
释放设备模块主要负责释放对设备的控制权,释放占用的内存和中断等,所做的事情正好与打开设备模块相反:
static int demo_release(struct inode *inode, struct file*file)
{
}
(8)卸载设备模块
static void __exit demo_cleanup_module (void)
{
}
参考原文:http://www.ibm.com/developerworks/cn/linux/l-pci/index.html
- Linux PCI驱动模型
- Linux PCI驱动模型
- 基于Linux PCI总线驱动模型的网卡驱动分析
- Linux PCI网卡驱动分析(转)
- linux pci网卡驱动
- Linux pci驱动分析
- Linux pci驱动源码
- Linux PCI设备驱动
- Linux Pci 驱动开发
- Linux Pci 驱动开发
- Linux Pci 驱动开发
- linux驱动 pci笔记
- linux驱动子系统--PCI
- linux pci/pcie驱动
- 【转】 linux设备驱动模型之 bus(…
- V4L2 - Linux下视频驱动模型
- V4L2 - Linux下视频驱动模型
- linux下 PCI驱动实现
- 内核编译
- 内核编译
- Linux下PCI设备驱动程序开发
- Linux下PCI设备驱动程序开发
- Linux PCI驱动模型
- Linux PCI驱动模型
- S3C2440上触摸屏驱动实例开发讲解(…
- S3C2440上触摸屏驱动实例开发讲解(…
- Android驱动例子(LED灯控制)(1…
- Android驱动例子(LED灯控制)(1…
- android驱动例子(LED灯控制)
- android驱动例子(LED灯控制)
- 第二章 Android内核和驱动程序(转)
- 第二章 Android内核和驱动程序(转)