linux中platform与中断
2016-05-11 17:02
211 查看
学习总结:
在linux2.6中引入platform的概念,包括platform_device与platform_driver结构。每个设备的资源(地址、中断号等)在platform_device中的resource中描述,resource结构在kernel/include/linux/ioport.h定义,resource资源一般都位于/arch/arm/mach-xxx中定义。开发设备驱动时,不但注册platform_device设备,还要注册platform_driver驱动。platform_device与platform_driver结构体中都有name成员,两个结构体的name成员必须匹配。驱动程序注册时找到与其name相同的platform_device后,调用其结构中的probe()函数进行相关初始化,probe()函数通过platform_get_resource()获取platform_device中的resource资源信息。在probe()可以进行字符设备的注册,包括file_optations成员的实现。从resource中可以通过platform_get_irq()获取其中资源的中断号(看具体定义是硬中断号还是软中断号),从而可以调用request
irq()进行中断请求。在linux2.6之后,内核始祖Linus Torvalds发现内核充斥大量板级的垃圾代码而震怒,arm社区于是借鉴PowerPC引入设备树。将板级信息用设备树表示,通过uboot的解析之后传给linux内核。设备树描述了所有的板级信息,由platform_device与resource结构定义的一些实体都不再需要,内核会根据设备树的信息利用函数of_platform_bus_probe自动展开为驱动程序probe()函数的platform_device结构的入参,这样在probe()中就可以用platform_get_resource()获取资源。在进行中断注册时会与原来不同,没用设备树时从resource读出的中断号为软中断号,采用设备树时中断号为硬件中断号,这是需要利用irq_of_parse_and_map()进行动态分配软中断号,再利用request
irq()进行中断请求。
在linux2.6中引入platform的概念,包括platform_device与platform_driver结构。每个设备的资源(地址、中断号等)在platform_device中的resource中描述,resource结构在kernel/include/linux/ioport.h定义,resource资源一般都位于/arch/arm/mach-xxx中定义。开发设备驱动时,不但注册platform_device设备,还要注册platform_driver驱动。platform_device与platform_driver结构体中都有name成员,两个结构体的name成员必须匹配。驱动程序注册时找到与其name相同的platform_device后,调用其结构中的probe()函数进行相关初始化,probe()函数通过platform_get_resource()获取platform_device中的resource资源信息。在probe()可以进行字符设备的注册,包括file_optations成员的实现。从resource中可以通过platform_get_irq()获取其中资源的中断号(看具体定义是硬中断号还是软中断号),从而可以调用request
irq()进行中断请求。在linux2.6之后,内核始祖Linus Torvalds发现内核充斥大量板级的垃圾代码而震怒,arm社区于是借鉴PowerPC引入设备树。将板级信息用设备树表示,通过uboot的解析之后传给linux内核。设备树描述了所有的板级信息,由platform_device与resource结构定义的一些实体都不再需要,内核会根据设备树的信息利用函数of_platform_bus_probe自动展开为驱动程序probe()函数的platform_device结构的入参,这样在probe()中就可以用platform_get_resource()获取资源。在进行中断注册时会与原来不同,没用设备树时从resource读出的中断号为软中断号,采用设备树时中断号为硬件中断号,这是需要利用irq_of_parse_and_map()进行动态分配软中断号,再利用request
irq()进行中断请求。
相关文章推荐
- 释放LINUX CACHEC的 小脚本
- Linux下链接文件的区别——软链接和硬链接
- linux_c学习笔记之curl的使用一
- CentOS6.5 本地源搭建Ceph
- Linux 下函数栈帧分析
- linux “源代码包”和“二进制包”的区别
- CentOS6 中文乱码解决
- 在 Linux 上安装 Git
- RTLinux编程总结
- linux常规命令
- CentOS 下搭建FTP服务器
- Linux更改主机名与设置DNS解析及设置IP
- 将mysql数据库导成sql文件的linux命令
- linux-Centos-7-64位:6、 svn安装及配置
- Linux路径名查找
- Linux查看CPU和内存使用情况
- Linux 调试工具
- Linux inotify监听文件变化机制
- 每天一个linux命令-scp
- 在ubtuntu中使用包管理器 linux-brew