
Linux
文章平均质量分 78
记录Linux系统编程和kernel驱动开发
江公望
力行善事,广积阴德,无福不可求
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MEDIA_PAD_FL_SINK和MEDIA_PAD_FL_SOURCE
Pad 是数据的接收端,用于接收其他实体的数据流;:Pad 是数据的发送端,用于向其他实体发送数据流;两者的核心作用是定义 Pad 的方向,确保媒体子系统能正确构建设备间的连接路径(媒体图,Media Graph),实现多媒体数据的流畅传输。惠州西湖。原创 2025-08-06 15:56:55 · 531 阅读 · 0 评论 -
驱动probe函数中,返回-EPROBE_DEFER的作用
在Linux驱动开发中,probe函数返回特定错误码是驱动与内核设备模型交互的重要机制。针对和EAGAIN。原创 2025-08-06 11:59:12 · 640 阅读 · 0 评论 -
v4l2_async_register_subdev()和v4l2_device_register_subdev()的区别和联系
在Linux V4L2(Video for Linux 2)框架中,和是两个用于管理子设备(Subdevice)与主设备(V4L2 Device)关联的核心函数。它们的设计目标都是将子设备集成到主设备的管理体系中,但在实现机制、适用场景和功能特性上有显著区别。以下从和。原创 2025-08-05 15:45:40 · 608 阅读 · 0 评论 -
ubuntu 20.04 C和C++的标准头文件都放在哪个目录?
提供,存放路径与 GCC 版本强相关。Ubuntu 20.04 默认安装的 GCC 版本为 。部分与 C 库(如 glibc)相关的扩展头文件可能存放在子目录中(例如。是 Linux 内核头文件,但属于系统调用相关,非 C 标准)。列出所有已安装的 C++ 标准头文件版本目录。若系统中安装了其他版本的 GCC(如通过。等)由 GCC 的 C++ 编译器(查看当前默认 GCC 版本,或通过。C 语言的标准头文件(如。C++ 的标准头文件(如。执行以下命令,输出中的。执行以下命令,输出中的。原创 2025-08-04 19:49:43 · 503 阅读 · 0 评论 -
技术的世界日新月异,为什么Linux能够长盛不衰?
Linux 的成功并非偶然,而是开源模式激发群体智慧稳定可靠满足工业需求高度可定制适配万物互联社区生态形成网络效应主动进化匹配技术趋势的综合结果。在未来的“云边端协同”“AI 与物理世界融合”时代,Linux 仍将是底层操作系统的核心选择——因为它不仅是一个操作系统,更是一个开放、包容、持续进化的技术生态,能够不断吸收新技术、适应新场景,最终与时代需求同频共振。并不是做什么事都非得有意义。请允许自己做一些无脑,无意义的事,比如说:目送一朵云。原创 2025-08-04 14:43:39 · 655 阅读 · 0 评论 -
V4L2之videobuf2详解(第一篇:概述)
videobuf2是 Linux 内核视频子系统的核心缓冲区管理框架,通过统一接口、多内存类型支持和灵活的状态机,为视频采集/输出驱动提供了高效的底层支撑。对于嵌入式 Linux 开发者(尤其是涉及 Zynq MP SoC 泛广电设备的场景),掌握videobuf2是实现高性能视频处理(如摄像头输入、视频输出、多设备级联)的关键。实际开发中需重点关注vb2_queue初始化、vb2_ops回调实现及内存模型的选择,以确保驱动的正确性和效率。惠州西湖。原创 2025-07-31 09:45:05 · 750 阅读 · 0 评论 -
v4l2_ctrl_handler_setup()函数详解
是 Linux V4L2(Video for Linux 2)子系统中用于初始化视频设备控件处理器的关键函数。它负责完成控件处理器的最终配置,使所有注册的控件(如亮度、对比度、分辨率等)准备好被用户空间访问,并可能触发硬件默认值的初始化。原创 2025-07-28 14:13:49 · 757 阅读 · 0 评论 -
v4l2_ctrl_handler_init()函数详解
/ 设备私有数据结构体(示例)// V4L2设备核心结构体// 控制句柄// 其他设备私有数据...// 驱动初始化函数int ret;// 分配设备私有数据if (!dev)// 步骤1:初始化控制句柄// 使用默认opsreturn ret;// 步骤2:注册控制项(示例:添加亮度控制)&dev->ctrl_hdl, // 控制句柄&my_ctrl_ops, // 自定义操作(可选)V4L2_CID_BRIGHTNESS, // 控制ID(标准ID)原创 2025-07-18 16:19:32 · 601 阅读 · 0 评论 -
如何把一个platform_driver变成一个v4l2-subdev设备?
将转换为设备的核心是将传统平台驱动的功能抽象为 V4L2 子系统可识别的子设备(sub-device),并通过 V4L2 接口暴露给上层应用或框架(如 GStreamer、V4L2 工具链)。原创 2025-07-17 20:24:55 · 711 阅读 · 0 评论 -
device_create()函数返回的struct device *指针是不是指向struct platform_device中的dev?
返回的是设备模型中的通用节点指针,而是该平台设备对应的设备模型节点。二者是不同概念,仅在显式关联(如父子设备)时存在层级关系。并不是做什么事都非得有意义。请允许自己做一些无脑,无意义的事,比如说:目送一朵云。原创 2025-07-15 15:36:50 · 305 阅读 · 0 评论 -
linux kernel的错误编码指针详细介绍
Linux 内核的错误编码指针是一种通过指针类型传递错误信息的巧妙设计,核心是利用ERR_PTRPTR_ERRIS_ERR宏将错误码编码为“非法用户空间指针”。它解决了传统NULL指针无法携带详细错误信息的问题,广泛应用于内核中需要返回指针的场景(如内存分配、设备操作等)。理解这一机制对阅读内核源码和编写可靠的驱动/内核模块至关重要。并不是做什么事都非得有意义。请允许自己做一些无脑,无意义的事,比如说:目送一朵云。原创 2025-07-15 15:01:33 · 1009 阅读 · 0 评论 -
debugfs创建目录和文件方法指导
和是debugfs的核心接口,分别用于创建调试目录和文件。通过结合定义的回调函数,开发者可以灵活地将内核状态暴露给用户空间,极大简化了调试和交互的复杂度。使用时需注意资源管理和并发安全,确保内核的稳定性。惠州西湖。原创 2025-07-15 11:40:21 · 920 阅读 · 0 评论 -
linux kernel为什么要用IS_ERR()宏来判断指针合法性?
IS_ERR()是 Linux 内核为解决指针返回值与错误码统一表示问题而设计的专用宏。它通过检测指针是否落在内核错误码编码的范围内,判断操作是否失败,并配合ERR_PTR()和PTR_ERR()实现了“指针即错误码”的高效错误传递机制。这一设计在内核资源管理(如内存、设备、线程)中被广泛使用,确保了错误信息的完整性和处理的高效性。原创 2025-07-15 10:09:01 · 610 阅读 · 0 评论 -
/sys/kernel/debug和/sys/class有什么区别?
在 Linux 系统中,/sys是sysfs虚拟文件系统的挂载点,主要用于向用户空间暴露内核对象(如设备、驱动、模块等)的元数据和状态信息。其中,/sys/class和是两个重要的子目录,但它们的设计目标、用途和内容类型有显著区别。原创 2025-07-12 11:56:13 · 619 阅读 · 0 评论 -
linux kernel struct regmap_config结构详解
* 基础标识与总线类型 */// Regmap 实例名称(调试用)// 总线类型(如 REGMAP_BUS_I2C、REGMAP_BUS_SPI、REGMAP_BUS_MMIO 等)/* 寄存器与值的位宽配置 */// 寄存器地址的位宽(如 8/16/32 位)// 寄存器值的位宽(如 8/16/32 位)// 地址/值与实际总线传输间的填充位(通常为 0)/* 字节序与对齐方式 */// 寄存器地址的字节序(大端/小端/不转换)// 寄存器值的字节序(同上)原创 2025-07-11 18:15:58 · 1022 阅读 · 0 评论 -
Linux kernel regcache_cache_only()函数详解
是 Linux 内核中regmap子系统的一个关键函数调用,主要用于控制寄存器缓存的访问模式。其核心作用是。原创 2025-07-11 16:10:38 · 334 阅读 · 0 评论 -
Linux kernel devm_gpiod_get()函数详解
是 Linux 内核中用于的设备资源管理(Managed Device Resources, Devres)函数。它是现代 Linux 驱动开发中推荐使用的 GPIO 操作接口,替代了传统的等函数,具备更安全、更简洁的资源管理能力。原创 2025-07-11 15:06:31 · 1279 阅读 · 0 评论 -
Linux内核中I2C adapter支持的功能标志详细表格
在I2C驱动代码中,经常会看到如上代码。用于检测i2c adapter是否支持我们想要的功能。那么,这些i2c的功能标志位分别代表什么意思呢?以下是 Linux 内核中 I2C 适配器/设备支持的功能标志(i2c_func)的详细说明表格,涵盖标准 I2C 功能、SMBus 扩展功能及相关特殊操作。这些宏定义位于头文件中。原创 2025-07-11 10:39:29 · 752 阅读 · 0 评论 -
of_match_ptr这个宏有什么作用?
是 Linux 设备树驱动开发中用于声明匹配表指针将数组转换为内核需要的指针类型;支持条件编译动态选择匹配表;显式标记匹配表指针,提高代码可读性和工具检查友好性。驱动开发者通过它可以将设备树节点的compatible属性与驱动逻辑绑定,实现硬件与驱动的自动发现和匹配。原创 2025-07-10 14:13:30 · 411 阅读 · 0 评论 -
MODULE_DEVICE_TABLE(i2c, gsv2011_rx_i2c_id)这句代码有什么用?删掉它会怎么样?
是 Linux 内核模块中用于的关键宏,主要用于设备与驱动的匹配。原创 2025-07-10 11:25:08 · 379 阅读 · 0 评论 -
struct of_device_id is not terminated with a NULL entry
linux kernel编译ssd2828驱动报错。原创 2023-02-02 19:53:27 · 870 阅读 · 0 评论 -
ubuntu无法找到hexdump命令
ubuntu无法找到hexdump命令原创 2022-12-16 11:24:19 · 3749 阅读 · 0 评论 -
SecureCRT中make menuconfig乱码问题解决
SecureCRTmake menuconfig乱码原创 2022-08-29 20:21:10 · 884 阅读 · 0 评论 -
xilinx zynqmp DisplayPort时钟检测错误
xilinx zynqmp DisplayPort时钟检测错误原创 2022-08-22 20:26:29 · 2297 阅读 · 5 评论 -
MT7601 狂报Qidx(0), not enough space in MgmtRing, MgmtRingFullCount=168!
目前在海思方案上使用MT7601 WIFI模块。WIFI模块做AP时,只要有数据传输就狂报错:Qidx(0), not enough space in MgmtRing, MgmtRingFullCount=168!Qidx(0), not enough space in MgmtRing, MgmtRingFullCount=169!Qidx(0), not enough space in MgmtRing, MgmtRingFullCount=170!Qidx(0), not enough s原创 2020-12-30 11:55:30 · 1574 阅读 · 1 评论 -
iwconfig
iwconfig转载地址http://blog.chinaunix.net/uid-24467128-id-3201533.html注意:radio层不支持该命令,该命令只在协议层使用。 用途:用于设置和操作WLAN接口,方法与ifconfig类似,但是是用于指定802.11设备的操作。 格式:iwconfig interface [essid {X|on|off|any原创 2014-03-25 10:01:23 · 1048 阅读 · 0 评论 -
WAP和GPRS的区别
严格的说wap和gprs并不能相提并论的加以比较,因为这是两个不同的技术概念。 简单的说,wap是一种无线网络应用协议,而gprs是实现wap应用的一种网络传输技术方式。 形象的说,wap如果是一封信,gprs就是送信到达的邮车。 有时大家所说的gprs流量包月后,“上wap”还收费,其实是指通过csd方式连接wap仍会收费。 wap现在有两种承载方式---- 一是csd(电路交换数据传送方式)转载 2014-05-07 10:33:19 · 10307 阅读 · 0 评论 -
pthread_kill()和pthread_cancel()的用法
为了讲述标题两个函数,必须先介绍一下pthread线程库。pthread线程库是遵循POSIX标准开发的,工作非常稳定,性能也不差,所以在Linux下是最常用的线程库。但从调用上看,pthread线程应该仍然属于用户级的线程库,其实用户级还是内核级的关键区别只在于线程的调度是由内核还是用户库来完成,用户级对于一般的服务器工作而言是没用问题的。pthread_kill函数的功能是转载 2014-05-13 14:21:38 · 13687 阅读 · 0 评论 -
海思(Hi35XX)环境下交叉编译、安装openssl-0.9.8e
转载至:http://blog.youkuaiyun.com/zqj6893/article/details/8778237开发环境:Redhat Linux 2.6.25 gcc-3.4.3-uClibc-0.9.28开发板环境:Hi3512/Hi3511linux-2.6.14移植步骤:第一步、至官网下载最新的openssl-0.9.8e,解原创 2014-03-31 09:32:06 · 6704 阅读 · 0 评论