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

浅谈 Linux 内核无线子系统

浅谈 Linux 内核无线子系统 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢?...1 全局概览 在开始探索 Linux 无线具体细节之前,让我们先来把握一下 Linux 无线子系统整体结构。如图1,展示了 Linux 无线子系统各个模块之间的抽象关系。 ?...通常我们把 Linux 内核无线子系统看成两大块: cfg80211 和 mac80211 ,它们连通内核其他模块和用户空间的应用程序。...Linux 内核无线子系统统一各种 WiFi 设备,并处理 OSI 模型中最底层的 MAC 、 PHY 两层。 若进一步划分, MAC 层可以分为 MAC 高层和 MAC 底层。...Linux 子系统实现大部分的 MAC 高层回调函数。 2 模块间接口 从图一中我们可以看出,各个模块之间分界线很清晰,并且模块间相互透明不可见。模块之间一般不会相互影响。

3.3K31

内核中断子系统介绍

很多人在学习中断子系统的过程中,在对基本概念与整体不太了解的情况下,过早的陷入了各种架构的实现细节,如同盲人摸象。这里主要给大家明确中断的各个基本概念,希望从这个角度能让大家更好的理解中断子系统。...中断子系统中的中断指的是其中硬件的一方,后续中断均按此理解。 中断处理的参与对象和流程 中断处理中有着多个对象的参与,理解每个对象在其中是如何参与是很重要的。以下列举了中断处理的参与对象。...中断子系统 现在把之前的流程具有的部分对比内核中断子系统,可以发现还多出了一个通用中断处理层。...希望帮助大家得出诸如“arm 内核有中断嵌套吗”“arm cpu eoi 是做什么”这类问题的答案。...不同的中断在 gic 上对应着不同的 INTID;gic 把中断类型分为 LPI、PPI、SPI、SGI,约束 INTID 取值对应的中断类型。

1.2K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    挂钩图形内核子系统

    这两种方法已被广泛记录,但其他更不起眼的方法包括在Windows内核中挂接图形例程,正如我们将在本文中演示的那样。...dxgkrnl 在dxgkrnl.sys中实现的Microsoft DirectX图形内核子系统是DirectX图形基础结构(DXGI)设备驱动程序接口的一部分。...这是一个非常广泛的子系统,并且具有许多令人感兴趣的功能。我们决定专注于D3DKMTSubmitCommand gdi32!...这些命令完全在用户模式下生成,仅通过图形内核子系统传递给图形驱动程序。它的前身DxgkDdiRenderKm仅用于“旧版”图形驱动程序,但看起来也很有趣,因为它很可能产生相同的结果。...要进行实际绘制,我们可以直接在内核中使用任何Gdi函数,而不会出现任何问题!

    3.2K392

    微软更新Linux子系统,编译WSL 2内核只需3步

    两个工具都是为了向开发者提供类似于Linux的体验。 WSL 2是第二代Windows上的Linux子系统。相比第一代,它带来了如下新的变化: 文件系统性能提升,完整的系统调用兼容性。...这也意味着开发者可以在WSL 2中运行更多Linux应用程序,例如Docker。...在“启用或关闭Windows功能”中启用以下两个选项:Windows虚拟机平台、适用于Linux的Windows子系统。 启用这些更改后,重新启动计算机。...在Windows应用商店中选择需要安装的Linux发行版。 ?...编译WSL 2内核 微软还在GitHub上更新了编译WSL 2内核的步骤,只需3步: 1、从微软商店安装最新的Ubuntu发行版 2、打开Ubuntu子系统,安装内核组件: sudo install build-essential

    2.1K10

    微软更新Linux子系统,编译WSL 2内核只需3步

    两个工具都是为了向开发者提供类似于Linux的体验。 WSL 2是第二代Windows上的Linux子系统。相比第一代,它带来了如下新的变化: 文件系统性能提升,完整的系统调用兼容性。...这也意味着开发者可以在WSL 2中运行更多Linux应用程序,例如Docker。...在“启用或关闭Windows功能”中启用以下两个选项:Windows虚拟机平台、适用于Linux的Windows子系统。 启用这些更改后,重新启动计算机。...在Windows应用商店中选择需要安装的Linux发行版。 ?...编译WSL 2内核 微软还在GitHub上更新了编译WSL 2内核的步骤,只需3步: 1、从微软商店安装最新的Ubuntu发行版 2、打开Ubuntu子系统,安装内核组件: sudo install build-essential

    1.8K60

    Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。...在Linux里面默认设置是5,下面给出建议值3和默认值5之间的超时时间。...当然了,不同内核版本的超时时间可能不一样,因为初始RTO在内核小版本间都会有细微的变化。所以,有时候在抓包时候可能会出现(3,6,12......)这样的序列。...但在某个版本之后Linux内核仅仅用这个tcp_retries2来计算超时时间,在这段时间的重传次数纯粹由RTO等环境因素决定,重传超时时间在5/15下的表现为: tcp_retries2 对端无响应...物理机突然宕机和进程宕不一样 值得注意的是,物理机宕机和进程宕但内核还存在表现完全不一样。 ? 仅仅进程宕而内核存活,那么内核会立马发送reset给对端,从而不会卡住A系统的线程资源。

    6.3K294

    Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。...在Linux里面默认设置是5,下面给出建议值3和默认值5之间的超时时间。...,因为初始RTO在内核小版本间都会有细微的变化。...但在某个版本之后Linux内核仅仅用这个tcp_retries2来计算超时时间,在这段时间的重传次数纯粹由RTO等环境因素决定,重传超时时间在5/15下的表现为: tcp_retries2 对端无响应...物理机突然宕机和进程宕不一样 值得注意的是,物理机宕机和进程宕但内核还存在表现完全不一样。 仅仅进程宕而内核存活,那么内核会立马发送reset给对端,从而不会卡住A系统的线程资源。

    4.7K10

    聊聊内核中IO子系统-上篇

    I/O子系统概貌 VFS:内核提供不同实现文件系统的抽象,应用端一般请求到vfs,vfs在调用实际文件系统的posix语义函数,可以理解为vfs作为用户态和实际文件系统的之间的转换桥梁,为用户态提供对于底层磁盘文件系统无感知的文件系统服务层...Mapping Layer:如果内核需要从块设备上读取数据,就必须知道数据在物理设备上的位置,这个是由映射层Mapping Layer来完成。...I/O子系统中对象 struct gendisk: 内核通过gendisk把磁盘类设备中通用的部分抽象出来。...struct hd_struct:对于分区的请求可以线性的映射到物理磁盘,这种分区的体现在内核中使用hd_struct表示。...这里涉及到了两种I/O请求,一种是通用块设备层的I/O请求,这个在内核中是以struct bio呈现;另外一种设备驱动层的I/O请求,在内核中是以struct request呈现。

    58620

    Linux 时钟子系统

    一文搞懂 | Linux 时钟子系统 Clock 时钟就是 SoC 中的脉搏,由它来控制各个部件按各自的节奏跳动。比如,CPU主频设置,串口的波特率设置,I2S的采样率设置,I2C的速率设置等等。...这些不同的clock设置,都需要从某个或某几个时钟源头而来,最终开枝散叶,形成一颗时钟树。可通过 cat /sys/kernel/debug/clk/clk_summary 查看这棵时钟树。...内核中用 CCF 框架来管理 clock,如下所示,右边是 clock 提供者,即 Clock Provider;中间是 CCF;左边是设备驱动的 clock 使用者,即 Clock Consumer。...根据 clock 的特点,clock framework 将 clock 分为 fixed rate、gate、devider、mux、fixed factor、composite 六类。...数据结构 上面六类本质上都属于clock device,内核把这些 clock HW block 的特性抽取出来,用 struct clk_hw 来表示,具体如下: struct clk_hw {

    4K30

    Linux Led 子系统

    内核中驱动维护者针对每种驱动设计一套【成熟的、标准的、典型的】驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来实现好,再把不同部分留出接口给具体的驱动工程师来实现,这就叫驱动框架。...可能由其他的芯片来控制(节约 cpu 的 pin,或者为了控制 led 的电流等) 可以设置亮度 可以闪烁 所以 Linux led 子系统把所有 led 的共性给实现了,把不同的地方留给驱动工程师去做...led 子系统核心文件: driver/leds/led-class.c driver/leds/led-core.c driver/leds/led-triggers.c include/linux/.../ledtrig-oneshot.c driver/leds/trigger/ledtrig-timer.c driver/leds/trigger/ledtrig-transient.c led 子系统相关描述可在内核源码...led 子系统是一个简单的 Linux 子系统 ,在目录 /sys/class/leds 下展示该子系统设备,每个设备都有自己的属性: brightness:设置 LED 亮度,范围 0 ~ max_brightness

    50230

    Linux Regmap 子系统

    这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。...regmap 是 Linux 内核为了减少慢速 I/O 在驱动上的冗余开销,提供了一种通用的接口来操作硬件寄存器。...Linux 内核提供了针对不同接口的 regmap 初始化函数。...关于 regmap 常用到 API 函数就讲解到这里,还有很多其他功能的 API 函数,大家自行查 阅 Linux 内核即可,内核里面对每个 API 函数都有详细的讲解。

    2.9K40

    Linux RTC 子系统

    rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。...rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs 和 proc 文件系统下的访问。...kernel-6.1/drivers/rtc/proc.c kernel-6.1/drivers/rtc/sysfs.c kernel-6.1/drivers/rtc/rtc-xxx.c class.c:向内核注册...rx8010_set_alarm rx8010_set_time 软件逻辑就不在这里赘述了,大家可以参考下面链接 https://jasper1024.com/jasper/c089e4b/ 大家多看几个...Linux 子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。

    22110

    Linux IIO 子系统

    Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...Linux 内核使用 iio_chan_spec 结构体来描述通道,定义在 include/linux/iio/iio.h 文件中。...IIO 相关配置 Linux 内核默认使能了 IIO 子系统,但是有一些 IIO 模块没有选择上,这样会导致我们编译 驱动的时候会提示某些 API 函数不存在,需要使能的项目如下: -> Device

    2.3K40

    操作系统分为用户态和内核态_内核态 用户态

    Linux 的内核是一个 Monolithic Kernel(宏内核),因此可以看作一个进程。也就是开机的时候,磁盘的内核镜像被导入内存作为一个执行副本,成为内核进程。...进程可以分成用户态进程和内核态进程两类。用户态进程通常是应用程序的副本,内核态进程就是内核本身的进程。如果用户态进程需要申请资源,比如内存,可以通过系统调用向内核申请。...内核态线程 内核态线程也称作内核级线程(Kernel Level Thread)。这种线程执行在内核态,可以通过系统调用创造一个内核级线程。 内核级线程有很多优势。...可以利用多核 CPU 优势:内核拥有较高权限,因此可以在多个 CPU 核心上执行内核线程。 操作系统级优化:内核中的线程操作 I/O 不需要进行系统调用;一个内核线程阻塞了,可以立即让另一个执行。...这种多对多的关系,减少了内核线程,同时也保证了多核心并发。Linux 目前采用的就是该模型。 两层设计(Two Level) 这种模型混合了多对多和一对一的特点。

    2.2K21

    Linux 电源管理子系统

    4、CPUIdle 驱动 目前的 ARM SoC 大多支持几个不同的 Idle 级别,CPUIdle 驱动子系统存在的目的就是对这些Idle状态进行管理,并根据系统的运行情况进入不同的Idle级别。...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...在开机的过程中,TI OMAP4芯片会注册针对CPU设备的OPP表(代码位于arch/arm/mach-omap2/中) 8、PM QoS Linux内核的PM QoS系统针对内核和应用程序提供了一套接口...9、CPU 热插拔 Linux CPU 热插拔的功能已经存在相当长的时间了,Linux 3.8之后的内核里一个小小的改进就是CPU0也可以热插拔。...Linux运行时PM最早是在Linux2.6.32内核中被合并的。

    3K20

    Linux 网络子系统

    今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...目录 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API...Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API 需要屏蔽协议

    3.7K21

    【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.6K32
    领券