Acuity.
只要思想不滑坡,想法总比问题多。
展开
-
【Linux驱动编程】regmap实例——bmp180驱动
本文基于regmap重写bmp180驱动程序。原创 2020-12-14 23:54:19 · 723 阅读 · 0 评论 -
【Linux驱动编程】regmap框架模型应用详解
regmap是在 Linux 内核为减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件寄存器的模型框架,简化驱动开发,提高访问效率。原创 2020-11-30 23:59:24 · 5080 阅读 · 0 评论 -
【Linux驱动编程】向驱动传递参数
linux内核提供驱动传参机制,编写驱动程序时实现传参接口,用户在加载驱动时传入指定参数,使得一个驱动程序更加灵活,向上可以适配复杂应用程序,向下兼容不同硬件设备。原创 2020-07-17 23:59:03 · 2707 阅读 · 1 评论 -
【Linux驱动编程】通过一个虚拟input设备熟悉input设备驱动开发步骤
在上一篇文章中主要对linux子系统的初步分析和使用步骤。本文章通过实现一个input设备驱动,进一步熟悉input驱动的开发步骤。原创 2020-05-13 23:50:59 · 956 阅读 · 0 评论 -
【Linux驱动编程】如何使用内核定时器
linux内核定时器是内核用于控制在未来某个时间点或者特定时间段内调度执行某个函数的一种机制。原创 2020-05-11 00:15:02 · 1141 阅读 · 0 评论 -
【Linux驱动编程】input子系统分析与应用
对于操作系统而言,输入设备众多,如果没有一个标准化程序框架,对于应用程序和驱动程序而言,会显得异常混乱,也不便于添加新的输入设备。原创 2020-04-27 23:47:16 · 770 阅读 · 0 评论 -
【Linux驱动编程】并发与竞态实例
在上一文章中主要描述了并发与竞态的含义、引发条件以以及竞态资源的保护机制。竞态(共享)资源保护机制主要包括屏蔽中断、原子操作、自旋锁、互斥体。场景参考使用机制整型变量加锁原子锁/自旋锁低开销加锁自旋锁短期加锁自旋锁...原创 2020-04-22 23:47:24 · 521 阅读 · 0 评论 -
【Linux驱动编程】并发与竞态(如何选择合适的保护机制)
linux系统作为一个现代高级操作系统,支持多用户、多任务访问,这就存在多个任务同时访问共享资源的情况,进而引发并发和竞态问题。原创 2020-04-19 14:23:38 · 1380 阅读 · 0 评论 -
【Linux驱动编程】多个源文件(platform driver)编译成一个模块
多个驱动源码文件编译成一个模块文件,以platform device和platform driver为例。原创 2020-04-08 22:37:16 · 1388 阅读 · 2 评论 -
【Linux驱动编程】mmap方法
mmap常规的应用是将普通文件映射到用户进程空间,提高文件读写效率。linux的思想是“一切皆文件”,对于设备文件而言,同样可以实现mmap映射。一个设备,一般涉及到帧缓存会考虑实现映射接口,常见的LCD<font color=cloor> framebuffer</font>设备的显存空间,经过映射后,用户进程可以直接操作进程内存空间将LCD显示数据写入,提高刷新效率,节省CPU拷贝内存开销。原创 2020-04-03 00:10:11 · 3961 阅读 · 4 评论 -
【Linux驱动编程】Linux字符驱动之sysfs接口实现
1. sysfs1.1 前言 在linux系统中,用户空间访问驱动程序一般是以“设备文件”的方式通过“read/write/ioctl”访问,但这种方式有几个明显的缺点。read/write接口功能是单一。ioctl虽然可以根据cmd参数实现多重功能,但它们都无法直接在shell/mash脚本中直接调用,必须通过C语言方式访问。ioctl二进制数据接口存在大小端问题,不同平台CPU...原创 2020-02-29 21:18:06 · 3074 阅读 · 0 评论 -
【Linux源码阅读】Linux 内核module_xxx_driver宏
在阅读其他人编写的Linux驱动源码发现,最后驱动注册和注销时并未使用传统的“module_init”和“module_exit”,而是使用一个宏“module_xxx_driver”代替,如module_i2c_driver、module_spi_driver、module_platform_driver等等。 Linux驱动程序模型是“总线驱动”+“设备驱动”,比如i2c总线和i2c...原创 2019-12-31 23:58:05 · 777 阅读 · 0 评论 -
【Linux驱动编程】Linux i2c设备驱动——BMP180
1. BMP180 BMP180是博世(BOSCH)公司的一款气压传感器,内置EEPROM存储大气压和温度校准系数,以数据接口i2c对外连接处理器。1.1 编程关键信息【1】i2c从地址 0x77(7bit有效地址,不包括读写位,Linux i2c总线驱动内部作读写位处理)【2】校准系数 处理器通过i2c读取BMP180的温度值和压力值是原始AD值,未经过校准补偿。每个BM1...原创 2019-12-29 23:57:08 · 1581 阅读 · 1 评论 -
【Linux驱动编程】Linux字符驱动之misc device
1. misc device1.1 什么是杂项设备 Linux常用的驱动设备分为字符设备、块设备、网络设备。字符设备是嵌入式Linux中常见的设备。misc device中文翻译称为“杂项设备”,杂项设备本质就是字符设备。嵌入式硬件上存在各类设备,如ADC、DAC、按键、蜂鸣器等,一方面不便于单独分类,另一方面驱动设备号分配有限,因此Linux系统引入“杂项设备”,驱动工程师将这些没有明显区...原创 2019-11-29 23:50:45 · 2525 阅读 · 0 评论 -
【Linux驱动编程】Linux 字符驱动之platform框架
1. platform总线驱动框架1.1 为什么用platform总线 Linux设备驱动框架模式是“驱动总线+设备驱动”,因此,一个设备驱动通常是挂接对应的设备总线上,如常用的总线USB、I2C、SPI、UART。对于嵌入式系统,存在很多外设并不存在实际的“总线”,只是依附在MPU内存空间中,如LED、按键、ADC等。当然,这一类驱动也可以不遵循“总线+驱动”的模式,弊端是不便于系统管理和...原创 2019-11-14 00:19:59 · 959 阅读 · 0 评论 -
【Linux驱动编程】嵌入式Linux下 24系列EEPROM/FRAM驱动
1.写在前面 “24系列”的EEPROM,一般地我们认为是以i2c为通信接口的一系列串行EEPROM,各大半导体厂商出产的该系列EEPROM都遵循这个规则,而且电路和控制程序上也兼容。如AT24C02、ST24C02等。 EEPROM在嵌入式开发中使用广泛,在此之前,有总结过MCU下24系列EEPROM的驱动接口——“24系列EEPROM/FRAM通用接口”。根据该文章中的接口,作调整,使...原创 2019-05-31 23:51:32 · 2040 阅读 · 0 评论 -
【Linux驱动编程】Linux中断上半部和下半部
前言 cpu在执行程序时,如果有外部中断触发时,如定时器中断、串行总线中断等,cpu停止当前任务从而转去响应中断处理。对于中断函数的处理,原则是尽快处理完事务并退出中断,这一点也比较好理解,尽快处理中断并返回,保证正常任务的执行,并q且能否响应其他事务的中断,保证实时性和并发性。 其实,在单片机逻辑编程中已经使用过Linux中断“上下部分”的思维,或者说,Linux中断“上下半...原创 2018-06-09 00:42:16 · 8422 阅读 · 0 评论 -
【Linux驱动编程】Linux字符驱动之异步通知
1. 写在前面 在前面文章实现的驱动代码中,都是应用程序主动来读取(或写入)驱动数据信息;阻塞情况下,如果驱动资源不可用,则休眠进行;poll机制下还需要进程轮询驱动文件描述符以判断是否可读。理想的情况应该是这样的,主进程open某驱动fd后,继续执行其他程序功能,当改驱动资源可读时,产生一个通知信号给当前进程,然后进程再进行读取/写入操作,这样能够大大提高程序的效率。我们利用Linux内核“...原创 2019-11-04 00:19:42 · 324 阅读 · 0 评论 -
【Linux驱动编程】Linux 字符驱动之poll
1.写在前面 在此之前写了“软驱动”作进程通信,该驱动只提供了基本的open、read、write、close、ioctl等功能,如果作为进程通信或者多个进程调用,只能借助Linux 进程同步机制,如信号量、互斥锁等。如果不借助进程同步机制,我们可以提供驱动的“poll”接口,如有数据可读/可写时通知调用进程。 Linux系统提供了多路IO复用机制,通过select、poll、epoll接...原创 2019-10-28 23:26:37 · 822 阅读 · 0 评论 -
【Linux驱动编程】写个软驱动作进程/线程通信
首先来回顾下Linux下进程通信(IPC)机制方式。【1】信号(signal)【2】信号量(semophore)【3】消息队列(message queue)【4】管道(piple),包括匿名管道(s_pipe)和有名管道(FIFO)【5】共享内存(shared memory)【6】套接字(socket)...原创 2019-10-24 00:29:37 · 278 阅读 · 0 评论 -
【Linux源码阅读】Linux内核_IO宏
Linux内核_IO宏主要用于创建实现驱动接口“ioctl()”传递的命令变量(cmd),使用改宏可以区别应用程序传入的cmd请求方式和内容,如数据传递方向、可读、可写等。1.命令码 在使用_IO宏之前,有必要知道ioctl传递命令码(cmd)含义。Linux内核定义了cmd值是以一个32bit的整型数表示,把32bit划分为4块区域,每块区域表示不同的含义,如图表示。【1】bi...原创 2019-10-13 21:34:56 · 922 阅读 · 1 评论