随笔分类 -  linux设备驱动

摘要:linux内核给了一个spi驱动的实例。 driver/spi/spidev.c 1 spi_driver.c 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/ioctl.h> 4 #include <l 阅读全文
posted @ 2020-06-04 22:50 Action_er 阅读(3488) 评论(0) 推荐(1) 编辑
摘要:所有的应用程序使用dev/目录下创建的设备,这些字符设备的操作函数集在文件spidev.c中实现。 1 static const struct file_operations spidev_fops = { 2 .owner = THIS_MODULE, 3 /* REVISIT switch to 阅读全文
posted @ 2020-06-04 22:12 Action_er 阅读(3465) 评论(0) 推荐(1) 编辑
摘要:我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。 同步方式:是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。 异步方式:则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码 阅读全文
posted @ 2020-05-31 11:51 Action_er 阅读(5458) 评论(2) 推荐(0) 编辑
摘要:整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中,控制器驱动即spi主机,负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能: (1)申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等; (2)配置SPI控制器的工作模式和参数,使之可 阅读全文
posted @ 2020-05-30 20:44 Action_er 阅读(2241) 评论(1) 推荐(0) 编辑
摘要:SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备、SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构。另 阅读全文
posted @ 2020-05-30 17:54 Action_er 阅读(4999) 评论(0) 推荐(0) 编辑
摘要:SPI即Serial Peripheral Interface 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是: CS: 片选信号;SCK : 时钟信号;MISO :主设备的数据输入、从设备的数据输出脚;MO 阅读全文
posted @ 2020-05-30 12:30 Action_er 阅读(1635) 评论(0) 推荐(0) 编辑
摘要:对于任何的知识来说,了解了理论的知识,知道了设备树怎么解析用以代替传统的范式之后,我们需要知道怎么使用设备树。对于使用我们分两部分,一部分是它有哪些接口,能做些什么,至于怎么编写dts文件本章不讨论。主要包括两部分: (1)对于设备树,编译和设备启动后,怎么来查看设备树的信息,怎么用来debug ( 阅读全文
posted @ 2020-05-28 19:28 Action_er 阅读(1503) 评论(0) 推荐(0) 编辑
摘要:uboot将一些参数,设备树文件传给内核,那么内核如何处理这些设备树文件呢?本章就kernel解析设备树的过程和原理,本章的主要内容以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括: (1)设备树对于内核的意义(2)从u-boot传递 阅读全文
posted @ 2020-05-28 19:25 Action_er 阅读(4735) 评论(0) 推荐(0) 编辑
摘要:1 传递dtb给内核 对于传统bootloader提供两种工作模式:一是启动加载模式(start loading),一是下载模式(downloading)工作在启动加载模式时,bootloader会自动执行bootcmd命令,比如:bootcmd=“nand read 0x100000 0x8000 阅读全文
posted @ 2020-05-28 19:22 Action_er 阅读(2874) 评论(0) 推荐(1) 编辑
摘要:1 前言 如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的D 阅读全文
posted @ 2020-05-28 19:18 Action_er 阅读(2137) 评论(0) 推荐(0) 编辑
摘要:在传统Linux内核中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代 阅读全文
posted @ 2020-05-28 08:18 Action_er 阅读(792) 评论(0) 推荐(0) 编辑
摘要:在linux设备驱动中总是见到type的结构体变量,一般是嵌入其他数据结构体中。本节将一 一介绍下。 bus_type是bus总结对应的结构体变量,不属于本节所叙述范围。 1 device_type 定义位于:include\linux\device.h,devices_type嵌入结构体devic 阅读全文
posted @ 2020-05-23 18:20 Action_er 阅读(954) 评论(0) 推荐(0) 编辑
摘要:1 platfrom的概括 platform总线是区别于实体总线USB、 I2C、SPI 、PIC总线的虚拟总线,一些usb设备选址的话需要通过USB总线来进行寻址,而有些类似于SoC内部外设如led 看门狗 定时器是直接通过内存的寻址空间来进行寻址的,cpu与这些设备通信是不需要总线的,2.6内核 阅读全文
posted @ 2020-05-23 18:19 Action_er 阅读(1020) 评论(0) 推荐(1) 编辑
摘要:分析一下input事件上报流程。 1.可以看系统提供了很多来上报各种信息的函数(适用,键盘,鼠标,触摸屏等各种上报信息)它们都是掉用同一的接口input_enent来实现的。 定义位于:include\linux\input.h 1 static inline void input_report_k 阅读全文
posted @ 2020-05-23 13:40 Action_er 阅读(1099) 评论(0) 推荐(0) 编辑
摘要:input子系统分为三层: 事件驱动层input_handler,提供事件注册接口。 输入核心层input_handle,是input子系统实现的核心。 设备驱动层input_dev,提供设备注册接口,输入信息反馈接口。 1 输入核心层 1.1input的初始化 input_init(),属于输入核 阅读全文
posted @ 2020-05-23 12:41 Action_er 阅读(509) 评论(0) 推荐(0) 编辑
摘要:1.input子系统的介绍 Input驱动程序是linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)、键盘(keyboard)、事件设备(event)。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。它们本身都是字符设备,不过内 阅读全文
posted @ 2020-05-20 22:24 Action_er 阅读(920) 评论(0) 推荐(0) 编辑
摘要:1 /dev 该目录下放的是设备文件,是应用程序和内核的交互文件,应用程序通过对这些文件的读写和控制(open、write、,poll等),可以访问实际的设备。应用程序通过mknod创建的文件,如果底层驱动对mknod的设备号有对应的驱动,那么应用程序open "/dev/**"时,就会调用到底层的 阅读全文
posted @ 2020-05-19 22:12 Action_er 阅读(2949) 评论(0) 推荐(0) 编辑
摘要:1. 概述 在设备模型中,bus、device、device driver等等,都比较好理解,因为它们对应了实实在在的东西,所有的逻辑都是围绕着这些实体展开的。而本文所要描述的class就有些不同了,因为它是虚拟出来的,只是为了抽象设备的共性。 举个例子,一些年龄相仿、需要获取的知识相似的人,聚在一 阅读全文
posted @ 2020-05-19 21:50 Action_er 阅读(2307) 评论(0) 推荐(0) 编辑
摘要:1. 前言 sysfs是一个基于RAM的文件系统,它和kobject一起,可以将kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。 sysfs具备文件系统的所有属性,而本文主要侧重其设备模型的特性,因此不会涉及过多的文件系统实现细节。 2 阅读全文
posted @ 2020-05-18 22:17 Action_er 阅读(4853) 评论(0) 推荐(2) 编辑
摘要:1 sysfs底层函数下面讲述的内容将基于VFS,有关VFS的基本内容超过本文的范围,请参考<<深入理解Linux内核>>一书的第12章。在前面讲述的过程中,我们知道设备驱动模型是如何通过kobject将总线,设备和驱动间的层次关系在用户空间呈现出来的。事实上,就是通过目录,文件和symlink来呈 阅读全文
posted @ 2020-05-18 21:18 Action_er 阅读(2384) 评论(0) 推荐(0) 编辑