对近两天Linux驱动学习过程中遇到的一些知识点进行了简短的自我总结,以加深理解。对以前学过的Linux驱动和将来Linux驱动学习过程中遇到的一些知识点还会进行类似的总结
1. platform_get_resource()函数原型为:
struct resource *platform_get_resource(struct platform_device * dev, unsigned int type, unsigned int num);
其中dev为指向platform_device设备的指针,type为资源类型,num为这种资源类型中的第几份资源(从0开始)。
2. platform_get_irq()函数原型为:
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;
}
所以其返回值为资源开始值
3. 在有I/O独立编址的CPU架构中,如x86,外设的寄存器被映射到I/O空间,称为I/O端口;在统一编址的CPU架构中,如arm,外设寄存器被映射到内存空间,称为I/O内存。
访问I/O端口可以直接使用I/O端口函数访问,也可以使用ioport_map()函数将I/O端口“映射”到内存空间,然后像访问内存空间一样访问;访问I/O内存须先使用ioremap()函数将外设寄存器所处的物理地址映射到虚拟地址,然后使用I/O内存函数访问,也可以使用I/O端口函数访问(这时候I/O端口函数本质上就是I/O内存函数,只是进行了不同的封装),当然也可以直接通过指针访问(但这样并不太好)。
阅读(898) | 评论(0) | 转发(0) |