[架构之路-37]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之:内存与IO访问中断定时与延时

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-37]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之:内存与IO访问中断定时与延时相关的知识,希望对你有一定的参考价值。

目录

前言:

第1章 内存与IO访问机制

1.1 用户空间与内核空间

1.2 虚拟地址与物理地址

1.3 用户空间虚拟地址申请malloc

1.4 insert ko

1.5 内核虚拟地址空间申请:vmalloc

1.6 内核物理地址空间申请

1.7 IO设备内存映射

1.8 DMA映射​编辑

第2章 中断机制

2.1 什么是中断

2.2 多核ARM CPU的中断架构

2.3 Linux的中断机制

2.4 底半部机制

2.5 中断的共享机制:线与

第3章 定时与延时机制

3.1 内核延时机制

3.2 内核定时机制


前言:

Linux驱动程序员,要熟悉Linux的硬件驱动,必须关注两个大的框架:一、Linux内含的六大分离的思想与主要的驱动程序框架;二、驱动程序六大工作机制。只有掌握了这两大机制,才算真正的掌握了Linux的内核驱动程序。

第1章 内存与IO访问机制

1.1 用户空间与内核空间

备注:要实现用户空间与内核空间的拷贝。

1.2 虚拟地址与物理地址

备注:用户空间和内核空间,共享相同的物理内存。

物理内存包括:RAM和硬件设备、CPU内部寄存器等。

 

(1)用户空间程序可以直接访问0-3G的逻辑内存地址,然后经过内存管理单元MMU,映射到物理地址。

(2)用户空间程序可以通过系统调用,进入内核空间的3G-4G逻辑内存地址,然后经过内存管理单元MMU,映射到物理地址。

(3)用户空间程序可以通过MMAP,把物理地址映射到逻辑地址,然后通过逻辑地址访问物理地址。

(4)内核驱动程序直接访问3G-4G的逻辑内存地址,然后经过内存管理单元MMU,映射到物理地址。

1.3 用户空间虚拟地址申请malloc

1.4 insert ko

1.5 内核虚拟地址空间申请:vmalloc

1.6 内核物理地址空间申请

1.7 IO设备内存映射

 

 

 

1.8 DMA映射

第2章 中断机制

2.1 什么是中断

 

中断的优先级,由高到底如下:

(1)顶半部:中断服务程序,属于硬中断的上下文,如关闭中断等。

(2)底半部:通过软中断处理中断事件,属于软中断的上下文,如数据的接收。

(3)内核空间的软中断。

(4)内核空间定时器的中断。

(5)内核空间signal信号的中断(内核进程上下文)。

(6)用户定义的定时中断(内核进程上下文)。

软中断:

软中断,顾名思义,就是有软件产生的“中断”,它能够中断内核线程的执行,转而让CPU执行软中断号对应的中断服务程序。软中断的优先级没有硬件终端的优先级高,因此,它无法打断硬件中断服务程序的执行,但软中断服务程序的执行可以被硬件中断服务程序打断。 

软中断的一种典型应用就是所谓的"下半部"(bottom half),它的得名来自于将硬件中断处理分离成"上半部"和"下半部"两个阶段的机制:上半部在屏蔽中断的上下文中运行,用于完成关键性的处理动作;而下半部则相对来说并不是非常紧急的,通常还是比较耗时的,因此由系统自行安排运行时机,不在中断服务上下文中执行。bottom half的应用也是激励内核发展出的软中断机制的原因。

软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"。一般来说,软中断是由内核机制的触发事件引起的。

2.2 多核ARM CPU的中断架构

(1)每个CPU core有自己独立的中断号:0~31

(2)所有CPU core共享的中断向量号:32~1019

2.3 Linux的中断机制

(1)中断向量表:存放中断号与中断服务程序之间的映射关系的表格

(2)中断服务程序=顶半部分:中断发生后,需要紧急处理的逻辑,如数据的接收,属于硬中断上下文。

(3)底半部:中断发生后,不需要紧急处理,但需要在内核空间处理的逻辑,如数据处理,属于软中断上下文。是否需要添加后处理,以及添加什么样的后处理函数,由中断服务程序实现。

2.4 底半部机制

对于底半部:内核提供了多种机制来处理中断的底半部机制,来实现数据的后半部处理。不同的机制,后半部的处理能够打断其他程序的优先级是不同的,同时被其他程序打断的优先级也不相同。

所有的底半部都有相应的队列机制。

(1)软中断:Tasklet机制,是所有底半部机制中优先级最高的机制。

(2)软中断:softirq机制。

(3)内核进程上下文:work工作队列机制。

(4)内核进程上下文:中断线程机制,属于内核线程,执行的优先级比普通的内核线程的优先级要高。

备注:

(1)open_softirq(sw_irq,xxx_bh_handler):挂接软中断的服务程序。

(2)raise_softirq(sw_irq):产生一个软中断,触发软中断服务程序的执行。

2.5 中断的共享机制:线与

(1)多个中断共享相同的中断服务程序

(2)通过状态寄存器区分不同的中断

(3)大部分硬件设备都是采用的这种机制 

第3章 定时与延时机制

3.1 内核延时机制

3.2 内核定时机制

以上是关于[架构之路-37]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之:内存与IO访问中断定时与延时的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-11]:目标系统 - 架构 - 嵌入式系统软件+硬件的基本通用架构

[架构之路-56]:目标系统 - 平台软件 - 总体架构概述

[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程

[架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程

[架构之路-21]:目标系统 - 系统软件 - 计算机系统架构计算机指令系统结构化程序与分层编程。

[架构之路-29]:目标系统 - 系统软件 - Linux OS内核以及内核驱动的调试技术