1.第一步,我们看一下什么情况下platform_get_resource函才会返回NULL,也就是没有获取到资源。 platform_get_resource函数定又在drivers/base/platform.c中 struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num) { int i; for (i = 0; i < dev->num...
buttons_irq = platform_get_resource(pdev,IORESOURCE_IRQ,0); 在拿出第一份资源进行resource_type(r)判断资源类型时不符合(此时num-- == 0这句没有执行),进而拿出第二份资源,此时i=1,num_resources=7,num传递下来为0,资源类型判断时候匹配,num也等于0,从而确定资源并返回。 For第二次循环: buttons_irq ...
.resource = foo_resource, .num_resources = ARRAY_SIZE(foo_resource), .dev = { .dma_mask = 0x0, .coherent_dma_mask = 0xffffffff, }, }; 那么将这个device_foo加入map100_devices数组,就能直接在probe函数中用platform_get_resource获取资源了,但是要注意驱动的名称必须和platform_device结构中的名称...
struct int platform_get_irq(struct platform_device *dev, unsigned int num); 获取资源中的中断号。 struct resource * platform_get_resource_byname(struct platform_device *dev, unsigned int type, char *name); 根据参数name所指定的名称,来获取指定的资源。 int platform_get_irq_byname(struct platform_...
irq = platform_get_irq(pdev,0);if(irq <0)return-ENODEV; res =platform_get_resource(pdev, IORESOURCE_MEM,0);if(!res)return-ENODEV; hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));if(!hcd)return-ENOMEM;
return r; } return NULL; } summary point: 1. 从该函数的定义可以看出 num 参数是同一种类型资源下的资源索引,因为 if (type == resource_type(r) && num-- == 0) 这条判断语句的执行是先执行 && 前面的类型判断,然后才执行索引判断。
这次分析主要的疑惑是platform_get_resource函数中num这个输入变量的作用,还是一个就是if语句中”&&”的执行顺序。这个可能算是C语言记住了,但是我也是在这次才真正注意了一下。在位于drivers/net/dm9000.c中的dm9000_probe函数内添加了提示性打印语句。/* sol_add */ printk("\n!!!\n"); db->addr_...
UVM response_handler和get_response机制 很多UVM用户平时更多的使用get_response()方式去获得uvm_driver的response,但get_response有些缺点 2023-05-23 16:56:35 VL53L0X_get_info_from_device()中收到超时错误 我修改了platform.h和platform.c以在Raspberry Pi上运行。 i2c-tools显示我可以读取设备,例程VL53L...
设备树中的节点被转换为platform_device后,设备树中的reg属性、interrupts属性也会被转换为“resource”。这时,你可以使用这个函数取出这些资源。 platform_get_resource 函数源码如下: 新内核实现 目录:v4.19/drivers/base/platform.c /** * platform_get_resource - get a resource for a device * @dev: ...