首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核Linux 内核体系架构 ( 硬件层面 | 内核空间 | 用户空间 | 内核态与用户态切换 | 系统调用 | 体系结构抽象 )

文章目录 一、Linux 内核体系架构 二、内核态与用户态切换 ( 系统调用 ) 三、体系结构抽象 一、Linux 内核体系架构 ---- Linux 内核最初的源码不足一万行 , 当前的 Linux...分为三个层次 : 硬件层面 : 包括 CPU , 物理内存 , 磁盘 , 外部设备 等硬件 ; 内核空间 : 这就是 Linux 内核的核心 , 如 : Arch 抽象 , 设备管理抽象 , 内存管理...是 内核态 , ring3 是 用户态 ; 软件抽象作用 : Linux 内核中 , 使用 软件抽象内核态 ( ring0 ) 和 用户态 ( ring3 ) 之间进行切换 ; 软件抽象 又称为..., 即可访问内核 ; 三、体系结构抽象 ---- Linux 内核 支持多种体系结构 , Linux 系统可以运行在 arm 架构的处理器设备 上 , 如 Android ; 也可以运行在...x86 架构的处理器 上运行 , 如 PC 机 , 服务器等 ; 实际上 Linux 内核支持很多体系结构 , 为 Linux 内核添加一个新的体系结构很简单 , 体系结构抽象 用于 将 不同的体系结构

2.1K30

Android 硬件抽象调用流程分析

图片来自于 老罗的 Android 之旅 中关于 硬件抽象(HAL)概要介绍和学习计划。 我们的调用流程: 应用程序框架 --> 运行时库 --> 硬件抽象 --> 硬件驱动 。...关于硬件抽象 HAL 是什么?...简单说来就是,我们控制硬件设备时,调用的是硬件抽象,由硬件抽象去调用驱动程序操控硬件设备。...在Ubuntu上为Android增加硬件抽象(HAL)模块访问Linux内核驱动程序 在这里就涉及到重点 硬件抽象 HAL 了,通过设备文件来连接硬件抽象Linux 内核驱动模块。...最后将硬件抽象编译成模块,也就是一个 so 动态链接库。 这样就完成了一个简单的硬件抽象,对外有提供函数进行方法调用,对内则和硬件驱动打交道。

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android图形显示之硬件抽象Gralloc【转】

https://blog.csdn.net/yangwen123/article/details/12192401 FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示屏被抽象为一个帧缓冲区...Android系统在硬件抽象中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。...Hardware库加载过程源码分析介绍了Android系统中的硬件抽象模块的加载过程,并指出每个硬件抽象模块都必须定义HAL_MODULE_INFO_SYM符号,并且有自己唯一的ID,Gralloc...;//模块操作方法 9 void* dso;//保存模块首地址 10 uint32_t reserved[32-7];//保留位 11 } hw_module_t; 硬件抽象...设备gpu用于分配图形缓冲区,而设备fb用于渲染图形缓冲区;hw_module_t用于描述硬件抽象Gralloc模块,而hw_device_t则用于描述硬件抽象Gralloc设备,通过硬件抽象设备可以找到对应的硬件抽象模块

1.9K50

Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

文章目录 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二、Linux 内核架构层次 三、Linux 系统调用接口 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU..." ; ② 内核空间 : Linux 内核启动后 , 一直 驻留在内存 中 , 应用程序 不能 读写 内核空间数据 , 不能直接调用 内核源码 中的函数 ; 只能通过 " 系统调用 " 间接调用 内核函数...Memory Management Unit “ , 简称 ” MMU " ; 二、Linux 内核架构层次 ---- 整个操作系统 由 应用 , Library Routine , 内核 , 硬件...组成 ; 层次架构如下 : Linux 内核 需要 " 管理硬件 " , 如 : CPU 处理器 , 内存 , I/O 设备 , 网络设备 等 ; Linux 内核 还需要 向上层的 " 应用程序..." 或 " Library Routine " 提供 API 接口 , 如 : 系统调用 ; 三、Linux 系统调用接口 ---- " 系统调用 " 接口 , 可以调用 " " Linux 内核 "

9.5K40

Linux内核17-硬件如何处理中断和异常

那么,系统中硬件到底是如何处理中断和异常的呢?本文我们就以常见的X86架构为例,看看中断和异常的硬件工作原理。...Linux有效地利用它们,在CPU之间传递消息。 目前,大部分的单核系统也都包含一个I/O-APIC芯片,可以使用两种不同的方式配置它: 当一个标准的8259A类型的外部PIC使用。...内核必须为每种异常提供专用的处理函数。对于某些异常,CPU控制单元也会产生硬件错误码,并将其压入内核态栈,然后再启动异常处理函数。 下表是异常列表,列出了异常号,名称,类型等等。...4 中断和异常的硬件处理 现在,我们来探究一下CPU控制单元是如何处理中断和异常的。我们假设内核已经完成初始化,CPU工作在保护模式下。...其实对于Linux来说,只使用了supervisor和user两种特权等级。所以中断应该都是在supervisor特权等级下运行。

2K10

Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

文章目录 一、查看 Linux 操作系统位数 二、查看 Linux 操作系统软硬件信息 一、查看 Linux 操作系统位数 ---- 在 64 位的 Linux 中 , 使用 48 位 表示 "...虚拟地址空间 " ; 使用 45 位 表示 " 物理地址空间 " ; 执行 getconf LONG_BIT 命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;...得到结果 64 , 说明该系统是 64 位 Ubuntu Linux 操作系统 ; 二、查看 Linux 操作系统软硬件信息 ---- 执行 cat /proc/cpuinfo 命令 , 可以查看..." Linux 内核位数 “ 和 ” 系统的软硬件信息 " ; 输出内容解析 : vendor_id : GenuineIntel CPU 制造商 GenuineIntel cpu family :...内核启动时测量的 CPU 速度 clflush size : 64 每次刷新的缓存大小 cache_alignment : 64 缓存地址对齐单位 address sizes : 42 bits physical

31.8K20

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.2K32

应用,驱动,硬件_windows组件向导在哪里

驱动与应用通信是通过DeviceIoControl, 符号定义 #define DEVICE_NAME L"\\Device\\myDriver" // Driver Name...IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } } 然后应用要打开驱动的设备链接符号...直接内存模式中,操作系统会将DeviceIoControl指定的输出缓冲区锁定,然后在内核模式地址下重新映射一段地址。...派遣函数应该使用MmGetSystemAddressForMdlSafe将这段内存映射到内核模式下的内存地址。 得到输入输出缓冲区的大小以及IOCTL的方式与缓冲区模式相同。...OutputBuffer = (UCHAR*)MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,NormalPagePriority); //InputBuffer被映射到内核模式下的内存地址

47530

Linux驱动开发新手必读 | 二、LED子系统——硬件驱动

二、LED子系统——硬件驱动 上篇文章我们了解了子系统的框架,下面我们来分析驱动框架中每层的实现以及作用。...image-20230417084033734 在LED子系统中,硬件驱动相关文件在包括:kernel/drivers/leds/ 目录下,其主要的函数有:led-gpio.c、led-xxx.c,其中...在硬件驱动需要与其进行关联,遂在此介绍。...4、回调函数分析 硬件驱动,肯定包括最终操作硬件的部分,也就是上面提到的一些回调函数,属于我们驱动工程师开发的内容。...5、总结 上面我们了解了硬件驱动的实现流程以及相关数据结构,总结来看: 5.1 数据结构之间的关系如下 LED子系统-LED数据结构.drawio 5.2 函数实现流程如下 gpio_led_probe

36840

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

linux内核编程_linux内核是什么

内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...Linux 虚拟文件系统(VFS)隐藏各种了硬件的具体细节,为所有设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象 虚拟文件系统如何描述文件相关信息?...只能通过系统调用和硬件中断完成 Linux内核的编译及加载 内核的配置系统由哪既部分组成? Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。...次引导加载程序加载Linux内核和可选的初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载的内核,并启动用户空间应用程序。

18.8K30

LINUX内核

一、Linux内核2.6特点: 1.新的调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核的组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如i386,arm,powerpc,mips等。...4)Documentation:内核各部分通用解释和注释。...模块 16)sound:ALSA,OSS音频中设备的核心代码和常用设备驱动 17)usr:实现了用于打包和压缩的CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间的控制转移

13.9K30

Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户 malloc free | 系统调用 brk mmap | 内核 kmalloc | 内存管理流程 )

文章目录 一、内存分配系统调用过程 ( 用户 | 系统调用 | 内核 ) 二、内存管理流程 一、内存分配系统调用过程 ( 用户 | 系统调用 | 内核 ) ---- " 堆内存 " 动态分配 的...“ 中的 brk sbrk mmap munmap 等函数 , 这些函数就是 ” 系统调用 " 函数 ; 系统调用接口 是 用户的 malloc 函数 与 内核的 vmalloc 函数之间的 桥梁...; ③ 内核调用 : 内核与用户接口 的 内存管理函数 调用 " Linux 内核 " 中的 kmalloc vmalloc 函数 ; C 语言中使用 malloc free 等函数分配堆内存 ,...内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 ) 博客 , 了解 brk 和 mmap 系统调用...( 内核空间 ) 内存管理 : 在 Linux 内核中 , 通过 kmalloc vmalloc __get_free_pages 函数管理内存 ;

64510

Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是 4.13.0 ; 三...、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14 linux-5.6.14

86.7K60

Linux 内核 vs Windows 内核

计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了。...所以,这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交互,不用关心硬件的细节。 ? 内核 内核有哪些能力呢?...现代操作系统,内核一般会提供 4 个基本能力: 管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力; 管理内存,决定内存的分配和回收,也就是内存管理的能力; 管理硬件设备,为进程与硬件设备之间提供通信能力...完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核的源代码,每个人都可以免费下载和使用。...,内核抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是个完整的程序; Linux内核设计是采用了宏内核,Windows 的内核设计则是采用了混合内核

16.3K30

linux 切换内核版本,切换 Linux 内核版本

Linux 内核是开源类 Unix 系统宏内核。仅仅一个内核并不是一套完整的操作系统。有一套基于 Linux 内核的完整操作系统叫作 Linux 操作系统。...Kernel 是 Linux 系统的核心,主要负责硬件的支持。 Linux 内核提供了安全补丁, bugfix 和新特性。 Linux 内核在 GNU 通用公共许可证第 2 版之下发布。...Linux 的 Kernel 主要提供以下五个基本的功能 硬件管理以及硬件抽象 进程和线程的管理,以及之间的通信 内存的管理,包括虚拟内存管理以及内存空间的包含 I/O 设备,包括文件系统,网络接口,...Linux 内核版本号的意义 Linux 内核版本号由 3 组数字组成:第一个组数字。第二组数字。第三组数字 第一个组数字:目前发布的内核主版本。...查看内核版本 在 Linux 机器上执行如下命令查看当前正在使用的内核版本 uname -r 使用如下命令查看当前系统安装的内核版本 dpkg -l | grep linux-image 如果使用的是

23.4K20

Linux内核开发_1_编译LInux内核

配置解释 General setup 通用选项 Enable loadable module support 可加载模块 Enable the block layer 块设备 System Type...[ ]Kernel Performance Events And Counters(有子项) 性能相关的事件和计数器支持(既有硬件的支持也有软件的支持).大多数现代CPU都会通过性能计数寄存器对特定类型的硬件事件...Linux Performance Event 子系统对上述特性进行了抽象,提供了针对每个进程和每个CPU的计数器,并可以被 tools/perf/ 目录中的”perf”工具使用. [*]Enable...Enable the block layer 块设备 选项 作用 [*]Support for large (2TB+) block devices and files 仅在使用大于2TB的块设备时需要...一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。

19.3K20

Linux内核编程_linux内核开发工具

【转载】Linux内核编程与应用编程对比 转载链接1:http://www.arrowapex.cn/archives/66.html 在此之前也不清楚linux内核编程跟用户应用程序编程之间有什么不同...2.内核编程引进的头文件都在内核源码的include文件夹下,比如我的debian linux 2.6环境下是:/usr/src/linux/include下,而用户应用程序编程引进的头文件都是从开发环境头文件的...3.要查询一个函数能否在内核编程中用,可以通过http://lxr-itec.uni-klu.ac.at/linux-2.6.4/ident查 (这是针对linux2.6内核,也有针对2.4内核的),如果能查到...也就是说,我们在应用编写的代码和业务逻辑,只会被我们定义的线程或者进程执行。信号处理函数一般情况下,都会写的比较简单,大多是设置标志位。...对于在linux内核实现网关的某些功能时,我发现,虽然linux已经提供了很多现成的东西,可以保证快速开发。但是内核本身架构是一个通用计算机,不是专门针对网络处理的。

12.9K20
领券