首页 理论教育功能型设备介绍-深入剖析Linux内核与设备驱动

功能型设备介绍-深入剖析Linux内核与设备驱动

【摘要】:Linux内核直接开放一些类型的设备给用户使用,这些类型就是功能型设备。可以说Linux内核同样考虑按功能进行设备分类,对应的方式就是为每一类功能的设备分配一个主设备号。在功能层面可以不必考虑像字符设备和块设备这种高层次的抽象,而是应更多地关注功能框架本身。可见Linux内核不仅提供了比较完善的功能设备框架,而且为功能的扩展提供了强大的支持,这些都是为了满足需求的多样性,以适应需求的变化。

这里先介绍功能型设备。讨论到功能,通常都对应到功能需求。Linux内核直接开放一些类型的设备给用户使用,这些类型就是功能型设备。通过系统调用可以使用功能型设备。相应的框架如图3-13所示。

978-7-111-49426-3-Chapter03-15.jpg

图3-13 Linux设备框架

从图3-13中可见,应用之下为一个一个具体的功能块,如framebuffer对应于应用图形界面的功能,V4L(video for Linux)对应于视频的功能。这些功能直接对应于应用的功能需求。还有些特殊的需求可以通过框架来进行扩展,相应的框架就是char设备框架和block设备框架。

Linux内核提供了大部分功能设备的框架,详细的信息可以通过proc文件系统中的devices文件获得。笔者Linux机器上相应文件的信息如下:(www.chuimin.cn)

978-7-111-49426-3-Chapter03-16.jpg

978-7-111-49426-3-Chapter03-17.jpg

978-7-111-49426-3-Chapter03-18.jpg

从相应的信息中可以看到,每种类型前都有一个数字,这个数字代表主设备号。可以说Linux内核同样考虑按功能进行设备分类,对应的方式就是为每一类功能的设备分配一个主设备号。当然Linux为了系统扩展,在功能的基础之上,同时考虑数据处理的特点,进而进行抽象层面的分类,这就是字符设备和块设备,也是更高层面的抽象。在功能层面可以不必考虑像字符设备和块设备这种高层次的抽象,而是应更多地关注功能框架本身。Linux内核为这些主设备提供设备框架,使得驱动开发者的重点是在驱动框架的功能(如input、frame buffer、v4l2和Alsa等),后续章节会对这些功能设备框架进行详细介绍。对于Linux内核没有提供的设备框架,Linux也提供了一定的扩展框架如misc(Android的binder就是通过misc实现),以及为应用层驱动提供的扩展(如usb和usb_device),当然更强大的功能扩展框架就是字符设备本身。可见Linux内核不仅提供了比较完善的功能设备框架,而且为功能的扩展提供了强大的支持,这些都是为了满足需求的多样性,以适应需求的变化。