} 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分别被挂...
首先使用 platform_get_resource函数获取资源, 然后使用 ioremap函数执行地址映射; 现在有了设备树,可以直接使用of_iomap函数同时进行资源获取和地址映射。以下是of_iomap函数定义: void __iomem *of_iomap(struct device_node *np, int index) { struct resource res; if (of_address_to_resource(np, index, &r...
◼platform_device中含有resource 数组, 它来自device_node的reg, interrupts 属性; ◼platform_device.dev.of_node指向device_node, 可以通过它获得其他属性 1.4platform_device 如何与 platform_driver 配对 从设备树转换得来的platform_device会被注册进内核里,以后当我们每注册一个platform_driver时,它们就会两两确...
用platform 1.平台设备 (1)描述 struct platform_device { const char * name;//设备名字 int id; //设备编号 ; ; * resource;//设备资源 *id_entry; /* arch specific additions */ ; }; (2)分配 struct platform_device *platform_device_alloc(const char *name, unsigned int id) ...
platform_device结构体 第2行,name表示设备名字,要和所使用的platform驱动的name字段相同,否则的话设备就无法匹配到对应的驱动。比如对应的platform驱动的name字段为“xxx-gpio”,那么此name字段也要设置为“xxx-gpio”。 第7行,num_resources表示资源数量,一般为第8行resource资源的大小。
uboot将.dts文件里的描述解析出来, 再对相应寄存器赋值, 在linux启动后, 使用 platform_get_resource() 即可获取到这些给定的资源, 在驱动里使用。 例如一个在.dts文件中关于gpio资源的描述: gpio: gpio-controller@1070000000800 { #gpio-cells = <2>; ...
而在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 ...
dev: Linux设备模型中的device结构体,linux内核大量使用了面向对象思想,platform_device通过继承该结构体可复用它的相关代码,方便内核管理平台设备; num_resources: 记录资源的个数,当结构体成员resource存放的是数组时,需要记录resource数组的个数,内核提供了宏定义ARRAY_SIZE用于计算数组的个数; resource: 平台设备提供...
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) { ...