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 ==...
这些资源在driver的probe函数中通过platform_get_resource获取,用于实现硬件的初始化 注:在Linux中,系统资源包括I/O、Memory、Register、IRQ、DMA、Bus等多种类型。这些资源大多具有独占性,不允许多个设备同时使用,因此Linux内核提供了一些API,用于分配、管理这些资源。 当某个设备需要使用某些资源时,只需利用struct resou...
示例代码54.2.3.4platform设备框架1/* 寄存器地址定义*/2#definePERIPH1_REGISTER_BASE(0X20000000)/* 外设1寄存器首地址 */3#definePERIPH2_REGISTER_BASE(0X020E0068)/* 外设2寄存器首地址 */4#defineREGISTER_LENGTH456/* 资源 */7staticstructresourcexxx_resources[]={8[0]={9.start=PERIPH1_REGISTER_BAS...
2.2.2 platform_get_resource 这个函数跟设备树没什么关系 , 但是设备树中的节点被转换为platform_device后,设备树中的reg 属性、interrupts 属性也会被转换为“resource”。 这时,你可以使用这个函数取出这些资源。 函数原型为: /*** platform_get_resource - get a resource for a device* @dev: platform device...
dev: Linux设备模型中的device结构体,linux内核大量使用了面向对象思想,platform_device通过继承该结构体可复用它的相关代码,方便内核管理平台设备; num_resources: 记录资源的个数,当结构体成员resource存放的是数组时,需要记录resource数组的个数,内核提供了宏定义ARRAY_SIZE用于计算数组的个数; resource: 平台设备提供...
EXPORT_SYMBOL_GPL(platform_get_irq); platform_get_irq() 会返回一个start, 即可用的中断号。 之后便可使用request_irq() 来注册中断服务函数。 再比如想要获取IO内存资源: struct resource *res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); ...
/* platform 设备结构体 */ static struct platform_device leddevice = { .name = "imx6ul-led", .id = -1, .dev = { .release = &led_release, }, .num_resources = ARRAY_SIZE(led_resources), .resource = led_resources, }; /* 设备模块加载 */ ...
如何获取设备资源?可通过platform_get_resource(),获得该dev中某种类型(type)的第num个资源。num从0开始计数。 #include<linux/platform_device.h>structresource*platform_get_resource(structplatform_device*dev,unsignedinttype,unsignedintnum); 对于IRQ类型资源,还有一个变体platform_get_irq()。
uboot将.dts文件里的描述解析出来, 再对相应寄存器赋值, 在linux启动后, 使用 platform_get_resource() 即可获取到这些给定的资源, 在驱动里使用。 例如一个在.dts文件中关于gpio资源的描述: gpio: gpio-controller@1070000000800 { #gpio-cells = <2>; ...
实际上是调用了platform_get_resource(dev, IORESOURCE_IRQ, num); 获取设备中platform_data资源:drivers/net/dm9000.c 中的dm9000_probe()函数 2.2.3 platform_driver 的注册 通过platform_driver_register()、platform_driver_unregister()进行platform_driver的注册于注销。