Linux驱动
文章平均质量分 85
记录 Linux 驱动开发部分知识内容
跑不了的你
本人懒···就是懒···但是愿意学习,欢迎互相交流,共同进步,可以加qq490165508以及VX 18334728131 大家一起学习,一起进步。
展开
-
Linux USB 设备检测
但是 lsusb 仅能查看当前的简单 USB 设备信息,要查看详细的 USB 设备信息,最好还是借助 Linux 下的 debugfs 机制。带宽信息(Bandwidth)原创 2023-05-14 17:35:53 · 2210 阅读 · 1 评论 -
【嵌入式软件开发】芯片外设接口测试工具编写
【嵌入式软件开发】芯片外设接口测试工具编写工具主要包含如下接口功能测试代码展示工具主要包含如下接口功能测试RTC时钟DIDO串口风扇网卡通信代码展示#include <iostream>#include <string>#include <linux/rtc.h>#include <sys/ioctl.h>#include <sys/time.h>#include <sys/types.h>#inclu原创 2023-03-10 17:58:44 · 268 阅读 · 0 评论 -
OpenHarmony 标准系统 HDF 框架音视频驱动开发
根据 OpenHarmony 系统的自下而上的层次结构划分:内核层、系统服务层、框架层和应用层。内核层包含两方面,内核子系统和驱动子系统。这层主要以 HDF 驱动框架为基础实现音频 codec 驱动,audio HDI 接口的封装。由于产品形态和解决方案的多样化,音频 codec 的驱动方式也分用户态驱动方式和内核态驱动方式来实现。音频 codec 驱动工作后需要对硬件资源进行统一抽象封装,对上层暴露统一的音频接口,这样做的目的就是符合音频规范化操作,保证生态良性发展。原创 2023-01-09 16:42:48 · 2283 阅读 · 1 评论 -
OpenHarmony 标准系统HDF框架之I2C驱动开发
I2C 基础知识:概念和特性、4 个地址(设备地址、读地址、写地址、字地址)、波形(起始、结束、数据发送、数据接收)I2C 调试手段:电压、上拉电阻、/dev/i2c-x、i2c-toolsHDF 框架 I2C 驱动:AT24C256 芯片按照字节寻址方式读写(按照页 64 字节寻址、连续读写)原创 2023-01-06 16:16:16 · 3024 阅读 · 0 评论 -
openharmony GPIO 驱动开发
GPIO:通用和专用 IO 的区别、不同平台下的 GPIO 的分组和编号、GPIO 常用调试手段HDF 驱动:GPIO 接口的配置方式、读写操作、中断,两种方式实现应用和驱动的通信,缓冲区的基本操作,基本覆盖了全部的 GPIO 接口提供一套完整的驱动程序和应用程序,并给出其目录结构。原创 2023-01-03 16:39:17 · 1135 阅读 · 0 评论 -
OpenHarmony HDF 框架介绍
openharmony 系统 HDF 驱动框架采用 C 语言面向对象编程模型构建,通过平台解耦、内核解耦,来达到兼容不同内核,统一平台底座的目的,从而帮助开发者实现驱动一次开发,多系统部署到的效果。为了达成这样一个目标,openharmony 系统 HDF 驱动框架提供了:操作系统适配层(OSAL):对内核操作系统相关接口进行统一封装,屏蔽不同系统的操作接口;原创 2023-01-03 09:21:54 · 1992 阅读 · 1 评论 -
RK3568 kernel阶段播放开机动画方案实现
基于 RK3568 在 kernel 阶段显示开机 logo 动画,本质原理是将 logo 图片采用刷新的方式演示成为开机动画的效果。kernel 版本采用 4.19 版本(5.10 同样适用)。本文将首先描述如何将一张自定义的图片修改添加到 kernel 中称为 kernel 的开机动画(该方式将不仅仅是在 kernel 路径下替换 logo.bmp 这么简单)。kernel 层开机 logo 显示修改代码,实现开机动画效果。原创 2022-11-22 14:21:46 · 2746 阅读 · 4 评论 -
openwrt RK3568_EVB移植
基于firefly的ROC-RK3568-PC上的openwrt进行移植到RK3568_EVB1_DDR4_V10板子上,通过观察发现,ROC-RK3568-PC这个板子本身是基于RK3568_EVB1_DDR4_V10进行开发的(通过比较两者的dts可以看到)。完成后产生的新的固件ZMJ-ROC-RK3568-PC-OPENWRT-GPT-20220727-1059.img就可以正常烧写到RK3568_EVB1_DDR4_V10板子上并启用了。...原创 2022-07-28 11:11:10 · 3615 阅读 · 7 评论 -
linux3.10使用PCIE-USB警告处理:needs XHCI_TRUST_TX_LENGTH quirk?
文章目录问题描述修改方式修改内容问题描述在龙芯2K1000上使用linux3.10内核时候,使用PCIE转USB上使用USB3.0,即XHCI协议时总是会报这样的警告:xhci_hcd 0000:14:00.0: WARN Successful completion on short TX: needs XHCI_TRUST_TX_LENGTH quirk?xhci_hcd 0000:1...原创 2020-01-16 17:36:10 · 788 阅读 · 0 评论 -
龙芯2K驱动开发——使用中断触发读取GPIO电平值上传给读取进程
文章目录龙芯2K1000平台下编写GPIO驱动满足应用使用代码具体如下:龙芯2K1000平台下编写GPIO驱动满足应用使用需求在指定GPIO0上升沿触发中断后读取当前指定的六个GPIO电平值,经过短暂编码转换后,将枚举变量值返还给用户空间应用程序使用。在触发中断后需要经过10ms的电平稳定时间。经过电平稳定时间后读取指定的六个GPIO管脚电平值,转换成预先设定的枚举变量。读取结果成...原创 2020-01-08 17:43:51 · 2647 阅读 · 2 评论 -
Linux驱动开发——内核I2C驱动
文章目录Linux内核i2c驱动编程i2c总线特性I2C总线特点可以概括如下:字节格式应答响应时钟同步Linux内核i2c驱动i2c总线驱动i2c设备驱动Linux内核i2c驱动框架编写i2c设备驱动程序实现原理i2c_clienti2c_driverSMBUS接口函数的使用步骤示例(MMA8653三轴加速度传感器使用)具体代码如下:Linux内核i2c驱动编程i2c总线特性I2C总线是由...原创 2020-01-05 20:19:23 · 3041 阅读 · 2 评论 -
Linux驱动开发——物理地址映射(②)
文章目录用户空间下的物理地址映射mmap系统调用函数mmap系统调用的实现过程对应的底层驱动的mmap接口用户空间下的物理地址映射前一篇讲述了利用imremap函数完成Linux内核空间下的物理地址映射到内核虚拟地址空间上。那么如何能够将外设的物理地址映射到用户空间下的虚拟地址呢,如果一旦完成将外设的物理地址映射到用户空间下的虚拟地址,那么用户就可以直接通过这种映射访问外设的物理地址。利...原创 2020-01-03 23:32:25 · 930 阅读 · 0 评论 -
Linux驱动开发——物理地址映射(①)
文章目录Linux驱动开发之物理地址映射ioremap函数使用方式方式一方式二不使用GPIO库函数方式来修改之前操作LED灯代码示例总结Linux驱动开发之物理地址映射如果不采用GPIO库函数,那么我们如何能在底层驱动中访问外设对应的硬件寄存器呢?是像类似单片机编程一样直接对硬件寄存器访问么?在Linux系统中,不管是在用户空间还是内核空间一律不允许直接访问硬件外设的基地址(包括寄存器...原创 2020-01-02 21:53:15 · 2726 阅读 · 5 评论 -
Linux驱动开发——去除按键抖动问题
文章目录Linux内核按键去抖动问题按键抖动按键驱动的方法Linux内核去除抖动的原理代码示例总结Linux内核按键去抖动问题按键抖动按键抖动表现出来的现象其实就是明明只是按下去一次按键,但是却总是触发多次中断,本质其实是因为按键属于机械结构,所以不可避免会在按下和松开时产生意外的中断触发。按键驱动的方法按键去抖动的方法有两种:硬件去抖动:硬件工程师只需要添加一个滤波电路等方式即...原创 2020-01-02 20:49:43 · 1971 阅读 · 0 评论 -
Linux驱动开发——内核延时操作和内核等待队列
文章目录Linux内核延时概念应用场景Linux内核相关延时函数Linux内核等待队列机制概述等待队列的功能驱动编程实施步骤示例代码(一)示例代码(二)总结Linux内核延时概念延时又称为等待,延时分为两类:忙延时和休眠延时。忙延时: 当任务进行忙延时时,任务将会导致所占用的CPU资源进行白白消耗,类似原地空转。休眠延时: 进程进入休眠状态,进程会释放所占用的CPU资源给其他进程使用。...原创 2020-01-01 22:21:05 · 1472 阅读 · 0 评论 -
Linux驱动开发——并发和竞态(原子操作方式的使用⑤)
文章目录解决竞态引起异常方法之原子操作原子操作特点位原子操作使用方式比较:整形原子操作使用方式比较:示例代码解决竞态引起异常方法之原子操作原子操作特点原子操作能够解决所有的竞态问题。Linux内核原子操作分为两类:位原子操作和整形原子操作 。位原子操作位原子操作 = 位操作的过程具有原子性 = 对共享资源进行位操作的过程中不允许发生CPU资源的切换。应用场景:如果在代码中发现需要对...原创 2020-01-01 08:49:43 · 425 阅读 · 0 评论 -
Linux驱动开发——并发和竞态(信号量方式的使用④)
文章目录解决竞态引起异常的方法之信号量解决竞态引起异常的方法之信号量其实信号量不同于其他方式能够解决临界区内有休眠操作的问题,最主要的原因是信号量的获取和释放只会影响到需要访问临界区的进程任务,并且在获取访问临界区条件不成立时会进入休眠并释放CPU资源(也就是不会占用消耗CPU资源)。而屏蔽中断、自旋锁、衍生自旋锁则不一样。最主要的是几种方式在访问临界区条件不成立的时候的影响不一样(当前有任务在访问临界区,所以其他任务不能访问)原创 2020-01-01 08:14:08 · 374 阅读 · 0 评论 -
Linux驱动开发——并发和竞态(自旋锁方式的使用③)
文章目录解决竞态引起异常的方法之自旋锁解决竞态引起异常的方法之自旋锁原创 2019-12-31 22:30:18 · 427 阅读 · 0 评论 -
Linux驱动开发——并发和竞态(中断屏蔽方式的使用②)
文章目录原创 2019-12-31 08:04:38 · 337 阅读 · 0 评论 -
Linux驱动开发——并发和竞态(概念介绍①)
文章目录Linux内核并发和竞态案例一:案例二:分析相关概念Linux内核解决竞态引起的异常(漏洞)的方法Linux内核并发和竞态案例一:前面就发现了在Linux内核中使用全局变量或者多线程可能同时访问的区域会遇到竞态的问题,比如前面的定时器使用的实现部分就发生了并发问题。Linux驱动开发——定时器造成这样的原因是因为当我们按下按键的时候会操作多次按键中断触发,而在按键中断处理函数中会...原创 2019-12-30 22:17:28 · 369 阅读 · 1 评论 -
Linux驱动开发——定时器
文章目录Linux内核定时器硬件定时器硬件定时器特点硬件定时器对应的中断处理函数Linux内核跟时间相关的概念软件定时器Linux内核软件定时器的特点Linux内核软件定时器的相关数据结构和配套函数Linux内核定时器硬件定时器硬件定时器特点硬件定时器能够按照一定的频率周期性的有规律的给CPU发送中断信号,发送中断的频率(周期)可以通过软件编程来设置,硬件定时器产生的中断信号可以称之为时...原创 2019-12-30 21:49:24 · 1852 阅读 · 2 评论 -
Linux驱动开发——中断编程之顶半部与底半部机制(1)
中断编程原创 2019-12-29 22:53:07 · 559 阅读 · 0 评论 -
Linux驱动开发——(使用中断处理)gpio(6)
文章目录Linux内核中断编程为什么会有中断机制?中断的硬件触发流程使用中断处理编程Linux内核中断编程的操作步骤驱动开发中断处理相关函数API示例(按键中断触发)代码实现:执行结果:Linux内核中断编程为什么会有中断机制?中断产生的根本原因就是因为外设的数据处理速度远远慢于CPU,比如使用CPU读取UART接收缓冲区的数据,当使用CPU读取UART接收缓冲区的数据时,发现UART接收...原创 2019-12-29 09:51:56 · 5667 阅读 · 0 评论 -
Linux驱动开发——(次设备号使用及混杂设备驱动开发)gpio(5)
文章目录次设备号使用及混杂设备驱动开发使用次设备号字符设备驱动——struct file数据结构案例:将四个LED灯作为四个相同的设备个体,共享一个驱动,但是对应不同的次设备号。驱动示例代码实现:示例运行:Linux混杂设备驱动开发Linux内核混杂设备特点Linux内核描述混杂设备的数据结构代码示例(gpio-led):执行结果次设备号使用及混杂设备驱动开发使用次设备号之前我们都是使用一...原创 2019-12-28 22:26:36 · 677 阅读 · 0 评论 -
Linux驱动开发——(Linux内核字符设备文件的自动创建)gpio(4)
文章目录Linux内核字符设备文件的自动创建自动创建字符设备文件概述字符设备文件的自动创建只需要“三个保证”+“四个函数”三个保证四个函数修改之前LED驱动代码运行结果Linux内核字符设备文件的自动创建前面已经描述过通过mknod命令可以手动创建字符设备文件,那么如何实现自动创建设备文件呢?自动创建字符设备文件概述字符设备文件的自动创建只需要“三个保证”+“四个函数”三个保证保证...原创 2019-12-28 21:07:35 · 689 阅读 · 0 评论 -
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
文章目录linux内核字符设备硬件操作接口之ioctlioctl系统调用函数的使用使用参考:对应的底层驱动的ioctl接口LED灯使用示例:操作流程:linux内核字符设备硬件操作接口之ioctlioctl系统调用函数的使用对于ioctl这个系统调用接口,Linux的创始人在2.0版本之前并没有进行添加,仅有write和read两个接口,但是后来发现当需要去控制文件的某些操作的时候,很显...原创 2019-12-27 21:45:35 · 1589 阅读 · 1 评论 -
Linux驱动开发——(Linux内核系统调用实现原理)gpio(2)
文章目录Linux内核系统调用实现原理Linux设备驱动相关概念Linux内核设备驱动分类字符设备文件特点及属性字符设备文件创建的方法主设备号、次设备号、设备号Linux相关库函数字符设备相关数据结构配套相关函数编写Linux字符设备驱动步骤定义初始化硬件操作接口对象:定义初始化字符设备对象:最终向内核注册字符设备对象从内核卸载字符设备对象最后编写之前定义的设备接口具体内容示例具体代码:测试执行:...原创 2019-12-23 22:09:40 · 764 阅读 · 0 评论 -
Linux驱动开发——(Linux内核GPIO操作库函数)gpio(1)
文章目录Linux内核GPIO操作库函数int gpio_request(unsigned gpio, const char *label)void gpio_free(unsigned gpio)int gpio_direction_output(unsigned gpio, int value)int gpio_direction_input(unsigned gpio)int gpio...原创 2019-12-23 20:33:08 · 1904 阅读 · 0 评论 -
Linux嵌入式驱动开发——platform机制的使用(led驱动示例实现)
Linux内核分离思想:platform平台方式的使用原创 2019-12-15 20:45:25 · 706 阅读 · 0 评论