linux下pcie设备驱动
2017-07-18 21:59
871 查看
PCIE设备驱动与Platform设备驱动的对比学习
1、驱动模块结构
1) PCIE设备注册:module_pci_driver(xxxx_driver);
展开之后对应于
module_init(xxxx_driver)---->pci_register_drive(xxxx_driver)
module_exit(xxxx_driver)---->pci_unregister_drive(xxxx_driver)
因此也可以采用自己编写module_init(),module_exit()方式使用。
2) Platform设备注册:module_platform_driver(gpio_led_driver);
2、设备驱动结构体
1)pcie设备
static struct pci_driver xxxx_driver = {
.name
= xxx, //名称
.id_table
= xxxx_table, //匹配的设备列表
.probe
= xxxx_probe,
.remove
= xxxx_remove,
....
};
2)Platform设备
static struct platform_driver
xxxx_driver = {
.probe
= xxxx_probe,
.remove
= xxxx_remove,
.driver
= {
.name
= "xxxx",
.of_match_table = of_xxxx_match,
//一般与设备树中的设备匹配
},
};
3、匹配设备表
1) pcie设备
static const struct
pci_device_id xxxx_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID, 0xnnnn) },
//内容为设备的号、厂商号,用于判别设备,与总线上扫描到的设备匹配
{ }
};
MODULE_DEVICE_TABLE(pci, xxxx_table);
2)Platform设备
static const struct of_device_id of_gpio_leds_match[] = {
{
.compatible = "gpio-leds", },
//主要用于和设备树进行匹配
{},
};
MODULE_DEVICE_TABLE(of, of_gpio_leds_match);
4、Probe函数
1) pcie设备
static int
xxxx_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
//pcie设备id:厂商号、设备号、类等信息
2)Platform设备
static
int xxxx_probe(struct platform_device *pdev)
总结:
pcie设备驱动是注册在pcie总线的,对应的设备是通过pcie总线控制器管理,因此其设备与驱动的匹配方式与platform总线上不同;同样USB总线、I2C总线等与pcie总线相似,由总线负责匹配、驱动管理等工作。
1、驱动模块结构
1) PCIE设备注册:module_pci_driver(xxxx_driver);
展开之后对应于
module_init(xxxx_driver)---->pci_register_drive(xxxx_driver)
module_exit(xxxx_driver)---->pci_unregister_drive(xxxx_driver)
因此也可以采用自己编写module_init(),module_exit()方式使用。
2) Platform设备注册:module_platform_driver(gpio_led_driver);
2、设备驱动结构体
1)pcie设备
static struct pci_driver xxxx_driver = {
.name
= xxx, //名称
.id_table
= xxxx_table, //匹配的设备列表
.probe
= xxxx_probe,
.remove
= xxxx_remove,
....
};
2)Platform设备
static struct platform_driver
xxxx_driver = {
.probe
= xxxx_probe,
.remove
= xxxx_remove,
.driver
= {
.name
= "xxxx",
.of_match_table = of_xxxx_match,
//一般与设备树中的设备匹配
},
};
3、匹配设备表
1) pcie设备
static const struct
pci_device_id xxxx_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID, 0xnnnn) },
//内容为设备的号、厂商号,用于判别设备,与总线上扫描到的设备匹配
{ }
};
MODULE_DEVICE_TABLE(pci, xxxx_table);
2)Platform设备
static const struct of_device_id of_gpio_leds_match[] = {
{
.compatible = "gpio-leds", },
//主要用于和设备树进行匹配
{},
};
MODULE_DEVICE_TABLE(of, of_gpio_leds_match);
4、Probe函数
1) pcie设备
static int
xxxx_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
//pcie设备id:厂商号、设备号、类等信息
2)Platform设备
static
int xxxx_probe(struct platform_device *pdev)
总结:
pcie设备驱动是注册在pcie总线的,对应的设备是通过pcie总线控制器管理,因此其设备与驱动的匹配方式与platform总线上不同;同样USB总线、I2C总线等与pcie总线相似,由总线负责匹配、驱动管理等工作。
相关文章推荐
- Linux设备模型之tty驱动架构分析
- linux 字符设备驱动的验证程序(openplatform/android/externl/chr_dev/)
- Linux那些事儿之我是U盘(8)总线,设备,和驱动(上)
- 编写Linux网络设备驱动(上)
- Linux 字符设备驱动简单总结
- Linux字符设备驱动解析
- linux 3.18 -- iic,input,misc,三轴加速度设备驱动(一)
- linux字符设备驱动-重新学习-笔记-2
- Linux网络设备驱动概述-(dm9000-1)
- 【嵌入式Linux驱动开发】三、字符设备驱动(一)
- linux设备驱动归纳总结(三):3面向对象思想和lseek
- linux设备驱动归纳总结(八):2.match.probe.remove
- linux设备模型之uart驱动架构分析
- Linux混杂设备驱动 - 按键设备驱动
- Linux那些事儿之我是Block层(2)注册一个块设备驱动
- linux驱动---字符设备的注册register_chrdev说起
- Linux驱动开发———混杂设备驱动模型
- Linux下读写FLASH驱动——MTD设备分析
- Linux下读写FLASH驱动——MTD设备分析
- Linux 设备驱动开发 —— platform设备驱动应用实例解析