在Linux 内核笔记之高层中断处理一文中,介绍了ARM gic中断控制器对于硬中断的处理过程。gic的中断处理程序是从ack一个硬件中断开始的, 在gic的中断处理过程中,会根据中断的映射去寻找对应的虚拟中断号, 再去进行后续的中断处理。gic_handle_irq->handle_domain_irq
OS的正常工作依赖于存储程序原理、堆栈、中断三个部分。 linux内核从一个初始化上下文环境的函数开始执行,即start_kernel函数,创建多个进程或者fork(创建一个与原来进程几乎完全相同的进程)若干进程,我们为每个进程维护一个进程描述和以及进程间的关系PCB。 当中断发生的时候,如mykernel中就是时钟中断发生之后,接下来OS就会为各进程进行调度,利用Swich_to函数在调度队列中选取出一个适合的进程(系统会根据中断向量号来调用相应的中断异常程序)。由CPU和内核堆栈保存当前进程的各寄存器信息(CPU要做两件工作,一是将当前的eip和esp压入到当前进程的内核栈,二是将esp指向当前进程的内核栈,并将eip指向中断处理入口,进入到内核态。),将eip指向要调度的进程执行的代码区,开始执行。
start_kernel是内核启动阶段的入口,通过单步调试,可以发现它是linux内核执行的第一个init,我们单步进入看看它做了哪些操作:
系统调用是应用程序(包含运行库)与操作系统内核的接口,它决定了应用程序如何与内核打交道。在现在的操作系统系统里,程序运行的时候,本身是没有权利访问系统的资源,由于系统有限的资源有可能被不同的应用程序同时访问,因此,如果不加以保护,各个应用程序的冲突在所难免。所以现代操作系统都尽可能的把冲突的资源保护起来,阻止程序直接访问。这些资源,包括文件、网络、IO、各种设备等。
GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。
ARM和FPGA的交互是这个芯片最重要的部分,PL和PS的交互使用中断是较为快捷的方法,本文使用bram存储数据并通过外部pl端发出中断通知ps端读写数据。程序思路是按键产生中断,按键是直接连到pl端的,驱动产生异步通知,应用开始往BRAM写数据,然后再读取数据(阻塞读取),均打印出来比较
最核心的结构体是irq_desc,之前为了易于理解,我们说在Linux内核中有一个中断数组,对于每一个硬件中断,都有一个数组项,这个数组就是irq_desc数组。
转载请标明原址:linux驱动最新面试题(面试题整理,含答案)_不忘初心-CSDN博客_linux驱动面试题
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。 Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。从图中可以看出(这里无法表示图),每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1GB字节虚拟内核空间则为所有进程以及内核所共享。 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。 虽然内核空间占据了每个虚拟空间中的最高1GB字节,但映射到物理内存却总是从最低地址(0x00000000)开始。对内核空间来说,其地址映射是很简单的线性映射,0xC0000000就是物理地址与线性地址之间的位移量,在Linux代码中就叫做PAGE_OFFSET。 内核空间和用户空间之间如何进行通讯? 内核空间和用户空间一般通过系统调用进行通信。 如何判断一个驱动是用户模式驱动还是内核模式驱动? 判断的标准是什么? 用户空间模式的驱动一般通过系统调用来完成对硬件的访问,如通过系统调用将驱动的io空间映射到用户空间等。因此,主要的判断依据就是系统调用。 内核空间和用户空间上不同太多了,说不完,比如用户态的链表和内核链表不一样;用户态用printf,内核态用printk;用户态每个应用程序空间是虚拟的,相对独立的,内核态中却不是独立的,所以编程要非常小心。等等。 还有用户态和内核态程序通讯的方法很多,不单单是系统调用,实际上系统调用是个不好的选择,因为需要系统调用号,这个需要统一分配。 可以通过ioctl、sysfs、proc等来完成。
实时分为硬实时和软实时,硬实时要求绝对保证响应时间不超过期限,如果超过期限,会造成灾难性的后果,例如汽车在发生碰撞事故时必须快速展开安全气囊;软实时只需尽力使响应时间不超过期限,如果偶尔超过期限,不会造成灾难性的后果.
1 PCIe中断 – PCI/PCIe设备中断都是level触发,并且请求信号为低电平有效 – PCI总线一般只有INTA#到INTD#的4个中断引脚,所以PCI多功能设备的func一般不会超过4个,但是共享中断除外
大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【Linux 中断的注册和处理】。
前一阵子在公司移植Linux2.6到一块ARM11的开发板上,下面粗略讲讲移植Linux的一般过程。
In computing, a system call is the programmatic way in which a computer program requests a service from the kernel of the operating system it is executed on. This may include hardware-related services (for example, accessing a hard disk drive), creation and execution of new processes, and communication with integral kernel services such as process scheduling. System calls provide an essential interface between a process and the operating system.
一. linux内核简介 1. linux简介 1.1 unix的特点 unix很简洁,仅提供几百个系统调用,并有非常明确的设计目的 unix所有东西都当作文件对待,这种抽象使对数据和设备都通过一套相同的系统调用接口进行 内核用C语言编写,移植能力很强 进程创建迅速,独特的fork调用 提供了简洁但是稳定的进程间通讯原语 1.2 unix和linux linux克隆unix,但不是unix linux借鉴了unix很多的设计,并且实现了 unix的api linux没有直接使用unix的源代码,但完整表达了
导语:掐指一算自己从研究生开始投入到Linux的海洋也有几年的时间,即便如此依然对其各种功能模块一知半解。无数次看了Linux内核的技术文章后一头雾水,为了更系统地更有方法的学Linux,特此记录。 历史 1991年,还在芬兰赫尔辛基大学上学的Linus Torvalds在自己的Intel 386计算机上开发了属于他自己的第一个程序,并利用Internet发布了他开发的源代码,将其命名为Linux,从而创建了Linux操作系统,并在同年公开了Linux的代码,从而开启了一个伟大的时代。在之后的将近30年的
假设这里文件在磁盘上都是连续存放的,此时有一个test.c文件,占据了6,7,8三个盘块的位置。
理想情况下用户对内存的期待是大容量、高速度和持久性,但是现实中却是一个由缓存、主存、磁盘组成的内存架构,该架构中,缓存低容量、速度快但是成本高,主存中速度、中容量和中成本,磁盘就是大容量、持久性但是速度慢。
导语:掐指一算自己从研究生开始投入到Linux的海洋也有几年的时间,即便如此依然对其各种功能模块一知半解。无数次看了Linux内核的技术文章后一头雾水,为了更系统地更有方法的学Linux,特此记录。 历史 1991年,还在芬兰赫尔辛基大学上学的Linus Torvalds在自己的Intel 386计算机上开发了属于他自己的第一个程序,并利用Internet发布了他开发的源代码,将其命名为Linux,从而创建了Linux操作系统,并在同年公开了Linux的代码,从而开启了一个伟大的时代。在之后的将近30
随着计算机技术的飞速发展,Linux操作系统作为开源领域的佼佼者,已经深入到了各个应用场景之中。在Linux系统中,内核与用户空间之间的交互是核心功能之一,而设备驱动则是实现这一交互的关键环节。然而,传统的设备驱动开发往往受限于内核空间的限制,无法充分发挥用户空间程序的灵活性和性能优势。为了解决这个问题,Linux内核引入了UIO(Userspace I/O)驱动模型。
注: 此系列内容来自网络,未能查到原作者。感觉不错,在此分享。不排除有错误,可留言指正。
虚拟内存是实现分段和分页的关键所在,而分段和分页是操作系统管理内存的两个核心机制。
本节学习下什么是irq domain, 以及irq domain的作用。可以参考内核文档IRQ-domain.txt
最近一直在做性能压测相关的事情,有公众号的读者朋友咨询有赞的数据库服务器有没有开启huge page,我听说过huge page会对性能有所提升,本文就一探究竟。对过程没有兴趣的可以直接看结论。
即使看了所有的Linux 内核文章,估计也还不是很明白,这时候,还是需要fucking the code.
Linux系统是虚拟内存系统,虚拟内存并不是真正的物理内存,而是虚拟的连续内存地址空间。虚拟内存又分为内核空间和用户空间,内核空间是内核程序运行的地方,用户空间是用户进程代码运行的地方,只有内核才能直接访问物理内存并为用户空间映射物理内存(MMU)。内核会为每个进程分配独立的连续的虚拟内存空间,并且在需要的时候映射物理内存,为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,这个页表就是存在于MMU中;用户进程访问内存的时候,通过页表把虚拟内存地址转换为物理内存地址进而访问数据;其实对于用户进程而言,虚拟内存就是内存一般的存在(当作内存看待就好)。这样的设计可以把用户程序和系统程序分开,互不影响;内核可以对所有的用户程序进行管理,比如限制内存滥用等
Procfs 是进程文件系统的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。linux这个文件系统通常被挂载到 /proc 目录。
这节课讲解如何在中断系统中使用设备树,也就是用设备树如何描述中断。 中断体系在4.x内核中变化很大,中断体系又跟pinctrl系统密切相关,pinctrl中又涉及GPIO子系统,这样讲下去的话,设备树课程就变成驱动专题了,所以我打算只讲中断体系统,对于pinctrl、gpio等系统留待以后在驱动课程中扩展。
本篇文章系统的给大家讲述linux操作系统原理,这是一篇非常好的linux系统基础教程,我们总结了相关的全部精选内容,一起来学习下。
VFIO的全称是Virtual Function IO,但这个名字并不能反应它的特点,以下两个假名字更能反应VFIO的特点:
用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
实时系统要求对事件的响应时间不能超过规定的期限,响应时间是指从某个事件发生到负责处理这个事件的进程处理完成的时间间隔,最大响应时间应该是确定的、可以预测的。
高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0
不同的外部设备、不同的体系结构、不同的OS其中断实现机制都有差别,本文对应的OS为linux3.4版本,外部设备为PCI设备、系统为X86。
工作队列常见的使用形式是配合中断使用,在中断的服务函数里无法调用会导致休眠的相关函数代码,有了工作队列机制以后,可以将需要执行的逻辑代码放在工作队列里执行,只需要在中断服务函数里触发即可,工作队列是允许被重新调度、睡眠。
用户输入命令,在Shell下运行一个前台进程,用户键盘输入 Ctrl C (2号信号)则会产生一个硬件中断,被OS获取,解释成为信号,发送给目标前台进程,前台进程收到信号之后,引起进程退出。
虚拟内存就是在你电脑的物理内存不够用时把一部分硬盘空间作为内存来使用,这部分硬盘空间就叫作虚拟内存。
这里在实验之前需要下载 Bochs-win32-2.6.11 作者使用的是Linux版本的,在Linux写代码不太舒服,所以最好在Windows上做实验,下载好虚拟机以后还需要下载Nasm汇编器,以及GCC编译器,为了能够使用DD命令实现磁盘拷贝,这里你可以安装windows 10 下面的子系统Ubuntu,需要使用命令时可以直接切换。
本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。
现在,我们已经掌握了基本的定义,接下来让我们往模型机里添加一些硬件,以讨论一些更复杂的用例。
在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。
知乎上搜到一个比较有意思的话题:如何理解「进入内核态」,要回答好这个问题需要对内存管理及程序的运行机制有比较深刻的了解,比如你需要了解内存的分段,分页,中断,特权级等机制,信息量比较大,本文将会从 Intel CPU 的发展历史讲起,循序渐近地帮助大家彻底掌握这一概念,相信大家看了肯定有帮助,本文目录如下
本文主要介绍了我在阅读《深入浅出DPDK》,《DPDK应用基础》这两本书中所划下的知识点
领取专属 10元无门槛券
手把手带您无忧上云