IORESOURCE_IO 指的是IO地址空间,这个空间从kernel编程上来看,只能通过专门的接口函数才能访问.硬件层面上,cpu需要用特殊指令才能访问或需要用特殊访问方式才能访问,不能直接用指针来寻址.在PC机上,其指的就是PCI/CPU IO address space.在嵌入式中,基本上没有io address space. 2、IORESOURCE_MEM 指的是属于外设或...
在Linux里面用了几个宏来定义资源 在嵌入式中,基本上没有IO地址空间,所以通常使用IORESOURCE_MEM。代码中是这样定义的。 我们把宏一层层展开,就得到下面这样子: 可以看到,IORESOURCE_MEM这个宏最终是帮我们填充了resource结构体。可以看到,是把所有相关的寄存器的数据给放进去了。具体是怎么填充的,大家只要像我上面那...
{ request_mem_region() //向iomem_reserouce中注册资源。并检查此资源是否被别人使用。 resource = platform_get_resource(pdev, IORESOURCE_MEM, 0); //从plateform设备中得到IO资源 uport->membase = ioremap(uport->mapbase, //使用ioremap再进行映射。 resource_size(resource)); }...
dev:指向platform_device结构的指针,表示平台设备。 type:资源的类型,如IORESOURCE_MEM index:资源的索引 我们在上一个代码中进行修改,添加资源。代码如下 platform_device代码 static struct resource test_resources[]={[0]={.start=100,.end=105,.name="IRQ",.flags=IORESOURCE_IRQ,},};static struct platform...
内核代码中充斥着大量的__iomem修饰的void类型的指针,像下面这样: void __iomem *devm_ioremap_resource(struct device *dev, const struct resource *res) { resource_size_t size; void __iomem *dest_ptr; char *pretty_name; BUG_ON(!dev); if (!res || resource_type(res) != IORESOURCE_MEM) ...
unsigned long flags; /*资源标志位,一般表示资源类型,可选的资源标志定义在文件 include/linux/ioport.h,如IORESOURCE_BITS、IORESOURCE_MEM、IORESOURCE_IRQ等 */ struct resource *parent, *sibling, *child; }; flags用于表示资源类型,可以包括以下资源类型: ...
对于设备树节点中的reg 属性,它对应IORESOURCE_MEM 类型的资源; 对于设备树节点中的interrupts 属性,它对应IORESOURCE_IRQ 类型的资源。 2.3 有些节点不会生成 platform_device,怎么访问它们 内核会把 dtb 文件解析出一系列的device_node 结构体,我们可以直接访问这些device_node。
structresource{resource_size_tstart;// 资源开始值resource_size_tend;// 资源结束值constchar*name;unsignedlongflags;// 资源类型, 值可为 IORESOURCE_IO/IORESOURCE_MEM/IORESOURCE_IRQ/IORESOURCE_DMAunsignedlongdesc;structresource*parent, *sibling, *child;}; ...
.name = "PCI mem", .start = 0, .end = -1, .flags = IORESOURCE_MEM, }; 正如我之前提到的,request_regions它用于注册I / O端口区域,并且该宏在内核中的许多地方都使用。例如,让我们看一下drivers/char/rtc.c。此源代码文件在linux内核中提供了...
staticstruct resource gitchat_resource[]={{.start=0x20100000,.end=0x20100000+1,.flags=IORESOURCE_MEM….start=IRQ_PFIRQ_PF15,.end=IRQ_PFIRQ_PF15,.flags=IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHEDGE}};staticstruct platform_device gitchat_device={.name name="gitchat",.id=0,.num_resources num_resou...