图1-3引自TI的《DM 3730芯片手册》中第136页框图,为了方便读者在芯片手册中查找相关的内容,会在引用芯片手册框图时说明其所在的页码。各种不同类型的数据连接接口其设计思想以及功能是不同的,例如I2C通常用于设备的控制,McBSP用于音频数据的传输等。图1-3基于DM 3730的设备框图为什么要有这么多连接方式呢?......
2025-09-30
通常的分类方式是将设备分为字符设备、块设备和网络设备。这种分类方式在Linux内核的层次分析中已经讨论过,三种设备面向完全不同的三种应用,并且它们的数据组织形式以及数据特点还是有着明显的差别的。字符设备的数据可以认为是流式时变的;块设备的数据是以块为数据单元的;网络设备的数据组织形式是和数据链路层的数据组织相关的。这样的分类方式只是在高级抽象层中对主设备相关的分类,对具体的设备究竟如何划分并没有涉及。
谈到设备分类,还会想到Linux内核中的drivers目录,drivers目录下的子目录本身就是对设备驱动的分类。图3-10是2.6.37 Linux内核drivers目录下的子目录,目录中可以看到抽象的设备(如char、block),也可以看到具体的设备(如media、rtc等),有些是和设备以及电源管理框架相关(如base、power、cpuidle、cpufreq、thermal等),还有基于代码维护考虑创建的目录(如staging该目录下的驱动还没有确认合并进代码主干)。看到这么多子目录并不清楚drivers目录下的驱动究竟是以什么原则进行子目录的设计,究竟应该如何将设备进行分类。由于Linux内核中drivers目录下子目录设置有代码管理的原因,每个子目录都对应着Linux内核的一个project。由于Linux内核是分布式开发的,通过porject进行目录的定义对代码管理来说是比较好的方式。随着Linux内核的发展,目录也在不断地增加,有时也会对目录进行整理移动,比如音频相关的框架和驱动就移动到内核的根目录下的sound
图3-10 2.6.37 Linux内核drivers目录子目录
目录中。
还有一种设备分类,就是看看内核自己是怎么分的。这就要看看内核开放给我们的接口sys文件系统。新的Linux内核在提供信息方面已经做得比较完善,相应的设备信息可以通过sys文件系统一探究竟。下面是sys/class中的信息。
从中可以发现,sys/class的信息很多和drivers目录下的信息相似,而且信息量更大,细节更多。比如scsi就有四个相关的条目,spi也有三个相关的条目。这是由于总线中会有多种类型设备来保证设备互连。其他部分有些是横切功能(如dma、gpio等),有些是用户接口功能(如sound、graphic等),总之是包含所有类型的信息。(https://www.chuimin.cn)
讨论过数据操作形式的设备分类、驱动目录的分类以及sys文件系统分类等方法后,读者对实际设备如何工作、驱动如何实现仍然十分模糊,而且对实际设备的实现层次没有清晰的认识。这里首先来看看PC上的硬件层次。PC上的硬件层次如图3-11所示。
图3-11 硬件层次图
以图中Webcam为例,硬件上从CPU到Webcam经过了PCI总线和USB总线,然后才连接Webcam,这样硬件实际就是Webcam、USB、PCI三层。硬件上有了层次的概念,同样的在驱动框架中也应该有对应的层次概念。驱动的层次如图3-12所示。图3-12中圈起来的部分是实现Webcam功能相关的模块,video_device是Webcam视频功能的驱动框架,uvc_driver则是Webcam的具体实现驱动,相应的usb_driver就是硬件层中USB的具体实现。这里有个问题,为什么没有PCI呢?PCI如何体现呢?驱动软件中已经将PCI封装到具体的USB总线实现中,毕竟USB设备本身并不关心其所在的PCI总线的实现细节,通过USB的实现屏蔽PCI的细节,可以让开发者只关注直接关联的接口实现,降低实现的复杂度。对硬件的层次关系与驱动的层次关系进行比较可以发现,硬件的层次关系是站在从设备互联的角度从处理器到功能设备,而软件驱动的层次角度是从功能到设备互联,刚好是反向过程。这样从硬件的层次需求出发来理解设备驱动会更清晰、更明确。
图3-12 驱动层次
看过Webcam的例子后,再重新考虑设备分类的问题,硬件通过各种总线实现层次扩展。那么按照这种层次的需要进行设备分类,一定会有全新的视角。再考虑Webcam软件驱动的层次,首先是功能的抽象,然后是设备连接的抽象,这正好符合设备的两个基本需求———功能和互联。设备分类完全可以从这两个层次需求的角度考虑。
相关文章
图1-3引自TI的《DM 3730芯片手册》中第136页框图,为了方便读者在芯片手册中查找相关的内容,会在引用芯片手册框图时说明其所在的页码。各种不同类型的数据连接接口其设计思想以及功能是不同的,例如I2C通常用于设备的控制,McBSP用于音频数据的传输等。图1-3基于DM 3730的设备框图为什么要有这么多连接方式呢?......
2025-09-30
对硬件有了基本的了解,就可以从硬件出发考虑内核应该满足的需求了。当然电源管理的需求会涉及以上各种设备、总线和接口。另外内核不能只是支持特定的处理器,需要支持各种类型的处理器,学术一点的说法就是要支持各种体系结构。总结下来从设备出发看内核要满足以下需求:●能支持不同的体系结构和处理器。前四项都是比较直接的需求,第五项则是考验开发人员的设计能力,也是内核的各个模块的设计重点以及我们研究的重点。......
2025-09-30
Linux内核作为目前最成功以及发展最快的开源项目之一,在实际应用中取得的巨大成功是举世瞩目的。Linux Foundation于2013年9月发布了《Who Writes Linux》报告,公布了最新的不同组织对Linux内核贡献的情况,见表1-1。表1-1不同组织对Linux内核贡献贡献前30名的公司中半导体厂商就有11家,约占三分之一,如果算上硬件相关的公司会超过20家,贡献总量超过了60%。可见硬件厂商对Linux内核的贡献是很大的,对Linux内核的影响也是巨大的。......
2025-09-30
图3-3Linux内核整体框架③bridges:桥梁层。Linux内核通过统一的接口操作设备,这样就屏蔽了各个设备的差异,从而降低了和硬件的耦合关系。Linux内核为了简化实现,将共享资源的进程作为线程。考虑到外部事件需要对执行流程进行转换,另外不同的应用执行流程之间需要切换,这就要在Linux内核的逻辑层抽象出调度器这一逻辑功能。......
2025-09-30
从图3-2中可以理解Linux内核就是将硬件的功能抽象出来,为用户的应用程序提供各种系统服务。与用户相关的属性是与Linux内核中整体安全性相关的,这部分功能通常和硬件具体功能关系不大,而是附加在逻辑功能之上的属性。本书是以嵌入式系统为基础进行说明,所以将重点放在硬件设备的具体功能以及Linux内核在硬件之上的具体实现方面。Linux内核的整体框架如图3-3所示。图3-3清晰地展现了Linux内核的实现层次,以及应用层功能和硬件功能的对应关系。......
2025-09-30
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2025-09-30
可以看到非常的小,比硬币大不了多少,这个系统只要接上电池就可以运行了。图1-1LogicPD DM 3730 SOM示意图再来看看LogicPD的SOM都有些什么,系统框图如图1-2所示。PoP在一起的芯片分别是主处理器DM 3730和NAND Flash/mDDR SDRAM chip。主处理器和内存是所有系统必需的,关系自然紧密了,这是能PoP的资本。PoP的优势很明显就是使电路板的面积减小了,这个对于手机等对电路板大小要求高的设备来说是非常重要的。图1-2LogicPD DM 3730 SOM系统框图......
2025-09-30
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2025-09-30
相关推荐