<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liveloading的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/liveloading</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; liveloading]]></copyright><item><title><![CDATA[mb与使用场景]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/153526754</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/153526754</guid><author>liveloading</author><pubDate>Sat, 18 Oct 2025 18:05:10 +0800</pubDate><description><![CDATA[在任何一个需要明确指定内存操作顺序，否则并发逻辑就会出错的地方，就是你该考虑使用内存屏障（如mb()）的时候。它是编写正确、可靠的多核并发底层代码的基石。mb()场景特征具体例子屏障的作用存在共享数据的多核/多线程环境锁、生产者-消费者确保修改顺序和可见性顺序的一致性，防止数据竞争和状态不一致。对访问顺序有严格要求的硬件交互设备驱动、DMA确保CPU对设备寄存器的写入顺序符合硬件的工作逻辑。需要保证指令执行顺序各种同步原语的实现作为一个“栅栏”，强制在屏障点完成所有之前的操作，再开始之后的操作。]]></description><category></category></item><item><title><![CDATA[需要知道的spinlock]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/151191215</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/151191215</guid><author>liveloading</author><pubDate>Thu, 04 Sep 2025 17:56:40 +0800</pubDate><description><![CDATA[函数作用影响范围仅获取自旋锁。防止其他 CPU进入临界区。禁用本地CPU中断+ 获取锁。防止其他 CPU本地中断进入临界区。禁用本地CPU中断（并保存状态） + 获取锁。防止其他 CPU本地中断进入临界区。禁用本地CPU软中断+ 获取锁。防止其他 CPU本地软中断/tasklet进入临界区。中断禁用操作（irqsaveirqbh）都是每CPU的，只影响执行操作的本地核心。是“本地中断禁用”和“全局自旋锁”的组合。它解决了两种竞争：进程上下文 vs 其他CPU的进程上下文。]]></description><category></category></item><item><title><![CDATA[regmap的使用]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/151147643</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/151147643</guid><author>liveloading</author><pubDate>Wed, 03 Sep 2025 14:01:16 +0800</pubDate><description><![CDATA[在 Linux 内核中，regmap 是一个通用的寄存器映射抽象层，用于简化对硬件寄存器（尤其是 I2C、SPI、MMIO 等设备）的访问。定义底层总线操作（如 read/write），由具体总线驱动（如 I2C、SPI）实现。REGCACHE_RBTREE：红黑树缓存，适合稀疏寄存器访问。核心结构体，包含寄存器位宽、缓存策略、总线操作等配置。REGCACHE_FLAT：数组缓存，适合连续寄存器。配置参数（如寄存器位宽、缓存类型、读写回调等）。缓存机制：透明管理寄存器缓存（可选）。(2) 寄存器读写操作。]]></description><category></category></item><item><title><![CDATA[linux管理分散物理内存]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/150947813</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/150947813</guid><author>liveloading</author><pubDate>Thu, 28 Aug 2025 11:57:12 +0800</pubDate><description><![CDATA[保留内存通常在设备树中显式声明，这样内核和驱动程序都会避免使用它们。// 为GPU保留128MB内存 gpu_memory : region@ 98000000 {// 非常重要！告诉内核不要映射此区域用于常规用途 };// 为DSP保留64MB内存 dsp_memory : region@a0000000 {// 然后，设备节点可以引用这些保留区域 gpu : gpu@ff300000 {]]></description><category></category></item><item><title><![CDATA[arm的 swi简述]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/150946968</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/150946968</guid><author>liveloading</author><pubDate>Thu, 28 Aug 2025 11:16:59 +0800</pubDate><description><![CDATA[ARM 的 （Software Interrupt，软件中断）指令是用于实现系统调用（System Calls）的传统机制。它允许运行在用户模式（User mode）下的应用程序请求运行在特权模式（如 Supervisor mode）下的操作系统内核提供服务。现在， 指令在较新的 ARM 架构（ARMv7 及以后）中已被 （Supervisor Call，监管调用）指令取代，但两者的概念和用法几乎完全相同。 在 ARMv6 及之前的架构中更常见。

 或  是一个数字，用于标识具体的系统调用功能。

例如，]]></description><category></category></item><item><title><![CDATA[gst hdr]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/150929502</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/150929502</guid><author>liveloading</author><pubDate>Wed, 27 Aug 2025 16:12:04 +0800</pubDate><description><![CDATA[将 GStreamer 解析的 HDR 元数据传递给 DRM 显示模块，可以通过自定义 GStreamer 插件或应用程序逻辑实现。编写一个 GStreamer 插件，解析 HDR 元数据并通过 DRM API 设置到显示模块。在 GStreamer 应用程序中解析 HDR 元数据，并通过 DRM API 设置到显示模块。配置 DRM 显示模块：将 HDR 元数据传递给 DRM 显示模块，以正确显示 HDR 内容。解析 HDR 元数据：从视频流中提取 HDR 元数据（如亮度、色彩空间等）。]]></description><category></category></item><item><title><![CDATA[ftrace]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/150425237</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/150425237</guid><author>liveloading</author><pubDate>Fri, 15 Aug 2025 16:04:54 +0800</pubDate><description><![CDATA[my_module。]]></description><category></category></item><item><title><![CDATA[kernel通知机制，内部与内外]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149838352</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149838352</guid><author>liveloading</author><pubDate>Fri, 01 Aug 2025 17:19:48 +0800</pubDate><description><![CDATA[是子系统间或内核与用户空间之间通信的核心基础设施。根据使用场景和通信方向的不同，内核提供了多种通知机制。允许内核组件注册回调函数，在特定事件（如 CPU 热插拔、内存不足、设备状态变化）发生时被调用。理解这些机制的差异和适用场景，能帮助你在内核开发中选择最合适的通信方式。用于一个线程等待另一个线程完成某项任务后继续执行，类似条件变量。通过无锁读机制实现高效数据共享，适用于读多写少的场景。双向通信机制，支持多播和复杂数据结构传输。异步执行延迟任务，替代内核线程。广播设备状态变更事件。），但内核内部极少使用。]]></description><category></category></item><item><title><![CDATA[Linux下of常用函数集]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149811389</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149811389</guid><author>liveloading</author><pubDate>Thu, 31 Jul 2025 18:22:45 +0800</pubDate><description><![CDATA[这些函数是 Linux 驱动开发中操作设备树的核心接口，熟练掌握后可高效编写与硬件无关的驱动代码。表示 Open Firmware，即设备树标准来源）实现。目录下，用于解析设备树节点、属性及硬件资源。| 读取 MAC 地址属性（如。属性中的地址和大小（用于寄存器映射） |属性）               || 比较节点名是否匹配。| 检查节点是否可用（在 Linux 内核中，]]></description><category></category></item><item><title><![CDATA[零拷贝技术]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149503675</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149503675</guid><author>liveloading</author><pubDate>Mon, 21 Jul 2025 13:53:48 +0800</pubDate><description><![CDATA[DMA-buf技术来自Samsung的drm驱动开发人员，提出该框架后很快merge到linux drm主线，并在v4l2，drm等展开应用。的关键技术，但它们的应用场景、设计目标和实现方式有显著差异。（如文件页缓存、GPU 显存），避免数据在用户态和内核态之间的拷贝。若需最大化性能（如摄像头→GPU→显示器的 4K 流水线），通过内存映射，用户进程直接访问。在 Linux 系统中，]]></description><category></category></item><item><title><![CDATA[drm driver]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149464109</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149464109</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 14:18:47 +0800</pubDate><description><![CDATA[display_subsystem” probe 的dts图：主要是vop节点，vop节点再通过remote-ep链接encoder-hdmi/dp。component_list,  每个组件probe时都以component挂载在list上，积木块。aggregate-device,  最终的component-master设备，积木作品。其他组件：hdmi-bind，dw-dp-bind，dsi2-bind，…drm_device, 全局唯一的当前显示设备，管理所有有关的组件。]]></description><category></category></item><item><title><![CDATA[hsync/vsync/porch]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149464006</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149464006</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 14:07:26 +0800</pubDate><description><![CDATA[极性：有正极性和负极性，信号中高电平时间长，低电平时间短就是负极性，反之就是正极性，前图的LCD信号图中的Hsync就是负极性，VGA显示器输入信号图中的Hsync是正极性；当分辨率/刷新率偏离标准时（如自定义分辨率），VESA的CVT（Coordinated Video Timings）算法会动态计算Porch值，而CEA则严格遵循预定义表格。视频信号的 水平频率（H-Freq） 是显示时序中的关键参数，其计算公式与视频时序参数直接相关。VESA：通常使用负极性同步（H-/V-）]]></description><category></category></item><item><title><![CDATA[hdmi hpd]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149463937</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149463937</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 13:57:14 +0800</pubDate><description><![CDATA[Source设备检测TMDS是否被上拉到3.3V，有部分设备会检测所有的TMDS信号被上拉才输出TMDS信号，部分设备必须要检测到CLOCK上拉才输出信号，部分设备只要检测到某对TMDS被上拉即输出该上拉的TMDS。如果Sink的EDID内容发生改变，或者需要切换HDMI通道需要Source重新读取EDID，那么HPD需要发出一个不短于100ms时间的低电平信号，低电平再次变为高电平时，Source将重新读取EDID。需要提醒一下，我们HPD要有效，肯定是+5V电源的配电开关要使能。]]></description><category></category></item><item><title><![CDATA[cvt vesa]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149463814</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149463814</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 13:54:11 +0800</pubDate><description><![CDATA[VESA 1080p60：为PC优化，效率优先，直接驱动像素。CEA 1080p60：为视频兼容性设计，保留电视传统特性。关键差异：消隐区间、同步极性、量化范围和元数据。实际应用中需确保源设备与显示器的标准匹配。]]></description><category></category></item><item><title><![CDATA[HDR 之 libdrm 输出测试]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149462560</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149462560</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 13:43:37 +0800</pubDate><description><![CDATA[gst-plugins-bad 提供了 h264parse、h265parse 等插件，可以解析 HDR 元数据。配置 DRM 显示模块：将 HDR 元数据传递给 DRM 显示模块，以正确显示 HDR 内容。解析 HDR 元数据：从视频流中提取 HDR 元数据（如亮度、色彩空间等）。DRM 显示模块需要接收 HDR 元数据，以正确配置显示器的 HDR 模式。h265parse：解析 H.265 视频流中的 HDR 元数据。：将 HDR 元数据设置到 DRM 连接器。：创建 HDR 元数据的 Blob。]]></description><category></category></item><item><title><![CDATA[HDR 之colorimetric & eotf]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149462271</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149462271</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 11:48:27 +0800</pubDate><description><![CDATA[Colorimetric 定义了图像的色彩范围和准确性。EOTF 定义了图像的亮度和对比度表现。两者共同决定了图像的色彩和亮度表现，特别是在 HDR 显示中尤为重要。在实际应用中，Colorimetric 和 EOTF 信息通常嵌入在视频流的元数据中，显示器需要根据这些信息进行配置，以正确显示图像。Perceptual Quantizer（PQ）‌是一种高动态范围（HDR）编码方法，由SMPTE（电影和电视工程师协会）与Dolby Laboratories联合开发。]]></description><category></category></item><item><title><![CDATA[sourceinsight 解析kernel源码]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149461802</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149461802</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 11:18:10 +0800</pubDate><description><![CDATA[_printf(x,x)是linux kenrel内的特别宏用户检查功能，一般kernel开发者不用关心这个，但是si默认把它当作函数来解析，导致实际的devm_kvasprintf被认为是字符串，解析不出来。Linux内核中有很多宏定义，sourceinsight不识别，导致解析出问题，经常是灰色的，无法跳转与分析调用链，怎么办？使用si的.com宏解析文件，让si忽略他们或者预先解析，这样就不影响function解析。修改：“Source Insight 4.0\c.tom”]]></description><category></category></item><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/149461321</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/149461321</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 10:48:56 +0800</pubDate><description><![CDATA[此外，它还支持多种存储介质（如 eMMC、SD 卡、Raw NAND、UBIFS、NOR 和 SPI-NOR 闪存）的更新，并提供了流式传输模式，避免了临时文件的复制，从而节省了资源。它提供了完整性，签名验证，固件加密等功能，保证了升级固件的安全性和私密性。下面的文件就是各个固件文件了。swupdate是一个基于嵌入式的Linux平台的升级服务框架程序，它提供了分区升级，文件升级，差分升级（补丁应用）功能，并提供了开放接口，方便用户添加自定义升级处理函数。该文件描述了升级包归档文件中的文件信息和升级信息。]]></description><category></category></item><item><title><![CDATA[linux驱动模型发展背景]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/146248151</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/146248151</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 10:34:21 +0800</pubDate><description><![CDATA[近年来，Linux 驱动开发还在不断演进，特别是在容器化和微服务架构的兴起下，Linux 内核也在探索如何更好地支持虚拟化技术（如 KVM、Xen）和容器（如 Docker、Kubernetes）。此外，为了提高系统的安全性，Linux 内核也在不断改进其驱动模型，例如通过引入更严格的权限控制和沙箱机制来隔离不同驱动的运行环境。随着硬件的日益复杂，Linux 内核引入了更高级的抽象层来管理硬件设备，特别是通过引入总线抽象层（如 PCI、USB、I2C 等）和设备模型。驱动框架和总线抽象（2005年以后）]]></description><category></category></item><item><title><![CDATA[DRM 从app到libdrm，到/dev/dri/card0]]></title><link>https://blog.youkuaiyun.com/liveloading/article/details/146210152</link><guid>https://blog.youkuaiyun.com/liveloading/article/details/146210152</guid><author>liveloading</author><pubDate>Sat, 19 Jul 2025 10:27:31 +0800</pubDate><description><![CDATA[内核 DRM 驱动实现了一系列 IOCTL 接口（如 `DRM_IOCTL_MODE_GETRESOURCES`、`DRM_IOCTL_MODE_SETCRTC`）。用户空间程序通过 `libdrm` 打开 DRM 设备文件（如 `/dev/dri/card0`），获取文件描述符。- `drmOpen` 是 `libdrm` 提供的函数，用于打开 DRM 设备。- `libdrm` 通过 `ioctl` 系统调用与内核 DRM 驱动交互。通过 `libdrm` 设置显示模式（如分辨率、刷新率）。]]></description><category></category></item></channel></rss>