05 2020 档案
摘要:我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。 同步方式:是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。 异步方式:则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码
阅读全文
摘要:整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中,控制器驱动即spi主机,负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能: (1)申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等; (2)配置SPI控制器的工作模式和参数,使之可
阅读全文
摘要:SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备、SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构。另
阅读全文
摘要:SPI即Serial Peripheral Interface 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是: CS: 片选信号;SCK : 时钟信号;MISO :主设备的数据输入、从设备的数据输出脚;MO
阅读全文
摘要:对于任何的知识来说,了解了理论的知识,知道了设备树怎么解析用以代替传统的范式之后,我们需要知道怎么使用设备树。对于使用我们分两部分,一部分是它有哪些接口,能做些什么,至于怎么编写dts文件本章不讨论。主要包括两部分: (1)对于设备树,编译和设备启动后,怎么来查看设备树的信息,怎么用来debug (
阅读全文
摘要:uboot将一些参数,设备树文件传给内核,那么内核如何处理这些设备树文件呢?本章就kernel解析设备树的过程和原理,本章的主要内容以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括: (1)设备树对于内核的意义(2)从u-boot传递
阅读全文
摘要:1 传递dtb给内核 对于传统bootloader提供两种工作模式:一是启动加载模式(start loading),一是下载模式(downloading)工作在启动加载模式时,bootloader会自动执行bootcmd命令,比如:bootcmd=“nand read 0x100000 0x8000
阅读全文
摘要:1 前言 如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的D
阅读全文
摘要:在传统Linux内核中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代
阅读全文
摘要:在linux设备驱动中总是见到type的结构体变量,一般是嵌入其他数据结构体中。本节将一 一介绍下。 bus_type是bus总结对应的结构体变量,不属于本节所叙述范围。 1 device_type 定义位于:include\linux\device.h,devices_type嵌入结构体devic
阅读全文
摘要:1 platfrom的概括 platform总线是区别于实体总线USB、 I2C、SPI 、PIC总线的虚拟总线,一些usb设备选址的话需要通过USB总线来进行寻址,而有些类似于SoC内部外设如led 看门狗 定时器是直接通过内存的寻址空间来进行寻址的,cpu与这些设备通信是不需要总线的,2.6内核
阅读全文
摘要:分析一下input事件上报流程。 1.可以看系统提供了很多来上报各种信息的函数(适用,键盘,鼠标,触摸屏等各种上报信息)它们都是掉用同一的接口input_enent来实现的。 定义位于:include\linux\input.h 1 static inline void input_report_k
阅读全文
摘要:input子系统分为三层: 事件驱动层input_handler,提供事件注册接口。 输入核心层input_handle,是input子系统实现的核心。 设备驱动层input_dev,提供设备注册接口,输入信息反馈接口。 1 输入核心层 1.1input的初始化 input_init(),属于输入核
阅读全文
摘要:1.input子系统的介绍 Input驱动程序是linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)、键盘(keyboard)、事件设备(event)。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。它们本身都是字符设备,不过内
阅读全文
摘要:1 /dev 该目录下放的是设备文件,是应用程序和内核的交互文件,应用程序通过对这些文件的读写和控制(open、write、,poll等),可以访问实际的设备。应用程序通过mknod创建的文件,如果底层驱动对mknod的设备号有对应的驱动,那么应用程序open "/dev/**"时,就会调用到底层的
阅读全文
摘要:1. 概述 在设备模型中,bus、device、device driver等等,都比较好理解,因为它们对应了实实在在的东西,所有的逻辑都是围绕着这些实体展开的。而本文所要描述的class就有些不同了,因为它是虚拟出来的,只是为了抽象设备的共性。 举个例子,一些年龄相仿、需要获取的知识相似的人,聚在一
阅读全文
摘要:1. 前言 sysfs是一个基于RAM的文件系统,它和kobject一起,可以将kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。 sysfs具备文件系统的所有属性,而本文主要侧重其设备模型的特性,因此不会涉及过多的文件系统实现细节。 2
阅读全文
摘要:1 sysfs底层函数下面讲述的内容将基于VFS,有关VFS的基本内容超过本文的范围,请参考<<深入理解Linux内核>>一书的第12章。在前面讲述的过程中,我们知道设备驱动模型是如何通过kobject将总线,设备和驱动间的层次关系在用户空间呈现出来的。事实上,就是通过目录,文件和symlink来呈
阅读全文
摘要:1. Uevent的功能 Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。 该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相
阅读全文
摘要:本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver-model的,通过
阅读全文
摘要:1. 前言 在之前的device、device_driver和bus讲解中多次遇到kobject和kset相关内容,可能不明白,没关系,下面将详细讲解。 Kobject/kset是Linux设备驱动模型的基础,相当于数学中的加减乘除,后续一切模型都以此为基础构建。 2. 基本概念 由上一节可知,Li
阅读全文
摘要:1. 概述 总线(bus)是linux发展过程中抽象出来的一种设备模型,为了统一管理所有的设备,内核中每个设备都会被挂载在总线上,这个bus可以是对应硬件的bus(i2c bus、spi bus)、可以是虚拟bus(platform bus)。 bus将所有挂在上面的具体设备抽象成两部分,devic
阅读全文
摘要:linux 设备驱动模型中,之前内核直接叫做driver,后来改为device_driver,device和device_drvier 对应,驱动模型中最重要抽象两个概念。接下一步步分析device_driver的注册初始化过程。 1driver_register code位于:drivers\ba
阅读全文
摘要:Linux设备驱动的模型,是建立在sysfs设备文件系统和kobject上的,由总线(bus)、设备(device)、驱动(driver)和类(class)所组成的关系结构,在底层,Linux系统中的每个设备都有一个device结构体的实例。struct device已在上一博文中介绍,下面按顺序详
阅读全文
摘要:1. 前言 由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。个人意见,这种现象打破了“简洁就是美”的理念,是丑陋的。它导致Linux内核看上去非常臃肿、杂乱、不易维护
阅读全文
摘要:1定义 这些宏在stdarg.h,定义如下: 1 #include <stdarg.h> 2 typedef char *va_list; 3 #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 4 #defin
阅读全文

浙公网安备 33010602011771号