- 博客(27)
- 收藏
- 关注
原创 mb与使用场景
在任何一个需要明确指定内存操作顺序,否则并发逻辑就会出错的地方,就是你该考虑使用内存屏障(如mb())的时候。它是编写正确、可靠的多核并发底层代码的基石。mb()场景特征具体例子屏障的作用存在共享数据的多核/多线程环境锁、生产者-消费者确保修改顺序和可见性顺序的一致性,防止数据竞争和状态不一致。对访问顺序有严格要求的硬件交互设备驱动、DMA确保CPU对设备寄存器的写入顺序符合硬件的工作逻辑。需要保证指令执行顺序各种同步原语的实现作为一个“栅栏”,强制在屏障点完成所有之前的操作,再开始之后的操作。
2025-10-18 18:05:10
905
原创 需要知道的spinlock
函数作用影响范围仅获取自旋锁。防止其他 CPU进入临界区。禁用本地CPU中断+ 获取锁。防止其他 CPU本地中断进入临界区。禁用本地CPU中断(并保存状态) + 获取锁。防止其他 CPU本地中断进入临界区。禁用本地CPU软中断+ 获取锁。防止其他 CPU本地软中断/tasklet进入临界区。中断禁用操作(irqsaveirqbh)都是每CPU的,只影响执行操作的本地核心。是“本地中断禁用”和“全局自旋锁”的组合。它解决了两种竞争:进程上下文 vs 其他CPU的进程上下文。
2025-09-04 17:56:40
878
原创 regmap的使用
在 Linux 内核中,regmap 是一个通用的寄存器映射抽象层,用于简化对硬件寄存器(尤其是 I2C、SPI、MMIO 等设备)的访问。定义底层总线操作(如 read/write),由具体总线驱动(如 I2C、SPI)实现。REGCACHE_RBTREE:红黑树缓存,适合稀疏寄存器访问。核心结构体,包含寄存器位宽、缓存策略、总线操作等配置。REGCACHE_FLAT:数组缓存,适合连续寄存器。配置参数(如寄存器位宽、缓存类型、读写回调等)。缓存机制:透明管理寄存器缓存(可选)。(2) 寄存器读写操作。
2025-09-03 14:01:16
379
原创 linux管理分散物理内存
保留内存通常在设备树中显式声明,这样内核和驱动程序都会避免使用它们。// 为GPU保留128MB内存 gpu_memory : region@ 98000000 {// 非常重要!告诉内核不要映射此区域用于常规用途 };// 为DSP保留64MB内存 dsp_memory : region@a0000000 {// 然后,设备节点可以引用这些保留区域 gpu : gpu@ff300000 {
2025-08-28 11:57:12
807
原创 arm的 swi简述
ARM 的 (Software Interrupt,软件中断)指令是用于实现系统调用(System Calls)的传统机制。它允许运行在用户模式(User mode)下的应用程序请求运行在特权模式(如 Supervisor mode)下的操作系统内核提供服务。现在, 指令在较新的 ARM 架构(ARMv7 及以后)中已被 (Supervisor Call,监管调用)指令取代,但两者的概念和用法几乎完全相同。 在 ARMv6 及之前的架构中更常见。 或 是一个数字,用于标识具体的系统调用功能。例如,
2025-08-28 11:16:59
720
原创 gst hdr
将 GStreamer 解析的 HDR 元数据传递给 DRM 显示模块,可以通过自定义 GStreamer 插件或应用程序逻辑实现。编写一个 GStreamer 插件,解析 HDR 元数据并通过 DRM API 设置到显示模块。在 GStreamer 应用程序中解析 HDR 元数据,并通过 DRM API 设置到显示模块。配置 DRM 显示模块:将 HDR 元数据传递给 DRM 显示模块,以正确显示 HDR 内容。解析 HDR 元数据:从视频流中提取 HDR 元数据(如亮度、色彩空间等)。
2025-08-27 16:12:04
847
原创 kernel通知机制,内部与内外
是子系统间或内核与用户空间之间通信的核心基础设施。根据使用场景和通信方向的不同,内核提供了多种通知机制。允许内核组件注册回调函数,在特定事件(如 CPU 热插拔、内存不足、设备状态变化)发生时被调用。理解这些机制的差异和适用场景,能帮助你在内核开发中选择最合适的通信方式。用于一个线程等待另一个线程完成某项任务后继续执行,类似条件变量。通过无锁读机制实现高效数据共享,适用于读多写少的场景。双向通信机制,支持多播和复杂数据结构传输。异步执行延迟任务,替代内核线程。广播设备状态变更事件。),但内核内部极少使用。
2025-08-01 17:19:48
983
原创 Linux下of常用函数集
这些函数是 Linux 驱动开发中操作设备树的核心接口,熟练掌握后可高效编写与硬件无关的驱动代码。表示 Open Firmware,即设备树标准来源)实现。目录下,用于解析设备树节点、属性及硬件资源。| 读取 MAC 地址属性(如。属性中的地址和大小(用于寄存器映射) |属性) || 比较节点名是否匹配。| 检查节点是否可用(在 Linux 内核中,
2025-07-31 18:22:45
364
原创 零拷贝技术
DMA-buf技术来自Samsung的drm驱动开发人员,提出该框架后很快merge到linux drm主线,并在v4l2,drm等展开应用。的关键技术,但它们的应用场景、设计目标和实现方式有显著差异。(如文件页缓存、GPU 显存),避免数据在用户态和内核态之间的拷贝。若需最大化性能(如摄像头→GPU→显示器的 4K 流水线),通过内存映射,用户进程直接访问。在 Linux 系统中,
2025-07-21 13:53:48
861
原创 drm driver
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, 全局唯一的当前显示设备,管理所有有关的组件。
2025-07-19 14:18:47
243
原创 hsync/vsync/porch
极性:有正极性和负极性,信号中高电平时间长,低电平时间短就是负极性,反之就是正极性,前图的LCD信号图中的Hsync就是负极性,VGA显示器输入信号图中的Hsync是正极性;当分辨率/刷新率偏离标准时(如自定义分辨率),VESA的CVT(Coordinated Video Timings)算法会动态计算Porch值,而CEA则严格遵循预定义表格。视频信号的 水平频率(H-Freq) 是显示时序中的关键参数,其计算公式与视频时序参数直接相关。VESA:通常使用负极性同步(H-/V-)
2025-07-19 14:07:26
577
原创 hdmi hpd
Source设备检测TMDS是否被上拉到3.3V,有部分设备会检测所有的TMDS信号被上拉才输出TMDS信号,部分设备必须要检测到CLOCK上拉才输出信号,部分设备只要检测到某对TMDS被上拉即输出该上拉的TMDS。如果Sink的EDID内容发生改变,或者需要切换HDMI通道需要Source重新读取EDID,那么HPD需要发出一个不短于100ms时间的低电平信号,低电平再次变为高电平时,Source将重新读取EDID。需要提醒一下,我们HPD要有效,肯定是+5V电源的配电开关要使能。
2025-07-19 13:57:14
568
原创 cvt vesa
VESA 1080p60:为PC优化,效率优先,直接驱动像素。CEA 1080p60:为视频兼容性设计,保留电视传统特性。关键差异:消隐区间、同步极性、量化范围和元数据。实际应用中需确保源设备与显示器的标准匹配。
2025-07-19 13:54:11
494
原创 HDR 之 libdrm 输出测试
gst-plugins-bad 提供了 h264parse、h265parse 等插件,可以解析 HDR 元数据。配置 DRM 显示模块:将 HDR 元数据传递给 DRM 显示模块,以正确显示 HDR 内容。解析 HDR 元数据:从视频流中提取 HDR 元数据(如亮度、色彩空间等)。DRM 显示模块需要接收 HDR 元数据,以正确配置显示器的 HDR 模式。h265parse:解析 H.265 视频流中的 HDR 元数据。:将 HDR 元数据设置到 DRM 连接器。:创建 HDR 元数据的 Blob。
2025-07-19 13:43:37
499
原创 HDR 之colorimetric & eotf
Colorimetric 定义了图像的色彩范围和准确性。EOTF 定义了图像的亮度和对比度表现。两者共同决定了图像的色彩和亮度表现,特别是在 HDR 显示中尤为重要。在实际应用中,Colorimetric 和 EOTF 信息通常嵌入在视频流的元数据中,显示器需要根据这些信息进行配置,以正确显示图像。Perceptual Quantizer(PQ)是一种高动态范围(HDR)编码方法,由SMPTE(电影和电视工程师协会)与Dolby Laboratories联合开发。
2025-07-19 11:48:27
1078
原创 sourceinsight 解析kernel源码
_printf(x,x)是linux kenrel内的特别宏用户检查功能,一般kernel开发者不用关心这个,但是si默认把它当作函数来解析,导致实际的devm_kvasprintf被认为是字符串,解析不出来。Linux内核中有很多宏定义,sourceinsight不识别,导致解析出问题,经常是灰色的,无法跳转与分析调用链,怎么办?使用si的.com宏解析文件,让si忽略他们或者预先解析,这样就不影响function解析。修改:“Source Insight 4.0\c.tom”
2025-07-19 11:18:10
220
原创 【无标题】
此外,它还支持多种存储介质(如 eMMC、SD 卡、Raw NAND、UBIFS、NOR 和 SPI-NOR 闪存)的更新,并提供了流式传输模式,避免了临时文件的复制,从而节省了资源。它提供了完整性,签名验证,固件加密等功能,保证了升级固件的安全性和私密性。下面的文件就是各个固件文件了。swupdate是一个基于嵌入式的Linux平台的升级服务框架程序,它提供了分区升级,文件升级,差分升级(补丁应用)功能,并提供了开放接口,方便用户添加自定义升级处理函数。该文件描述了升级包归档文件中的文件信息和升级信息。
2025-07-19 10:48:56
213
原创 linux驱动模型发展背景
近年来,Linux 驱动开发还在不断演进,特别是在容器化和微服务架构的兴起下,Linux 内核也在探索如何更好地支持虚拟化技术(如 KVM、Xen)和容器(如 Docker、Kubernetes)。此外,为了提高系统的安全性,Linux 内核也在不断改进其驱动模型,例如通过引入更严格的权限控制和沙箱机制来隔离不同驱动的运行环境。随着硬件的日益复杂,Linux 内核引入了更高级的抽象层来管理硬件设备,特别是通过引入总线抽象层(如 PCI、USB、I2C 等)和设备模型。驱动框架和总线抽象(2005年以后)
2025-07-19 10:34:21
270
原创 DRM 从app到libdrm,到/dev/dri/card0
内核 DRM 驱动实现了一系列 IOCTL 接口(如 `DRM_IOCTL_MODE_GETRESOURCES`、`DRM_IOCTL_MODE_SETCRTC`)。用户空间程序通过 `libdrm` 打开 DRM 设备文件(如 `/dev/dri/card0`),获取文件描述符。- `drmOpen` 是 `libdrm` 提供的函数,用于打开 DRM 设备。- `libdrm` 通过 `ioctl` 系统调用与内核 DRM 驱动交互。通过 `libdrm` 设置显示模式(如分辨率、刷新率)。
2025-07-19 10:27:31
997
原创 device-driver:bus/kobject/kset
bus是驱动模型的主要一环,衔接了driver和device,特别地,bus负责管理挂载在上面的所有driver和devices, 大部分的情况是: 系统初始化时候,xxx-bus-core注册了一个虚拟总线,比如 i2c总线, 然后soc厂家在这个总线上, 注册自己的i2c-host, 一个host,一个driver,多个client devices.使用kobject del。删除一个kobject,或者使用kobject_unregister函数,它是kobject_del和kobject_put。
2025-07-19 09:57:09
963
原创 kernel trace function call-stack
设置要追踪的函数(例如 `__alloc_pages`)# 启用 function_graph 追踪。# 挂载 debugfs(如果未挂载)# 运行你的测试用例(触发函数调用)# 进入 ftrace 目录。
2025-06-02 17:30:38
148
原创 sysfs 与设备驱动模型0331
如果调用者需要明 确指定一个自己的kobj_type对象给该kobject对象,那么还应该使用其他函数,比如调用kobject_init_and_add函数。kset意味着一组相似的设备,相互通过 list联系起来, 当需要向用户发送uevent时候,就用大家共享的uevent_ops发送uevent给用户层的udev(函数是kobject_uevent()).如上所见,cdev结构中嵌人了kobject:结构。在kobject结构的parent成员中,保存了另外一个kobject结构的指针,这个结构表。
2025-04-03 07:53:05
605
原创 udev rules文件语法
udev 规则文件(.rules文件)的语法用于定义设备事件触发时的行为(如设备命名、权限设置、执行脚本等)。以下是。
2025-03-25 11:44:13
1121
原创 HDR HDR10+ DolbyVision
The HDR10 format allows for a maximum brightness of 1,000 nits, and a color-depth of 10 bits.HDR10+ increases the maximum brightness to 4,000 nits, which thereby increases contrast too. But the biggest difference is in how HDR10+ handles information. W..
2021-03-01 10:39:18
1329
原创 busybox rootfs
下载busybox的源码,解压后,设定ARCH 和 CROSS_COMPILE的两个基本环境变量,选择defconfig作为默认配置,大部分的busybox 工具都会被编译出来。 如果不指定输出目录,默认输出到根目录的_install目录下面,如果需要指定目录,配置CONFIG_PREFIX=/a/b/c/rootfs, 这样make生成的 /bin, /sbin, /usr三个默认文件夹就直接在rootfs目录下。 make ARCH=arm CROSS_COMPILE=arm...
2021-02-24 15:32:08
272
原创 initrd ramfs
@initrd and initramfsinitrd historyInitrd 的英文全称是 initial ram disk,从字面意思来看,initi指linux的初始阶段,ram disk指RAM 盘。ram disk是一个基于ram的块设备,同其他存储设备一样,它不仅占据了一块固定的内存(只是它占用的RAM内存,而普通从此设备是ROM内存),而且其上也需要文件系统。initrd文件...
2020-01-07 14:41:20
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅