关于
我的公众号
QQ群:934149291
请喝杯饮料微信:
支付宝:
Linux内核开发工具之Sparse
Linux内核开发工具之Sparse概述Sparse 是我们用于 Linux 内核开发的一种语义解析器和静态分析工具。它可用于查找内核代码中一些潜在的问题。
Sparse 语义解析器提供了一个编译器前端,能够解析大部分 ANSI C 代码以及许多 GCC 扩展;此外,它还包含一组示例编译器后端,其中包括一个名为 Sparse 的静态分析器。Sparse 提供了一组注解,旨在传达有关类型的语义信息,例如指针指向何种地址空间,或某个函数获取或释放哪些锁。
最初由 Linus Torvalds 于 2003 年开始开发,目标是解决诸如用户地址空间指针与内核地址空间指针混用等问题。
官方文档: https://sparse.docs.kernel.org内核中的文档: https://docs.kernel.org/dev-tools/sparse.html
获取与安装可以从官方git仓库直接拉取最新的版本:
git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
然后可以使用git checkout vxxx切到最新 ...
Linux之IIO子系统简介
Linux之IIO子系统简介概述IIO (Industrial I/O) 是一个用于模数转换器(ADCs)、数模转换器(DACs)和各种传感器的子系统。它可用于高速、高数据率的工业设备。直到最近,它主要关注用户空间抽象。它还包括内核中的API供其他驱动程序使用。
IIO子系统提供了一个统一的框架来与驱动程序通信(读取和写入),涵盖了许多不同类型的嵌入式传感器和少数执行器。它还提供了一个标准接口,通过sysfs和devfs来处理传感器的用户空间应用程序。
以下是一些在IIO中支持的传感器类型:
模数转换器 / 数模转换器
加速度计
磁力计
陀螺仪
压力
湿度
温度
光和接近传感器
等等
IIO子系统与hwmon和input子系统比较类似(某些情况下甚至存在相当大的重叠,比如通过SPI或I2C连接的外设),但IIO总体目标是为了填补其他2个子系统的一些不足和缺失。
hwmon子系统主要针对用于风扇速度控制和温度测量等应用中的低采样率传感器。
input子系统主要关注于人类互动(HID)的输入设备,比如键鼠、触摸屏、操纵杆等。
IIO系统框架以下是从 ST MPU 官方wiki截取 ...
WIFI无线网络之CSI浅析
WIFI无线网络之CSI浅析背景最近在学习WIFI相关的东东,发现一个比较好玩的点:CSI。这个和我们常见的MIPI里的摄像头接口 CSI 同缩写。
CSI基本概念**CSI (Channel State Information)**,即信道状态信息,是无线通信领域中描述信号从发射端到接收端传播过程的详细数据和重要参数。
通过分析和研究 CSI 的变化,可以推断引起信道状态变化的物理环境变化,实现非接触式智能传感。CSI 对环境变化非常敏感。它不仅能感知人或动物的行走、奔跑等大动作引起的变化,还能捕捉静态环境中人或动物的细微动作,如呼吸、咀嚼等。这些能力使得 CSI 在智能环境监测、人体活动监测、无线定位等应用中具有广泛的应用前景。
CSI的工作原理1. 多径效应与CSI变化CSI感知技术的原理基于无线信号传播的多径效应:
“根据无线信号传播特性,发送天线的电磁波信号一方面可以通过直射到达接收天线,另一方面也可以经过周围环境(如墙体、人体、家具等)的反射到达接收天线。最终到达接收天线的电磁波信号是直射径信号和众多反射径信号的叠加,这就是无线信号传播的多径效应。”
当环境中无物体 ...
PCIe电源管理(D-states、L-states、PME)简介
PCIe电源管理(D-states、L-states、PME)简介一、PCIe 电源管理的两大支柱PCIe 的电源管理是一个分层协同的体系,包含两个正交但相互关联的维度:
设备级电源状态 (Device Power States - D-states)**:由软件(操作系统/驱动)通过配置空间控制,定义了设备功能块**本身的功耗级别。
链路级电源状态 (Link Power States - L-states)**:由硬件(根端口和设备端的 ASPM - Active State Power Management 逻辑)自动或半自动协商控制,定义了物理链路**(收发器、时钟等)的功耗级别。
两者可以独立变化,但通常会协同工作以达到最佳能效。
二、设备级电源状态 (D-states)PCIe设备级电源状态是软件控制的电源管理机制,主要状态如下:
1. D0 (Fully-On)
描述:设备处于完全工作状态,可以发起和响应所有事务。
上下文:所有设备上下文(寄存器、内部状态)都得到保持。
功耗:最高。
进入/退出:由软件写入PMCSR寄存器的Power State字段触发,退出延迟最短 ...
WIFI无线网络之无线漫游
WIFI无线网络之无线漫游无线漫游什么是无线漫游一台无线终端备(STA)通过连接Wi-Fi获取上网体验,Wi-Fi名称(又称为SSID)是由无线接入网(AP)提供的,因为一台AP设备的覆盖范围有限,所以无线网络覆盖通常是由多台AP组成的,无线终端在无线网络区域中移动时,就会连接到不同的AP。无线漫游就是指无线终端在移动到两个AP覆盖范围的临界区域时,无线终端与新的AP进行关联与原有AP断开关联,且在此过程中保持不间断的网络连接。
什么是传统漫游传统的漫游技术定义了无线终端漫游的基本过程:当无线终端逐渐远离当前关联的AP时,终端感知到信号强度逐渐下降,就会广播探测报文感知周边AP的存在并与之进行交互。当无线终端的信号达到漫游的门限值之后,无线终端触发漫游,与新的AP进行关联、与原有AP断开连接,完成AP的切换。此过程中,无线终端的漫游行为是由无线终端自己控制的,终端自己来决定漫游触发机制和漫游判断逻辑。由于不同厂家的无线终端实现存在差,信号门限值和评判标准不同,无线终端漫游效果也各有差别。传统的无线漫游技术推出以后,初步解决了无线终端在AP间移动时业务连续性问题,但在实际使用中仍然面临 ...
星闪(NearLink)简介
星闪(NearLink)简介概述
星闪(NearLink):重新定义无线短距通信,开启万物互联新时代。
星闪联盟官网:https://sparklink.org.cn/
星闪(SparkLink,亦被称为NearLink) 是一项由中国信息通信研究院、华为等超过300家头部企业和机构于2020年共同发起并成立的“星闪联盟”(SparkLink Alliance)所推动的新一代短距无线通信技术。其核心目标是打造一个能够融合蓝牙和Wi-Fi各自优势,并补齐两者短板的统一技术标准,实现“一网多能”,以一套技术满足不同场景下的多样化需求 。
星闪网络架构星闪无线通信系统内节点包括管理节点(G节点)和被管理节点(T节点)。在应用场景中,单个G节点管理多个T节点,G节点与这些T节点连接共同完成特定的通信功能。单个G节点以及与其连接的T节点共同组成一个通信域。根据星闪底层节点类型不同可以分为:
G节点和T节点之间的通信;
不同G节点之间的通信;
不同T节点之间通过G节点进行中继通信;
星闪网络通过G节点与蜂窝网融合通信。
星闪协议栈星闪无线通信系统协议栈分为基础应用层、基础服务层与星闪接入层, ...
零配置网络Zeroconf及其替代技术全面解析
零配置网络Zeroconf及其替代技术全面解析背景前面了解了比较 SSDP 协议、mDNS协议:
网络协议之mDNS
网络协议之SSDP
于是就想整体了解下**零配置网络(Zeroconf)**,所以就用AI做了个研究报告。
概述零配置网络(Zeroconf)是一种让设备在没有预先配置的情况下自动加入网络并与其他设备通信的技术,它解决了传统网络中需要手动设置IP地址、子网掩码、网关、DNS等参数的复杂性问题。Zeroconf通过三种核心组件实现自动发现和配置:链路本地地址分配、多播DNS(mDNS)和DNS服务发现(DNS-SD) 。尽管Zeroconf在局域网场景中表现出色,但在企业网络、大规模IoT部署和跨生态设备互联等场景下,存在安全风险、扩展性限制和生态碎片化等问题。因此,多种替代技术应运而生,如DHCP+DNS、LLMNR、SSDP、中心化服务发现(Consul/etcd)、CoAP+CoRE RD以及Matter协议等。这些技术各有优缺点,适用于不同场景。未来趋势显示,Zeroconf与中心化服务发现技术将形成混合架构,Matter协议将成为智能家居领域的主导标准,而 ...
网络协议之mDNS
网络协议之mDNSmDNS协议概述mDNS 的全称是 Multicast DNS,即多播 DNS。它是一种零配置(Zeroconf)网络服务,允许设备在没有传统中心化 DNS 服务器的局域网内,通过组播通信来解析主机名到 IP 地址,以及发现可用的服务。
简单来说,它是传统 DNS 在局域网内的“去中心化”替代方案,它让局域网内的设备可以”互相打招呼”,实现自动发现。。
传统 DNS:客户端向一个中心化的、已知的 DNS 服务器(如 8.8.8.8)发送单播查询,服务器返回答案。
mDNS:客户端直接向整个局域网的所有设备组播查询,拥有该名称的设备自己响应这个查询。
广泛应用场景
Apple 生态(Bonjour): Mac 间的屏幕共享、AirPrint 打印机发现、AirPlay 投屏、iTunes 音乐共享,全部基于 Bonjour。
网络打印机发现: 几乎所有现代网络打印机都支持 mDNS,使 Windows、macOS、Linux 电脑能轻松找到并添加它们。
智能家居/IoT: 智能灯泡、插座、音箱等设备通过 mDNS 宣告自己的存在和服务,方便手机 App ...
Linux蓝牙之使用C开发轻量级BLE应用
Linux蓝牙之使用C开发轻量级BLE应用linux蓝牙协议栈bluez(https://www.bluez.org/),对于开发蓝牙应用提供了丰富的蓝牙开发工具和示例。
在Linux下面使用C开发蓝牙应用主要分为以下2种方式:
基于bluez的hci/mgmt接口,可更精细控制蓝牙硬件模块,适合开发轻量级BLE应用。
基于bluez的DBUS接口,提供了大量的蓝牙上层协议,能更好管理蓝牙,更适合开发需要丰富接口的重应用,比如音频、文件传输等。
这里主要讨论不使用dbus(DBUS对于一些简单的BLE应用,一些简单的Linux设备来说还是太“厚重”了),而是基于hci接口来开发简单的轻量级BLE应用。
具体实现这里主要实现BLE最重要的两类工作模式:
中心设备/主机 (Central)中心设备可以扫描外围设备,并在发现有外围设备存在后与之建立连接,之后就可以使用外围设备提供的服务(Service)。一般而言,手机会担任中心设备的角色,利用外围设备提供的数据进行处理或展示等等。小程序提供低功耗蓝牙接口是默认设定手机为中心设备的。
外围设备/从机 (Peripheral)外围设备一 ...
Linux音频之PipeWire初识
Linux音频之PipeWire初识背景PulseAudio 长期以来是 Linux 主流音频解决方案,而 PipeWire 是新一代音频服务器,已经在逐渐取代 PulseAudio,提供更强大的功能和更低的延迟。
PulseAudio 主要面向普通消费级应用,提供简单的音频管理功能。PipeWire 则集成了 JACK 的功能,支持专业音频处理需求,允许用户直接调整缓冲区大小,从而实现更低的延迟。此外,PipeWire 支持多线程处理和高效的资源调度,在复杂音频流处理场景中表现更优。
另外,PipeWire 已经支持了蓝牙 LE Audio:https://www.bluez.org/le-audio-support-in-pipewire/。所以,今天想简单来看看 PipeWire。
PipeWire简介
PipeWire 是一个旨在大幅改善 Linux 系统下音频与视频处理的项目。它在音频和视频设备之上提供了一个低延迟、基于图形的处理引擎,可用于支持目前由 PulseAudio 和 JACK 共同处理的各种使用场景。PipeWire 采用了一种强大的安全模型,使得来自容器化应用的 ...
网络协议之SSDP
网络协议之SSDP概述SSDP(Simple Service Discovery Protocol,简单服务发现协议)是 UPnP(Universal Plug and Play,通用即插即用)架构中的核心协议之一 ,用于在局域网(LAN)中实现设备与服务的自动发现。它基于 UDP 协议,采用多播(Multicast)机制,无需事先配置 IP 地址或端口即可完成设备识别和服务通告。
常见应用场景:
智能家居设备发现(如 Philips Hue、Sonos 音响)
网络打印机自动识别
DLNA 媒体服务器(如 Plex、Kodi)
路由器 UPnP 端口映射服务
IoT 设备快速配网
SSDP与UPnPUPnP 是一个完整的网络互操作框架UPnP 是由 UPnP 论坛制定的一套标准,旨在让不同厂商的网络设备(如打印机、摄像头、智能电视、路由器等)在局域网中无需人工配置即可自动发现、交互和协同工作。
UPnP 的完整工作流程分为 5 个阶段:
阶段
协议/技术
功能
1. 寻址(Addressing)
DHCP / Auto-IP
设备获取 IP 地址
2. 发现(Di ...



