![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
StevenYang2008
嵌入式软件开发、芯片安全、linux驱动开发
展开
-
linux驱动中probe函数是怎么调用的
linux驱动的三个概念:设备、驱动、总线probe何时被调用:在总线上驱动和设备的名字匹配,就会调用驱动的probe函数probe函数被调用后,系统就调用platform设备的probe函数完成驱动注册最后工作。下面是probe被调用前的一些流程。device一般是先于driver注册,但也不全是这样的顺序。Linux的Device和Driver的注册过程分别枚举挂在该BUS上所有的Driver和Device实现了这种时序无关性。Platform机制的本身使用并不复杂,由两部分组成:platfo转载 2020-08-04 17:37:41 · 1646 阅读 · 0 评论 -
Linux kernel mmc 框架说明,包括mmc_test使用方法
1.Linux 总线模型Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用。 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连 接。总线将设备和驱动绑定,在系统每注册一个设备的时候,会遍历该总线上的driver list, 通过bus的math函数寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会便利该 总线上的device 寻找与之匹配的设备,而匹配由总线的match函数完成。一但匹配,则转载 2020-08-04 15:21:04 · 1587 阅读 · 0 评论 -
PCI设备驱动解析
首先我想引用一下官方的源代码中的文档,对设备驱动的工作做一个概括性的叙述:1 首先是调用 pci_register_driver()函数,对设备进行注册。2.Once the driver knows about a PCI device and takes ownership, thedriver generally needs to perform the following initialization: Enable the device Request MMIO/IOP resourc原创 2020-07-24 16:24:34 · 3709 阅读 · 0 评论 -
浅谈Linux PCI设备驱动(二)
我们在浅谈Linux PCI设备驱动(一)中(以下简称 浅谈(一) )介绍了PCI的配置寄存器组,而Linux PCI初始化就是使用了这些寄存器来进行的。后面我们会举个例子来说明Linux PCI设备驱动的主要工作内容(不是全部内容),这里只做文字性的介绍而不会涉及具体代码的分析,因为要分析代码的话,基本就是对 Linux内核源代码情景分析(下册)第八章的解读,读者若想分析代码,可以参考该书的内容,我们这里就不去深入分析这些代码了。Linux PCI设备驱动代码必须扫描系统中所有的PCI总线,寻找系统中所转载 2020-07-22 16:05:44 · 255 阅读 · 0 评论 -
浅谈Linux PCI设备驱动(一)
要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分。不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI、USB这样的驱动来说,必须要理解这个概念,才能明白该如何看待Linux下的PCI和USB以及类似的总线型的驱动。理由也很简单,就是Linux PCI驱动是内核自带的,或者说内核帮你写好了!而我们需要完成的就是设备本身的驱动,比如网卡驱动等。当然,并不是说内核帮咱们写好了Linux PCI驱动我们什么就不用做了,至转载 2020-07-22 15:35:26 · 732 阅读 · 0 评论 -
PCIe 1. PCI与PCIe学习一——硬件篇
最近在学习驱动开发过程中涉及到PCI相关知识,在网上看了很多文章,良莠不齐,我总结一下比较好的文章分享给大家,那就从源头开始说起。PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primary interface)还依然是PCIe形式。我们下面分成两部分介绍PCI和他的继承者PCIe(PCI express):第一部分是历史沿革和硬件架构;第二部分是软件界面和U转载 2020-07-06 17:03:10 · 3176 阅读 · 0 评论 -
Linux 驱动 4. Device tree 解析
关于Device Tree 蜗窝科技的博客中有写的非常好的文章。再次做一个链接,分享给大家。Device Tree(一):背景介绍Device Tree(二):基本概念Device Tree(三):代码分析Device Tree(四):文件结构解析...原创 2020-06-18 18:44:42 · 359 阅读 · 0 评论 -
Linux驱动 3.Linux Platform devices 平台设备驱动
设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196本文主要参考:http://www.wowotech.net/device_model/platform_device.htmlplatform平台设备驱动是基于设备总线驱动模型的,它只不过是将 device 进一步封装成为 platform_device,将 device_driver 进一步封装成为 platform_driver,前面已经分析过设备总线驱动模型,关于dev转载 2020-06-18 18:33:07 · 447 阅读 · 0 评论 -
Linux驱动 2.Linux驱动之Kobject、Kset (二)(uevent mdev ktype type)
LDD3中说,Kobject的作用为: 1、sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它 的可见表述。 2、热插拔事件处理 :kobject 子系统将产生的热插拔事件通知用户空间。 3、数据结构关联:整体来看, 设备模型是一个极端复杂的数据结构,通过其间的大量链接而构 成一个多层次的体系结构。kobject 实现了该结构并将其聚合在一起。 其中,第一条已经在前一篇文章中介绍过了,如果不了解请移驾 http://blog.csdn转载 2020-06-18 18:13:16 · 220 阅读 · 0 评论 -
Linux驱动 1.linux设备驱动之Kobject,Kset(一)
纠结又纠结,虽然看了一些关于kobject 和 kset 的书与文章,但是对于这两个东西,还是不太明白,又分析了一遍2.6.32.2内核的代码,结合前人的努力,终于有了一点眉目。总结一下,给自己做个笔记,也给初学者一点指引。LDD3中说,Kobject的作用为:1、sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述。2、热插拔事件处理 :kobject 子系统将产生的热插拔事件通知用户空间。3、数据结构关联:整体来看, 设备模型是一个极端转载 2020-06-18 17:41:18 · 301 阅读 · 0 评论 -
Linux驱动 0. Kobject
核心结论:1、sys 目录下的层次结构依赖于 kobject.parent ,未指定parent时,默认使用 kobject.kset.kobject 作为 parent,如果都没有,就出现在 /sys 目录下。2、该 kobject 目录下的属性文件依赖于 kobject.ktype在linux的驱动表示中,主要有三个基本的结构,分别是kobject,kset,ktype. Kobject,kset,kypte这三个结构是设备模型中的下层架构。模型中的每一个元素都对应一个kobject。kset转载 2020-06-18 16:27:38 · 191 阅读 · 0 评论 -
linux驱动 9.Linux input设备驱动
1.前言linux input是我们都会用到的一个模块,比如触摸屏,鼠标,键盘。今天在这里以触摸屏为例,简单分析下,input 驱动的架构以及相关代码实现。Software: L4.14.98Hardware: imx8qInput 设备驱动框架主要分为三层:1.input_device(设备驱动层)2.input_core(核心层)3.input_handle(事件处理层)2.初始化input 的初始化主要包括三个部分,下面一个一个来说。2.1 input core 初始化代码路径原创 2020-06-17 15:01:05 · 369 阅读 · 0 评论 -
linux驱动 7.I2C驱动
简述I2c是一个应用很广的总线。通讯协议简单,而且一条总线上可以挂载多个设备,在这里讲一下I2c在linux中的架构。首先借一下网络上的一张图:I2c的框架主要分为以上这么几个部分。下面根据代码,相机讲述一下,各个部分的实现。软件版本:linux 4.14.98硬件型号:imx71. I2C core 初始化文件位置:drivers/i2c/i2c-core-base.c首先来看i2c_init()函数。static int __init i2c_init(void){原创 2020-06-10 19:39:34 · 521 阅读 · 0 评论 -
linux驱动 8. SPI驱动
0.简介SPI也是嵌入式设备经常用到的一种总线,它采用主从架构,也可以全双工通讯。今天我们来分析一下SPI在linux中的驱动。software:linux 4.14.98hardware: imx8和I2C驱动有些类似。SPI的驱动大致可以分为三部分。1.SPI设备驱动部分2.SPI核心层部分3.SPI控制器驱动部分摘录网络上面一张图,如下图所示1.SPI控制器驱动在这里先分析一下SPI控制器驱动给,下面看代码。FILE:drivers/spi/spi-imx.cstatic S原创 2020-06-11 14:39:52 · 741 阅读 · 0 评论 -
linux驱动 6.UART驱动初始化
1.简介UART驱动是我们每个人都会遇到的,输出log都少不了UART,这个是我们和系统给交流的窗口。下面我们在看一下解析一下这个驱动的code.软件:linux 4.14.98硬件: imx8qUART总体驱动框图如下图所示:2.设备树在这里以lpuart0为例,通过设备树(device tree)的相关代码,查看该设备是怎么配置的。废话不多少,上代码:file:fsl-imx8qxp-mek.dtsi#include "fsl-imx8qxp.dtsi"/ { model = "原创 2020-06-10 10:25:15 · 1226 阅读 · 0 评论 -
linux驱动 5.字符设备驱动程序
在这里写一下字符设备驱动的编写。主要包含几部分,分别如下:1.设备结构体这个结构体中一般包含cdev,私有数据,以及锁等数据。struct xxx_dev_t { struct cdev cdev; ... } xxx_dev;2.设备驱动模块加载函数这个中一般包括,cdev的初始化,获取字符设备号,注册设备,创建device和class,初始话互斥变量。static int _ _init xxx_init(void){ ... cdev_init(&xxx_dev.c原创 2020-06-03 18:46:18 · 346 阅读 · 0 评论