Linux 内核驱动
文章平均质量分 86
以笔者日常工作中遇到的问题为抓手,进行解析
yasin墨染锦年
嵌入式软件工程师,欢迎骚扰
展开
-
linux驱动开发之常见面试问题
A:可以通过宏找到这个私有结构体的指针。是 Linux 内核中一个常用的宏,用于从一个结构体中的某个字段获取该结构体的指针。这在实现容器数据结构时非常有用,尤其是在链表中。原创 2024-02-06 13:43:09 · 2218 阅读 · 1 评论 -
RK3566底层CPU接口部分
CPU温度CPU温度:cat /sys/class/thermal/thermal_zone0/temp GPU温度:cat /sys/class/thermal/thermal_zone1/tempCPU电压cat /sys/kernel/debug/regulator/vdd_cpu/voltage查看CPU电压cat /sys/kernel/debug/regulator/vdd_cpu/cpu0-cpu/min_uV#查看最低电压cat /sys/kernel/debug/原创 2022-04-22 23:33:45 · 2298 阅读 · 0 评论 -
【linux内核】DP83867添加GMII模式支持
它包含了一些位字段,用于指示PHY的当前状态和支持的功能。BMCR(Basic Mode Control Register):BMCR寄存器用于控制PHY的基本模式和功能。它包含了一些位字段,用于配置和控制PHY的操作。它采用了先进的数字信号处理技术,具有优异的抗干扰性能和噪声抑制能力,可以在恶劣的工业环境下稳定运行。它还提供了丰富的功能和配置选项,如自适应等速率、自动协商、远程电源管理和诊断功能等,以满足不同应用的需求。是与以太网物理层收发器(PHY)相关的寄存器,用于控制和监测PHY的基本模式和状态。原创 2023-08-24 15:12:37 · 486 阅读 · 0 评论 -
【linux内核】使用ftrace追踪函数调用
Ftrace是Linux内核中的一种跟踪工具,用于分析和调试内核代码的执行过程和性能。它可以帮助开发人员识别性能瓶颈、系统调用和函数调用路径,从而优化系统的运行。Ftrace提供了多种跟踪事件和功能,使开发人员能够深入了解内核的运行情况。以下是Ftrace的一些主要组件和功能:Tracepoints: 这是内核中一些关键点的预定义位置,用于在代码执行时插入跟踪事件。开发人员可以选择在特定的tracepoints上收集跟踪数据,以便分析内核的行为。原创 2023-08-23 17:38:39 · 576 阅读 · 0 评论 -
linux常用函数介绍(二)
在NUMA系统中,每个处理器都有自己的本地内存(本地节点),同时可以访问其他处理器的远程内存(远程节点)。通过合理的设置和优化,可以最大程度地利用NUMA系统的性能优势,并减少远程内存访问的影响。请注意,上述仅列举了一部分常用的原子操作函数和宏,Linux内核提供了更多的原子操作函数和机制,可根据具体需求选择合适的函数和宏进行使用。此外,不同的操作系统和编程语言可能提供不同的NUMA相关函数和接口,因此具体的代码实现可能会有所差异。它提供了一种高效的方式来查找位图中下一个为0的位,以便进行相应的操作。原创 2023-07-27 10:44:48 · 6859 阅读 · 1 评论 -
linux常用函数介绍(三)
该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。函数)是 指在事先知道设备主设备号的情况下,通过参数函数指定第一个设备号(它的次设备 号通常为 0)而向系统申请分配一定数目的设备号。是Linux内核中用于表示设备号的数据类型,由主设备号和次设备号组成,用于唯一标识系统中的设备。主设备号范围的函数,它提供了一种方便的方式来分配设备号范围,并将其用于字符设备的注册和使用。)提供对设备的访问。原创 2023-07-27 10:11:20 · 3137 阅读 · 0 评论 -
chatgpt快问快答之linux驱动介绍
在 Linux 中,驱动程序可以分为以下几种类型:字符设备驱动(Character Device Driver):字符设备驱动用于管理字符设备,例如终端设备、串口设备等。它们通过字符设备接口提供对设备的读取和写入操作。块设备驱动(Block Device Driver):块设备驱动用于管理块设备,例如硬盘、固态硬盘等。它们通过块设备接口提供对设备的读取和写入操作。网络设备驱动(Network Device Driver):网络设备驱动用于管理网络接口卡和网络设备。原创 2023-07-26 15:55:50 · 441 阅读 · 0 评论 -
linux内核驱动常用代码讲解
生产者与消费者是两个独立的并发体,他们之间是用缓冲区作为桥梁连接,生产者只需要往缓冲区里丢数据,就可以继续生产下一个数据,而消费者只需要从缓冲区了拿数据即可,这样就不会因为彼此的处理速度而发生阻塞。设备驱动程序通过调用cdev_add把它所管理的设备对象的指针嵌入到一个类型为struct probe的节点之中,然后再把该节点加入到cdev_map所实现的哈希链表中。所谓设备类,是指提供的用户接口相似的一类设备的集合,常见的设备类的有block、tty、input、usb等等。该散列表中的每一个元素是一个。原创 2023-07-24 15:18:51 · 258 阅读 · 0 评论 -
英特尔QAT加速卡说明(一)
英特尔Quick Assist Technology (以下简称QAT)是英特尔针对网络安全和数据存储推出的一个硬件加速技术。QAT支持对称数据加密算法(如AES)中的密码操作和验证操作运算和公钥非对称数据加密算法(如RSA、椭圆曲线等)中的加密运算。逻辑实例可以将逻辑实例视为到硬件的通道。逻辑实例允许地址域(即内核空间和单个用户空间进程)配置由该地址域使用的环,并定义该环的行为。QAT Ac...原创 2020-03-17 10:05:20 · 53488 阅读 · 6 评论 -
报错 kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [insmod:55902]处理
运行之前说的tcrypt.c的修改程序(只跑摘要算法md5,sha1)insmod tcrypt.ko sec=2 mode=400报错 kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [insmod:55902]并且有堆栈[106091.127829] testing speed of async md5 (md...原创 2020-03-16 15:43:58 · 16346 阅读 · 1 评论 -
Linux下CPU信息查看 ——对/proc/cpuinfo的分析
在Linux系统中,提供了proc文件系统显示系统的软硬件信息。如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到。我们来看看X86和ARM平台下CPU信息的差异。基于不同指令集(ISA)的CPU产生的/proc/cpuinfo文件不一样,基于X86指令集CPU的/proc/cpuinfo文件包含如下内容:processor : 60vendor_id...原创 2020-03-25 09:44:19 · 39872 阅读 · 0 评论 -
内核算法自检模块tcrypt的加载流程
纯原创哈,在使用内核目录加密模块下的tcrypt.c时遇到了如下问题。modprobe: ERROR: could not insert 'tcrypt': Resource temporarily unavailable百度上完全找不到答案,在谷歌时找到了一点线索~下面是我的加载流程:1.进入默认内核目录下(例:/usr/src/kernels/linux-4.9.25.arm64.1...原创 2020-03-12 17:31:12 · 36119 阅读 · 2 评论 -
网卡驱动:stmmac DMA接收流程(待完善)
在打开网卡时,stmmac_init_rx_buffers()函数负责分配dma buffer。分配skb用于zero-copy,以后再接收软中断中直接使用rx_q->rx_skbuff[i],并交给上层协议处理进行dma映射,得到rx_q->rx_skbuff_dma[i] 源地址(即物理地址)在des0设置源地址(即填充buffer地址)原创 2023-06-19 14:04:36 · 1143 阅读 · 0 评论 -
Linux内核中64位除法函数do_div
使用asm/div64.h中宏do_div#include <asm/div64.h>unsigned long long x,y,result;unsigned long mod;mod = do_div(x,y);result = x; 64 bit division 结果保存在x中;余数保存在返回结果中。【问题】编译Linux下面的代码,经常会遇到这种错误:...原创 2020-03-30 16:15:43 · 6307 阅读 · 0 评论 -
PCIe扫盲——PCIe简介
PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。 由Intel在2001年的IDF上提出,由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力强,传输距离远,功耗低等优点。注:第一代总线一般指ISA、EISA、VESA和Micro Platforms。第二代总线一般指PCI、AGP和...原创 2020-03-30 11:41:45 · 4638 阅读 · 0 评论 -
排除异常线程
通过top、ps命令查看实时线程,未发现异常slabinfo内存管理器(1)slabtop命令,查看无异常;(2)查看slabinfo信息(cat /proc/slabinfo)slab是Linux内核中按照对象大小进行分配的内存分配器,通过slabinfo可以观察到系统中内存分配情况。——size-128一直在增加,说明128字节的内存大小空间存在使用后未释放。...原创 2020-03-30 11:24:46 · 3332 阅读 · 0 评论 -
Linux内核问题分析方法
定位内核问题难点死机没有现场或信息不全,有信息无法进一步分析;调试困难,gdb只能作为辅助;内核庞杂,系统代码量大,无从下手;问题的表现和问题的原因不一定直接关联。linux内核堆栈大多是我们开发的模块问题。Linux内核问题分类按问题源头分:原生内核&开发模块按严重层度分:致命问题&严重问题按分析难易分:有现场&没有现场内核问题常见表现:kern...原创 2020-03-30 11:18:45 · 11664 阅读 · 1 评论 -
调整内核模块加载顺序
换公司后好久没有整理文章了,不得不说飞书集成文档是相当的方便啊~思路1自己构思方案是使用wait_event阻塞线程来等待条件达成。结构体内wait_queue_head_t rd_waitq;init_waitqueue_head(&trig_pdata->rd_waitq);wait_event_interruptible_timeout(trig_pdata->rd_waitq, (xxx_count == 2), msecs_to_jiffies(10000));原创 2022-04-22 23:18:56 · 2046 阅读 · 0 评论