Heng30的博客
搜索 分类 关于 订阅

在Linux驱动中如何获取platform_device的资源?

struct platform_device是用于描述硬件信息的驱动,其他驱动可以通过名称和它进行匹配。一旦匹配成功后,可以通过它来获取硬件的信息。下面的例子就演示了如何进行驱动匹配和获取硬件信息...

如何实现一个Linux驱动匹配多个设备?

id_table是一个指向struct platform_device_id数组的指针,用于定义驱动可以匹配的设备ID列表。当内核检测到一个平台设备时,会检查其名称或ID是否与驱动提供的id_table中的任一条目匹配,从而决定是否绑定该驱动...

Linux驱动如何创建platform_device?

struct platform_device 是Linux内核中用于表示平台设备的重要数据结构,它是Linux设备模型的一部分,特别用于那些不通过传统总线(如 PCI、USB 等)连接的设备...

Linux驱动使用高精度定时器控制LED亮度

Linux hrtimer(高分辨率定时器)是Linux内核提供的一种高精度定时机制,用于支持微秒(μs)甚至纳秒(ns)级别的定时操作,相比传统的定时器(如timer_list)具有更高的精度和灵活性...

Linux驱动如何匹配设备?

在Linux内核的struct platform_driver驱动结构中,id_tableof_match_table都用于驱动与设备的匹配,但它们的用途和工作方式有所不同...

Linux驱动如何使用pwm设备?

在Linux内核中,struct pwm_device是用于描述和管理PWM(脉冲宽度调制)设备的核心数据结构。它通常定义在include/linux/pwm.h中,主要作用是为PWM控制器(硬件)和消费者(驱动)之间提供统一的抽象接口...

Linux用户态如何使用One-Wire?

One-Wire是由Dallas Semiconductor(现为Maxim Integrated)开发的一种通信协议,允许主设备(如微控制器或嵌入式Linux 系统)通过单根线与一个或多个从设备进行低速数据交换...

Linux驱动如何使用input_dev创建驱动?

struct input_dev是Linux内核中用于表示输入设备的数据结构,定义在<linux/input.h>头文件中。它用于管理和描述输入设备(如键盘、鼠标、触摸屏等)及其事件...

Linux用户态如何使用spi?

在用户态访问spi从设备也是比较常用的功能。下面的例子就实现了如何读取和设置spi从设备的GPIO引脚...

Linux用户态如何使用i2c?

在用户态访问i2c从设备也是比较常用的功能。下面的例子就实现了如何读取和设置i2c从设备的GPIO引脚...

在Linux用户态如何使用UART?

用户态使用串口进行通信也是比较常用的功能。下面的例子就实现了如何使用raspi3b串口进行收发数据...

Linux用户空间控制GPIO

从用户空间访问GPIO也是比较常用的功能。下面的例子就演示了如何在Linux用户空间访问GPIO,并控制其引脚电平...

Linux驱动如何使用链表?

链表是一种常用的数据结构,在开发中经常会使用到。在Linux内核中同样也是一个很常用的数据结构,而且内核对链表实现了很多相关函数,极大方便了链表的使用。内核中的链表和一般的链表使用方法是不一样的...

Linux驱动如何创建sysfs class接口?

Linux的sysfs是一种虚拟文件系统,用于将内核对象、属性和关系导出到用户空间,方便用户和管理员查看和配置内核及硬件信息。sysfs通常挂载在/sys目录下...

如何给Linux字符驱动实现mmap?

mmap是Linux系统中的一种系统调用,用于将文件或设备映射到进程的地址空间,从而实现内存映射文件或共享内存的功能。通过mmap,进程可以直接访问文件内容,而无需使用传统的read和write系统调用...

如何在Linux驱动中读写文件?

一般来说,驱动是不会访问文件系统的,更不会在文件系统上创建除设备驱动文件外的其他文件。但是有时为了满足某些奇怪的需求,会有访问文件系统的需求...

如何在Linux驱动中使用DMA?

DMA(直接内存访问,Direct Memory Access)是一种允许硬件设备直接访问系统内存的技术,无需通过CPU的干预。它主要用于提高数据传输效率,减少CPU的负担...

如何在Linux驱动中使用自旋锁?

在Linux驱动中,自旋锁是很常用的工具,可以保证数据安全。因为自旋锁会一直占用CPU,所以一般用于保护能够快速完成的临界区...

如何在Linux驱动中使用定时器?

在Linux驱动中,定时器是很常用的工具,可以让延时执行一些函数。下面的例子实现了延时一秒钟执行一次定时器回调函数...

如何在Linux驱动中使用原子操作?

在Linux驱动中,原子操作是很常用的工具,可以保证数据安全。一般为了保护数据安全会使用锁机制,不过锁的开销比较大。如果是简单的整数运算...

如何使用Linux misc设备驱动注册机制?

在Linux内核中,miscdevice是一种用于简化字符设备驱动注册的机制。它适用于那些不需要主设备号的简单设备驱动。miscdevice使用一个固定的主设备号(10)...

Linux驱动使用I2C通信协议

很好奇I2C设备是如何与驱动进行匹配的吧?一般是通过设备树文件来描述I2C从设备的信息,例如名称和地址等。驱动通过和名称与从设备进行匹配...

Linux驱动GPIO中断

监听GPIO引脚变化是嵌入式开发的基础知识。在Linux驱动中监听GPIO电平变化也是很方便的。下面的例子就演示了如何监听GPIO引脚电平变化...

Linux驱动使用GPIO

GPIO引脚控制是嵌入式开发的基础知识。在Linux驱动中控制GPIO也是很方便的。下面的例子就演示了如何初始化GPIO引脚,并获取和设置GPIO引脚电位...

Linux驱动使用SPI协议获取设备信息

SPI是嵌入式开发中常用的一个通信协议,下面的例子给大家演示如何使用IIO子系统来和SPI设备进行通信,并获取设备的信息...

一篇文章带你了解文件是如何存储在磁盘的

格式化磁盘后,会将磁盘分割成一个个大小相同的块。这些块就是磁盘管理的最小单位。那么是如何找到空闲位置存储一个文件的呢?下面先来了解几个常用的概念...

Linux驱动使用IIO子系统和设备通信

Industrial I/O (IIO)是 Linux 内核中的一个子系统,专为处理工业应用中的模拟数字转换器(ADC)、数字模拟转换器(DAC)、惯性测量单元(IMU)、光传感器、压力传感器等设备而设计...

Linux驱动如何使用raspi3b串口收发数据?

串口通信是嵌入式开发的常用通信方式之一。下面就给大家演示一下,如何使用Linux驱动来进行串口通信?下面的例子主要实现了串口通信回显功能...

如何通过设备树访问raspi3b的i2c设备

i2c是嵌入式开发的常用协议,下面我们学习通过Linux驱动来读写i2c设备的数据。通过设备树来获取i2c的信息,使用Linux内核的i2c子系统提供的接口来控制读写数据...

Linux内核如何动态分配内存?

动态内存分配是一个很重要的功能,如果没有动态内存分配,所有的变量都分配到堆上,堆栈很容易就会溢出。动态内存分配一般都是用来分配需要长期使用的内存或大块的内存...

如何通过设备树初始化raspi3b的gpio?

点亮第一个LED灯是嵌入式开发的Hello World程序。下面我们学习通过Linux驱动来点亮LED灯。通过设备树来获取LED的信息,使用Linux内核的GPIO子系统提供的接口来控制LED灯...

你的第一个Linux设备树驱动程序

进行嵌入式开发的主流方法是使用设备树文件添加设备信息,驱动通过获取设备信息对设备进行操作。下面将演示如何写一个设备树插件文件和驱动代码...

在Linux驱动如何在sys目录创建文件?

/sys/kernel是Linux系统中的一个虚拟文件系统目录,位于sysfs文件系统下,主要用于提供内核相关的信息和配置接口。通过它,用户和应用程序可以访问和调整内核的某些运行时参数和行为...

Linux驱动如何在proc目录创建文件?

proc文件系统并不是真正存在于磁盘上的文件系统,而是由 Linux 内核动态创建的,用于提供一种访问内核数据结构和运行时系统信息的接口。它通常挂载在/proc目录下...

如何在Linux驱动中创建线程?

在Linux内核驱动中创建线程是一个很常见的功能。下面的例子使用两种方法来创建线程。其中kthread_run函数不需要创建线程,直接就让线程运行起来,比较方便...

如何给Linux驱动实现fasync信号通知函数?

如果给Linux驱动实现fasync函数,那么驱动就能够通过信号机制异步通知客户端程序。这个方法一般比较少用,但我们也要熟悉这种方法。下面就给大家带来一个完整的例子...

如何给Linux驱动实现信号通知机制?

send_sig_info是Linux内核中的一个函数,用于向指定进程发送信号。它允许内核代码向特定进程发送信号,并附带一些额外的信息(通过struct siginfo结构体传递)...

如何在Linux驱动中使用等待队列同步线程?

线程同步在编程中是很常见的功能。在Linux内核中也提供了等待队列同步机制,可以很方便进行线程同步。下面就给出了完整的例子,写入操作触发等待队列,等待队列中的等待者会得到执行的机会...

如何给Linux字符设备驱动实现poll?

一个驱动实现了poll函数,就能够让客户端程序使用selectepoll等异步IO系统调用进行读写驱动,大大丰富了驱动的使用。下面的例子就带大家看看如何去实现...

如何写一个最简单的字符设备驱动?

字符设备驱动在Linux系统中是很常见的。字符设备驱动是Linux内核中用于管理字符设备的模块。字符设备以字节流形式进行数据传输,通常不支持随机访问...

如何使用dmesg调试驱动?

dmesg是一个用于显示或控制内核环形缓冲区消息的命令。它主要用于查看系统启动时的内核消息,以及系统运行期间内核产生的各种日志信息...

如何进行Linux驱动调试-dump_stack?

dump_stack() 是 Linux 内核中一个关键的调试函数,用于在系统发生异常(如内核panic、oops或死锁)时打印当前线程的调用堆栈信息...

如何进行Linux驱动调试-oops?

oops是Linux内核中用于处理严重错误的机制。当内核检测到无法恢复的错误(如空指针解引用、非法内存访问等)时,会触发...

如何进行Linux驱动调试-BUG_ON?

BUG_ON()是Linux内核中一个用于调试和错误处理的宏,用于在特定条件为真时触发内核异常(如panicoops),并打印调试信息(包括调用堆栈)...

如何进行Linux驱动调试-WARN_ON?

dump_stack函数的基础上还有一个WARN_ON()函数。 WARN_ON() 是Linux内核中一个用于调试的宏,用于在特定条件为真时触发警告并打印警告信息,同时输出当前线程的调用堆栈(Call Stack)...

简单介绍Linux proc文件系统

proc文件系统是一个由内核动态生成的虚拟文件系统,挂载在/proc目录下。它不占用物理存储空间,而是通过内存实时反映系统和进程的运行状态...

Linux内核调试-IO总结

这里总结了Linux IO相关的调试工具。包含性能指标和常用功能图表,可以通过图表很方便的找到对应的工具...

Linux内核调试-内存总结

这里总结了Linux 内存相关的调试工具。包含性能指标和常用功能图表,可以通过图表很方便的找到对应的工具...

Linux内核调试-网络总结

这里总结了Linux 网络相关的调试工具。包含性能指标和常用功能图表,可以通过图表很方便的找到对应的工具...

CPU性能瓶颈分析

人在家中睡,锅从手机来。某天深夜接到几十条夺命短信,床头的手机不停地振动。你妈的,谁他妈在深夜不停发短息。匆忙拿起床头的手机,刺眼的屏幕亮瞎了程序员的狗眼。一阵恍惚后,定眼一看,坏事了...

在Linux内核中如何映射物理地址?

Linux内核中,一般使用ioremap将物理地址映射到内核虚拟地址空间,使内核能够通过指针访问设备的内存或寄存器。主要用于访问设备的内存映射I/O区域...

Linux内核调试总结

这里总结了Linux内核调试的常用工具。包含了CPU,内存,IO和网络相关的调试工具。每个类别都有对应的性能指标和常用功能图表,可以通过图表很方便的找到对应的工具...

Linux内核调试-CPU总结

这里总结了Linux CPU相关的调试工具。包含性能指标和常用功能图表,可以通过图表很方便的找到对应的工具...

Linux驱动相互调用

应用层的程序一般都会依赖一些外部的库,驱动程序也不例外。驱动间也可以形成一个依赖链,将驱动的功能分割到不同的驱动。能减少驱动的复杂性和增加可维护性...

如何使用i2c-tools调试设备

在进行嵌入式Linux开发的过程中,经常需要和i2c设备打交道。所以需要获取i2c设备的状态,进行读写操作。在开源的世界里,当然有大神已经为我们写好了对应的工具:i2c-tools...

如何使用find和sed命令批量替换文件中的字符串?

在进行代码重构的过程中,经常需要对代码中的变量名进行批量修改,使用vscode等现代化的IDE或编辑器,能很快的进行修改。但使用vim且没有安装对应插件的情况下,就没那么方便了...

在Linux中使用devmem快速操作物理地址

在调试嵌入式Linux开发板的过程中,很多时候都需直接操作物理地址。例如设置GPIO地址。如果单独写一个驱动,就有点高射炮打蚊子了。正好在有一个工具devmem能快速操作物理地址...

Linux中的likely和unlikely函数有什么用?

Linux内核中,likelyunlikely是用于优化条件分支预测的宏,定义在compiler.h头文件中。它们通过提示编译器某个条件更可能为真或假,帮助生成更高效的代码...

Linux中的access_ok函数到底是什么?

access_ok函数用于验证用户空间指针在内核空间中是否有效且可访问。这是一项重要的安全检查,确保内核不会无意中访问无效或恶意的用户空间内存,否则可能导致安全漏洞、崩溃或未定义行为...

如何使用sysdig跟踪调试内核?

Sysdig是一款功能强大的开源系统监控和故障排查工具,主要用于Linux系统的监控、分析和诊断。它能够捕获系统的实时活动,并提供详细的系统调用信息,帮助用户深入了解系统行为和性能问题...

Linux中的Buffer和Cache有什么区别?

在编程的时候,经常听见buffercache,很多时候我们都不区分它们。但在操作系统中,它们是完全不同的两个概念。下面我带大家来看看它们两个到底是什么多西...

如何使用systemtap跟踪调试内核?

SystemTap是一种用于Linux系统的动态追踪工具,允许用户监控和分析内核及用户空间程序的运行情况。它通过编写脚本插入探针,实时收集数据,帮助诊断性能问题、调试代码和理解系统行为...

如何给Linux内核驱动传递参数?

在写函数的时候,为了控制内部的运行逻辑或者对内部进行初始化,一般都会给函数传入参数。同样的为了控制内核驱动的行为,我们也希望在驱动加载的时候给它传入初始化参数...

如何使用bpftrace跟踪调试内核?

bpftrace是一个基于eBPF(扩展的伯克利包过滤器)的高级跟踪工具,用于动态追踪Linux系统的行为和性能。它允许用户通过简单的脚本语言编写跟踪程序,实时监控内核和用户空间的活动...

如何使用bcc跟踪调试内核?

BCC(BPF Compiler Collection)是一个用于创建高效内核跟踪和操作的工具包,基于 eBPF(extended Berkeley Packet Filter)技术。eBPF允许用户在不修改内核源代码或加载内核模块的情况下,安全地运行自定义代码...

如何使用perf跟踪调试内核?

perfLinux系统中的一个性能分析工具,用于监控和分析系统及应用程序的性能。它基于内核的perf_events接口,能够收集硬件(如 CPU 性能计数器)和软件事件(如上下文切换、缺页异常等)的数据...

如何使用trace-cmd跟踪调试内核?

trace-cmd是一个用于控制Linux内核跟踪工具ftrace的命令行工具。ftraceLinux内核内置的跟踪框架,能够帮助开发者调试和分析内核行为。trace-cmd简化了ftrace的使用,提供了更友好的接口来配置、启动、停止和查看跟踪数据...

如何使用ftrace跟踪调试内核?

ftraceLinux内核中的一种跟踪工具,用于分析和调试内核行为。它通过在内核函数中插入钩子来捕获函数调用、返回及其他事件,帮助开发者了解内核的执行流程和性能瓶颈...

qemu启动的内核如何使用nfs文件系统?

在嵌入式Linux开发的调试过程中,如果需要频繁的更新文件系统中的内容是一个很麻烦的过程。所以Linux内核提供了能够通过使用nfs文件系统启动的功能...

如何将驱动添加到内核源码树?

大多数时候我们都不需要将内核驱动添加到内核源码中,可以通过insmod命令在需要的时候自己手动安装驱动。不过将驱动添加到源码树中有下面的好处...

我的第一个内核驱动程序?

学习Linux内核相关知识从什么角度入手不好把握。有的人喜欢从文档开始看,了解整个内核的体系结构,再看源代码。有的人喜欢一开始就看源代码,不过内核源码有900M,就算是去除驱动相关代码也有400M...

如何使用qemu启动Linux?

最近在学习内核相关的知识,所以有一个Linux内核调试环境是非常有必要的。我选择在ubuntu 24.04上使用qemu启动内核,主要是qemu启动速度快...

如何在Linux上安装PyTorch?

AI是当下最热门的话题之一。而且大部分的AI相关框架都是使用python进行开发。正所谓万事开头难,第一步当然是搭建python开发环境...

如何给Nginx启用SSL?

最近开始写个人博客。一开始使用nginxhttp协议进行反向代理,但是大部分浏览器都会提示不安全。心想一个纯文本的网站也不涉及隐私数据就没有去管...

上一页 1 / 1 下一页