Linux设备驱动
文章平均质量分 79
Linux驱动学习
欲盖弥彰1314
如有一味绝境,非历十方生死。
展开
-
Linux 驱动 | hy46xx触摸屏驱动
hy46xx Touch IChy46xx是HYCON科技一款触摸IC。上电时序:通信接口:使用IIC通信中断方式:当INT引脚产生下降沿的时候,触摸数据就绪,这样就可以在中断中读取如果使用线程轮询方式获取触摸数据,则可以通过判断INT引脚是否为低电平来判断触摸数据是否就绪两种实现驱动方式:按照IIC设备驱动一般框架驱动芯片获取触摸坐标,这种方式的缺点:不兼容旧的或别人的触摸相关的应用程序按照内核input输入子系统框架来实现触摸驱动MT(Multi-touch)多点原创 2022-04-04 11:57:54 · 1748 阅读 · 1 评论 -
Linux驱动 | MPU6050 驱动(regmap子系统)
regmap子系统在芯片驱动开发中,基本都是读写操作寄存器。常用到的接口都是如SPI、I2C,对于一些硬件则可能会支持两种接口,对于Linux的SPI、I2C总线,它们读写操作接口是不同,但是针对这些硬件而言无论使用哪种接口它们最终读写寄存器的方式都是一样。针对这种更换接口就要将驱动改动很大的做法在Linux下是不可想象,基于分层分离的思想,代码复用等原则,Linux下引入了regmap模型,将SPI、I2C这些常用接口统一抽象成regmap APISOC内部寄存器也可以使用Regmap原创 2022-04-01 20:37:41 · 1039 阅读 · 0 评论 -
Linux驱动 | MPU6050驱动(I2C)
MPU6050驱动(IIC驱动)原创 2022-04-01 20:35:39 · 1606 阅读 · 4 评论 -
Linux 驱动 | SPI子系统
SPI子系统原创 2022-04-01 00:00:04 · 2274 阅读 · 0 评论 -
Linux驱动 | I2C子系统
I2C子系统Linux的总线基本都遵循分层分离原则。I2C子系统框架可以看到I2C子系统也是分层分离。在STM32的I2C驱动中,一般要编写两部分代码,一部分是STM32的I2C控制器代码,一部分跟具体芯片相关的代码。跟I2C控制器驱动的代码一旦写好,后续使用就不用修改Linux中的I2C驱动也是这样做的,抽象出了两部分 : I2C适配器驱动 和 I2C设备驱动I2C适配器驱动是跟芯片控制器相关的驱动,一般是由芯片厂商实现添加进linux内核源码中。而一般工程师要实现的就是I2C设备驱动原创 2022-03-27 06:37:56 · 1336 阅读 · 0 评论 -
IMX6ULL 基于NXP官方Linux源码添加自己单板
编译NXP官方Linux内核每个板子都有默认配置文件,都保 存 在 arch/arm/configs目录下imx_v7_defconfig和imx_v7_mfg_defconfig 都可作为 I.MX6ULL EVK 开发板所使用的默认配置文件但imx_v7_mfg_defconfig编译出来的zImage可以使用MfgTool工具烧录配置编译: make_nxp_linux.shares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$原创 2022-04-09 18:12:29 · 787 阅读 · 0 评论 -
在内核目录中编译驱动与Kconfig
查看驱动目录下的makefile可以看到很多配置项linux\drivers\char\Makefile:obj-$(CONFIG_DTLK) += dtlk.oobj-$(CONFIG_APPLICOM) += applicom.oobj-$(CONFIG_SONYPI) += sonypi.oobj-$(CONFIG_RTC) += rtc.oobj-$(CONFIG_HPET) += hpet.oobj-$(CONFIG_EFI_RTC) += efirtc.oobj-$原创 2022-04-05 11:13:49 · 1588 阅读 · 0 评论 -
Linux驱动 | OLED显示模块驱动(SPI)
设备树驱动实现测试程序原创 2022-04-01 21:30:39 · 3488 阅读 · 1 评论 -
Linux驱动 | AP3216C驱动(I2C)
I2C总线驱动内核缺陷:即使不用id_table也要加上,不然设备树匹配方式of_match_table无法匹配成功原创 2022-04-01 00:01:18 · 2493 阅读 · 2 评论 -
Linux驱动 | DHT11驱动
DHT11原创 2022-03-27 07:20:54 · 3068 阅读 · 5 评论 -
Linux驱动 | DS18B20驱动编程
DS18B20原创 2022-03-26 22:28:50 · 2224 阅读 · 2 评论 -
Linux驱动 | HC-SR04超声波模块驱动
HC-SR04超声波模块原创 2022-03-26 16:57:06 · 3246 阅读 · 12 评论 -
Linux驱动 | HC-SR501红外热释电驱动(中断&内核线程)
HC-SR501红外热释电驱动原创 2022-03-26 16:42:41 · 1739 阅读 · 1 评论 -
Linux驱动 | 按键驱动开发
按键驱动按键驱动和LED驱动是最简单的驱动了,但是从这些最简单的驱动中可以学到不简单的东西,可以学习到Linux设备驱动的框架。Linux驱动 = 框架 + 硬件操作驱动只提供能力,具体需要怎样操作取决于应用程序。1、自定义设备节点方式实现按键驱动2、使用输入子系统框架实现按键驱动...原创 2022-03-26 11:43:12 · 1172 阅读 · 0 评论 -
linux设备驱动 -- 并发与竞争
Linux设备驱动必须解决的问题:多个进程对共享资源并发访问,并发访问易导致竞态并发:多个执行单元同时、并行执行竞态:并发的执行单元同时访问共享资源(硬件资源和软件上的全局变量等)易导致竞态竞态产生的情况对称多处理器(SMP)的多个CPU核竞态可能发生于CPUx进程和CP3Uy进程、CPUx进程和CPUy的中断之间以及CPUx 中断和CPUy的中断之间单CPU内进程被高优先级进程打断高优先级的进程也要访问共享资源,这就易导致竞态中断原创 2022-03-25 20:31:06 · 490 阅读 · 0 评论 -
Linux设备驱动--input输入子系统
常见输入设备:按键、键盘、触摸屏、鼠标 等。典型的字符设备驱动。内核中一个通用的按键驱动:drivers/input/keyboard/gpio_keys.c基于input架构实现了一个通用的GPIO按键驱动用户空间接口/dev/input/event0/1/2/…/dev/input/mouse0/1/2/…/dev/input/sj0/1/2/……输入子系统框架—— 《linux设备驱动开发详解》分层模型核心层创建input设备类根据输入设备种类、分发事件到不同事件原创 2022-03-25 19:32:49 · 984 阅读 · 0 评论 -
Linux驱动 | LED驱动(使用PWM子系统)
Linux驱动 | LED驱动(使用PWM子系统)1、PWM子系统PWM子系统用于管理PWM波的输出。PWM子系统一般是由芯片厂商实现默认编译进内核。PWM子系统在内核原创 2022-03-25 19:30:14 · 2800 阅读 · 0 评论 -
Linux设备驱动 | LED字符设备驱动(设备树)
LED字符设备驱动(设备树)实验1、设备树的改动1.1 修改设备增加led节点内核源码设备树文件位置:ebf-buster-linux/arch/arm/boot/dts/imx6ull-seeed-npi.dts添加如下节点: red_led { #address-cells = <1>; #size-cells = <1>; compatible = "red_led";原创 2022-03-25 19:29:19 · 820 阅读 · 0 评论 -
Linux设备驱动 | LED字符设备驱动(platform平台总线)
platform平台总线实现LED字符设备驱动参考内核中存在的字符设备驱动进行编写,如misc.c这个经典的字符设备驱动。LED字符设备驱动平台设备实现1、查看手册获取相关寄存器#define CCM_CCGR1 0x20C406C#define MUX_PAD_GPIO1_IO04 0x20E006C#define GPIO1_DR 0x209C000#define GPIO1_GDIR 0原创 2022-03-25 19:25:51 · 1870 阅读 · 0 评论 -
Linux设备驱动 | LED字符设备驱动实验
Linux字符设备驱动Linux实现了一套字符设备驱动框架,编写字符设备驱动就按照框架进行编写。字符设备驱动结构框图:图片来自 – 《Linux设备驱动开发详解》最很重要的就是实现struct file_operations该结构中的函数。struct file_operations 结构体定义了字符设备驱动提供给虚拟文件系统的接口函数struct file_operations结构体定义:struct file_operations { struct module *owner; lo原创 2022-03-25 19:24:33 · 715 阅读 · 0 评论 -
Linux设备驱动--pinctrl子系统和gpio子系统
gpio和pinctrl的内核使用文档gpio子系统\Documentation\devicetree\bindings\gpio\gpio.txtpinctrl子系统\Documentation\devicetree\bindings\pinctrl\pinctrl-bindings.txtpinctrl子系统Linux中将芯片引脚的复用、配置抽出来,汇总了所有引脚的配置信息,做成pinctrl子系统给其他外设使用,而不用使用一个外设就要去查找寄存器一个一个配置。imx6ull原创 2022-03-25 19:23:30 · 1057 阅读 · 0 评论 -
ARM Linux设备树
1、设备树在过去的ARM Linux源码中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级设备硬件细节,而这些代码对内核来说就是垃圾由此引出了设备树。DTS(设备树)描述板级设备,起源自OpenFimware(OF)——图片来自野火Linux笔记设备树的中节点会转化为linux中device,会代替平台驱动中的device和平台驱动进行匹配。设备树文件也可以包含引用C语言的头文件2、设备树编译2.1 通过内核编原创 2022-03-25 19:22:11 · 889 阅读 · 0 评论 -
Linux设备驱动轮询操作--多路复用IO
应用程序中的轮询编程(多路复用IO)应用层提供的轮询(多路复用IO)的接口有三个,分别是poll、select、epoll,这三个函数对应了驱动file_operations结构体中的函数成员:__poll_t (*poll) (struct file *, struct poll_table_struct *);poll函数的典型模板;static unsigned int xxx_poll(struct file *filp, poll_table *wait){ unsigned原创 2022-03-24 20:48:03 · 1157 阅读 · 0 评论 -
Linux设备驱动--异步通知
Linux的异步通知是使用信号实现的。信号:是在软甲层上对中断机制的一种模拟。设备就绪,驱动会主动通知应用程序Linux中的信号:—— 《linux设备驱动开发详解》异步通知相关数据结构struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next;原创 2022-03-24 20:45:22 · 1667 阅读 · 0 评论 -
Linux内核定时器
Linux内核可选的配置系统频率100HZ200HZ250HZ300HZ500HZ1000HZ默认情况下选择的是100HZ。对应**.config**配置文件的内容:CONFIG_HZ_100=yCONFIG_HZ=100对应到内核源码include/arm-generic中的配置:#ifndef __ASM_GENERIC_PARAM_H#define __ASM_GENERIC_PARAM_H#include <uapi/asm-generic/param.h&原创 2022-03-24 20:10:41 · 567 阅读 · 0 评论 -
Linux---platform虚拟平台总线
platform虚拟平台总线1、平台总线的注册/driver/base/platform.c中实现struct bus_type platform_bus_type = { .name = "platform", .dev_groups = platform_dev_groups, .match = platform_match, .uevent = platform_uevent, .dma_configure = platform_dma_configure, .pm = &a原创 2022-03-24 19:36:10 · 404 阅读 · 0 评论 -
Linux驱动学习笔记 -- 驱动总线实验
驱动总线在Linux系统中,除了硬件总线,还有一种软件虚拟出来的总线 – 驱动总线bus这种驱动总线的作用:软件与硬件代码分离,提高程序的复用性驱动总线分三个部分: 三者都是在/include/linux/device.h中定义device - 关联硬件代码struct devicedevice_driver - 关联软件代码struct device_driverbus_type - 管理总线,设置匹配规则,device和device_driver通过匹配规则进行匹原创 2021-02-03 22:27:54 · 320 阅读 · 0 评论 -
Linux内核模块
目录Linux内核模块Linux内核模块的程序组成1、模块加载函数2、模块卸载函数3、模块许可证声明4、模块参数(可选)5、模块导出符号(可选)6、模块作者等信息声明(可选)7、导出符号共享导出符号到内核符号表:8、模块使用计数Linux内核模块不编译进内核映像,控制内核大小。可动态加载到Linux内核中执行的程序模块,不加载不执行,加载执行便成为内核一部分。模块文件后缀名为.ko,如hello.ko就是一个模块目标文件。insmod ./hello.ko or modprobe ./原创 2020-11-24 07:40:11 · 492 阅读 · 0 评论 -
《linux设备驱动开发详解》笔记——第5章Linux文件系统与设备文件
Linux文件操作的两种方式系统调用操作文件open、close、write、read 等函数Linux系统上查看 man手册 就可以知道这些函数的用法C库函数操作文件fopen、fclose、fwrite、fread等函数同样 Linux系统上查看 man手册 就可以知道这些函数的用法Linux文件系统目录Linux文件系统与设备驱动文件系统关于设备驱动之间的...原创 2020-01-11 23:08:11 · 299 阅读 · 0 评论 -
《Linux设备驱动开发》笔记--第4章Linux内核模块
Linux内核模块不编译进内核映像,控制内核大小。可动态加载到Linux内核中执行的程序模块,不加载不执行,加载执行便成为内核一部分。原创 2019-09-22 16:44:55 · 186 阅读 · 0 评论 -
《linux设备驱动开发详解》笔记--第3章linux内核组成
linux内核源码目录结构.arch 目录:硬件体系结构相关代码,以支持Linux内核进程调度、内存管理、中断等。每种架构对应一个目录,如386、ARM、PowerPC、MIPS等,还有对具体的Soc和开发板的支持代码。linux内核支持30种左右架构。...原创 2019-09-22 16:44:36 · 281 阅读 · 0 评论 -
《linux设备驱动开发详解》笔记--第1章linux设备驱动概述
一、linux操作系统的设备驱动硬件、设备驱动、操作系统、应用程序的关系操作系统作用:复杂的软件系统需要处理并发多任务,需要操作系统才易于实现并发多任务。二、linux设备分类Linux将存储器和外设分为3个基础大类。1、字符设备必须以串行访问的设备。如触摸屏、磁带驱动器、鼠标。2、块设备可以按任意顺序访问的设备,以块为单位操作。如硬盘、eMMC。3、网络设备用于面向数据...原创 2019-09-14 08:07:54 · 316 阅读 · 0 评论