为了使这部分设备的驱动开发也能够遵循设备驱动模型,Linux内核引入了一种虚拟的总线——平台总线(platform bus)。平台总线用于管理、挂载那些没有相应物理总线的设备,这些设备被称为平台设备,对应的设备驱动则被称为平台驱动。平台设备驱动的核心依然是Linux设备驱动模型,平台设备使用platform_device结构体来进行表示,其...
addr = platform_get_resource(pdev, IORESOURCE_MEM,2);if(!addr){ printk(KERN_INFO"No 2 resource\n"); } irq = platform_get_irq(pdev, 0);if(0> irq){returnirq; }else{ printk(KERN_INFO"irq 0: %d \n", irq); } irq = platform_get_irq(pdev, 1);if(0> irq){returnirq; }els...
int platform_get_irq(struct platform_device *dev, unsigned int num) { struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num); return r ? r->start : -ENXIO; } 一开始想不通为什么是返回第num(从0开始计数)个flag为IORESOURCE_IRQ类型的resource结构体的指针,之后发现 if (type ==...
2.2.3 获取中断资源 这里获取中断资源主要是获取中断号,通过 platform_get_irq 函数来实现 padc->irq_num = platform_get_irq(pdev, 0); if(padc->irq_num < 0){ printk("Fail to platform_get_irq\n"); ret = padc->irq_num; goto err_platform_get_irq; } 2.2.4 获取 IO 内存资源 这里获...
#include<linux/platform_device.h>intplatform_get_irq(structplatform_device*dev,unsignedintnum); 例,在arch/arm/mach-at91/board-sam9261ek.c板文件中,为DM9000网卡定义了如下resource: staticstructresourcedm9000_resource[]={[0]={.start=AT91_CHIPSELECT_2,.end=AT91_CHIPSELECT_2+3,.flags=IORESOURCE_...
Linux内核中可使用platform_get_irq()函数获取dts文件中设置的中断号。 函数原型:int platform_get_irq(struct platform_device *dev, unsigned int num) 定义文件:drivers\base\platform.c 一、调用流程 中断号获取函数platform_get_irq()调用流程如下:
如何填充platform_driver对象? 如何将驱动方法对象注册到平台总线中? 正文前的一点罗嗦 写驱动也有一段时间了,可以发现,其实驱动本质上只做了两件事:向上提供接口,向下控制硬件,当然,这里的向上并不是直接提供接口到应用层,而是提供接口给内核再由内核间接的将我们的接口提供给应用层。而写驱动也是有一些套路可寻的...
unsigned long flags; //定义资源的类型,比如MEM,IO,IRQ,DMA类型 struct resource *parent, *sibling, *child; //资源链表指针 }; 通过调用函数platform_add_devices()向系统中添加该设备了,该函数内部调用platform_device_register( )进行设备注册。要注意的是,这里的platform_device设备的注册过程必须在相应设备驱...
驱动中通常会使用platform_get_irq或irq_of_parse_and_map接口,去根据设备树的信息去创建映射关系(硬件中断号到linux irq中断号映射); 《Linux中断子系统(一)-中断控制器及驱动分析》提到过struct irq_domain用于完成映射工作,因此在irq_create_fwspec_mapping接口中,会先去找到匹配的irq domain,再去回调该irq domai...
, NULL, PLPS_NAME); if (IS_ERR(plpsirqdevice)) { return PTR_ERR(plirq.device); } /* 5、初始IO */ plpsirq.irq = platform_get_irq(dev,0); printk"num %d !\r\n", plpsirq.irq) plpsirq.irq_plpsdesc.handler = plpshandler; ret = devm_request_irq(plpsirq.device...