首先来看看MMC子系统的初始化mmc_init。MMC整体框架如图7-10所示。MMC总线整体框架主要实现了这些功能。MMC设备的管理框架提供了相应的创建和注册接口。......
2023-11-22
谈到内核初始化,首先要考虑到处理器的初始化过程。处理器上电后,内存(可以执行代码的设备)还没有初始化、没有处于正常的工作状态,也就不能直接执行代码。对于该问题,各种体系结构都会规定上电重启(通常为power on reset)的情况下,处理器执行第一条指令的地址,而具体的处理器厂商就将可执行代码存放在该地址处,使得处理器上电后能正常运行,通常这部分代码被叫做ROM Code。处理器首先执行ROMCode的代码,处理器中还有一部分存储空间即内部SRAM可以执行代码,但是SRAM通常都比较小,不能放下Linux内核的压缩image,这样就需要有个中间过渡的模块,该模块的主要功能是进行系统加载,叫做boot loader。当然根据具体的情况,boot loader也可以分级,最终boot loader会加载Linux内核的压缩image,并将参数传给Linux内核,跳转到Linux内核中让其自身初始化并执行。这个阶段的流程如图4-1所示。
图4-1 处理器启动流程
图4-1引自《DM 3730芯片手册》中第3524页的流程图,虽然是DM 3730芯片手册中的图,但是该流程广泛适用于各种处理器。
Rom Code通常是由处理器厂商进行开发,而所谓的软件初始化是从boot loader开始的。整个软件系统初始化流程如图4-2所示。
图4-2 系统初始化流程(www.chuimin.cn)
由图4-2可见,boot loader的主要工作包括两部分:其一,进行一些硬件的初始化,如内存以及一些必要设备的初始化;另外,boot loader还要获得Linux内核image并将其复制到内存中。但是注意boot loader能使用的资源比较有限,所以功能比较简单。内核初始化的主要任务则是加载并执行应用空间的初始化程序,由系统应用接管系统完成特定的功能,而Linux内核则开始为应用提供良好的服务。
Linux内核初始化框架如图4-3所示。
图4-3 Linux内核初始化框架
图4-3展示了Linux内核的初始化的基本流程,首先是与体系结构相关的head.o部分,然后跳入体系结构无关的代码start_ kernel(这里已经进入虚拟地址执行),开始内核后续的初始化处理。其中会涉及很多模块的初始化,当然有些模块中包含体系结构相关以及板级相关的初始化操作。最终Linux内核会执行应用系统的初始化进程initprocess,从而真正地转入应用系统中,开始各种各样应用的操作。
有关深入剖析Linux内核与设备驱动的文章
首先来看看MMC子系统的初始化mmc_init。MMC整体框架如图7-10所示。MMC总线整体框架主要实现了这些功能。MMC设备的管理框架提供了相应的创建和注册接口。......
2023-11-22
1框架总体设计从输入设备框架的需求可知,内核的整个输入流程应该分为下层的各种输入设备和上层与用户的控制信息交互两个方面。从图6-1可见,输入设备系统框架的核心部分从底到上分为input driver,input core和event handler三个部分。应用层则要根据输入设备的事件进行相应的操作,为了给应用层统一的接口,输入设备框架对于输入事件进行了规范。......
2023-11-22
整体的frame buffer框架如图6-5所示。了解frame buffer的框架还要先从为用户提供的接口开始。图6-7可变参数中硬件信息的含义固定信息是在frame buffer的操作过程中并不发生变化的。从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。......
2023-11-22
为了满足以上的需求,视频驱动框架分别在不同的层次进行了设计,以实现不同层面的巨大挑战。从中可以一定程度上了解视频驱动的框架。视频驱动框架也考虑到这两种需求,并提供了解决方法。2设备层次管理前面部分主要涉及视频驱动框架中对应用层接口实体的管理,框架还需要提供实际设备的管理层。......
2023-11-22
SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
2GPIO内部管理框架GPIO框架的重要数据结构就是gpio_chip,详细内容如下:系统中可以有多个gpio_chip,而每个gpio_chip管理一组GPIO,其中base表示相应的gpio_chip管理的系统中的起始GPIO号,一共管理ngpio个GPIO。内核将所有的GPIO组成数组,每个GPIO用gpio_desc进行描述,具体的结构如下:其中的chip表示该GPIO由哪个gpio_chip进行管理。其中,flags表示该GPIO是否被请求、输入输出状态等与GPIO功能相关的状态及属性。从整体上来说GPIO框架还是简单直接的。......
2023-11-22
整个系统启动和初始化的过程,Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同,这就要求Linux内核能支持各种处理器的初始化操作。Linux内核各个模块,大部分设计时做到了体系结构无关。Linux内核是一个庞大的系统,最终生成的操作系统代码的执行文件非常大。......
2023-11-22
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2023-11-22
相关推荐