Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228167
  • 博文数量: 93
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 542
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-09 16:59
文章分类

全部博文(93)

文章存档

2016年(27)

2015年(66)

我的朋友

分类: 嵌入式

2015-08-28 16:18:21

    对近两天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) |
给主人留下些什么吧!~~