1框架总体设计从输入设备框架的需求可知,内核的整个输入流程应该分为下层的各种输入设备和上层与用户的控制信息交互两个方面。从图6-1可见,输入设备系统框架的核心部分从底到上分为input driver,input core和event handler三个部分。应用层则要根据输入设备的事件进行相应的操作,为了给应用层统一的接口,输入设备框架对于输入事件进行了规范。......
2023-11-22
1ᤫ等待队列wait queue
用户对数据的访问有同步和异步两种方式,用户同步的访问在内核中通常并不是直接执行的,而是需要在另外的上下文执行。这就需要内核针对这种同步操作提供相应的服务,通常的方式就是用户的上下文进行等待,等到操作完毕再进行唤醒,这种等待和唤醒都需要在驱动内部执行,只是驱动在不同的上下文执行罢了。内核针对这种情况提供的同步操作服务就是等待队列wait_queue。
等待队列框图如图5-35所示。
图5-35 等待队列框图
从图5-35可见,wait_queue_head_t为等待队列的头。如果需要等待相应的task则会通过wait_queue_t加入到等待队列中。相应的操作围绕着wait_queue_head_t、wait_queue_t和task来完成。下面介绍主要的接口。
定义和初始化等待队列头:
定义并初始化等待队列项:
添加/移除等待队列项:
(www.chuimin.cn)
等待事件:
唤醒队列:
下面是驱动中将任务加入等待队列的基本流程:
其中会包括必要的数据保护操作以及设备状态的检查。这样希望同步操作的任务就可以等待相关操作的完成了。在驱动操作完成的回调中,通过等待队列的唤醒队列的接口,唤醒相关的上下文继续执行,使得schedule返回,继续进行后续的操作,这样就完成同步服务了。
2ᤫ完成量completion
除了针对应用task的同步操作服务外,内核经常会有任务需要同步,比如初始化时某个任务需要等待另外任务的一个操作完成等。这只是两个任务之间简单的同步,使用等待队列显得大材小用了,因此内核提供完成量completion来进行这种类型的操作。相关接口如下:
从接口可见,完成量十分简洁,非常适合两个任务之间的同步服务。
有关深入剖析Linux内核与设备驱动的文章
1框架总体设计从输入设备框架的需求可知,内核的整个输入流程应该分为下层的各种输入设备和上层与用户的控制信息交互两个方面。从图6-1可见,输入设备系统框架的核心部分从底到上分为input driver,input core和event handler三个部分。应用层则要根据输入设备的事件进行相应的操作,为了给应用层统一的接口,输入设备框架对于输入事件进行了规范。......
2023-11-22
I2C总线框架主要就是对这两类设备及操作进行管理,整体的框架如图7-3所示。由图7-3可见,I2C核心管理的实体就是i2c_client、i2c_adapter与总线设备相关的驱动i2c_driver。通过标准的I2C操作可以模拟smbus操作,I2C总线框架提供函数i2c_sm-bus_xfer_emulated来模拟相应的操作。......
2023-11-22
内核初始化的主要任务则是加载并执行应用空间的初始化程序,由系统应用接管系统完成特定的功能,而Linux内核则开始为应用提供良好的服务。Linux内核初始化框架如图4-3所示。图4-3Linux内核初始化框架图4-3展示了Linux内核的初始化的基本流程,首先是与体系结构相关的head.o部分,然后跳入体系结构无关的代码start_ kernel,开始内核后续的初始化处理。......
2023-11-22
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2023-11-22
从图5-38可见,Linux内核根据需要在不同的处理器上创建执行实体线程,来执行具体的work,这些work都是动态添加的。整个work queue的管理实体是work queue_struct,其中可以包含多个线程,分别执行相应的延时工作。这样,内核线程的主要功能和接口就进行了介绍,内核线程主要提供执行实体的创建和管理服务,具体的业务细节要由具体的模块提供操作接口执行。......
2023-11-22
整体的frame buffer框架如图6-5所示。了解frame buffer的框架还要先从为用户提供的接口开始。图6-7可变参数中硬件信息的含义固定信息是在frame buffer的操作过程中并不发生变化的。从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。......
2023-11-22
首先来看看MMC子系统的初始化mmc_init。MMC整体框架如图7-10所示。MMC总线整体框架主要实现了这些功能。MMC设备的管理框架提供了相应的创建和注册接口。......
2023-11-22
首先Linux内核需要支持各种处理器,也就是要支持各种体系结构。Linux内核也是如此实现的,如图3-15所示。图3-15Linux内核体系结构相关代码目录接下来就要在编译系统中解决相应的问题。图3-16Linux内核体系结构无关具体实现从图3-16中可见,体系结构相关的主要部分是中断、任务切换、寄存器、系统调用以及系统初始化。......
2023-11-22
相关推荐