} 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 ...
② platform device:基于底层的device,抽象出platform device,用于描述设备 ③ platform bus:基于底层的bus总线,抽象出一条虚拟的platform bus总线,用于挂载platform设备 2.2 platform驱动、设备注册 platform的驱动、设备分别使用platform_driver_register和platform_device_register函数向上注册,注册好的driver和device分别被挂...
示例代码34.2.2.5platform驱动框架/* 设备结构体 */1structxxx_dev{2structcdevcdev;3/* 设备结构体其他具体内容 */4};56structxxx_devxxxdev;/* 定义个设备结构体变量 */78staticintxxx_open(structinode*inode,structfile*filp)9{10/* 函数具体内容 */11return0;12}1314staticssize_txxx_write(structfile...
static int __init mx1_camera_probe(struct platform_device *pdev) { // ... res = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq = platform_get_irq(pdev, 0); if (!res || (int)irq <= 0) { err = -ENODEV; goto exit; } clk = clk_get(&pdev->dev, "csi_clk"); if...
uboot将.dts文件里的描述解析出来, 再对相应寄存器赋值, 在linux启动后, 使用 platform_get_resource() 即可获取到这些给定的资源, 在驱动里使用。 例如一个在.dts文件中关于gpio资源的描述: gpio: gpio-controller@1070000000800 { #gpio-cells = <2>; ...
设备树中的每一个节点,在内核里都有一个 device_node;你可以使用device_node去找到对应的platform_device。 2.2.2 platform_get_resource 这个函数跟设备树没什么关系 , 但是设备树中的节点被转换为platform_device后,设备树中的reg 属性、interrupts 属性也会被转换为“resource”。
2、platform设备 struct platform_device { const char * name; int id; struct device dev; u32 num_resources; struct resource * resource; conststructplatform_device_id*id_entry;/* MFD cell pointer */structmfd_cell*mfd_cell;/* arch specific additions */structpdev_archdataarchdata; ...
而在platform_driver中,可以使用platform_get_resource方法进行资源的获取。其函数原型如下 struct resource*platform_get_resource(struct platform_device*dev,unsigned int type,unsigned int index); dev:指向platform_device结构的指针,表示平台设备。 type:资源的类型,如IORESOURCE_MEM ...
static struct platform_device leddevice = { .name = "imx6ul-led", .id = -1, .dev = { .release = &led_release, }, .num_resources = ARRAY_SIZE(led_resources), .resource = led_resources, }; /* 设备模块加载 */ static int __init leddevice_init(void) { ...
r-start:-ENXIO;EXPORT_SYMBOL_GPL(platform_get_irq);DDDDDDODDDDDfplatform_get_irq()D会返回一个start,D即可用的中断号。之后便可使用request_irq()来注册中断服务函数。再比如想要获取IO内存资源:structDresourceD*res_m 4、emD=Dplatform_getesource(pdev,DIORESOURCE_MEM,D0);即可得到一个IO内存资源节点...