
Linux 驱动
文章平均质量分 68
BestW2Y
这个作者很懒,什么都没留下…
展开
-
[Linux 驱动] -- Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1.1、设备驱动分类 Linux 系统将设备分为 3 类:字符设备、块设备、网络设备。使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和 LED 设备等。 块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U 盘和 SD 卡等。 每一个字符设...转载 2021-12-23 10:15:15 · 630 阅读 · 0 评论 -
[Linux 驱动] -- 使用 pinctrl 子系统实现引脚功能动态切换
一、dts 设置&uart6 { pinctrl-names = "default","gpio_state"; pinctrl-1 = <&uart6_gpio>; gpio_tx = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>; gpio_rx = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>; status = "okay";};&p原创 2021-02-28 17:33:22 · 1472 阅读 · 1 评论 -
[Linux 驱动] -- 电源管理芯片之 Regulator 用法 与具体使用实例
一、regulator 用法1.1、 电源管理 regulator 分成静态和动态:静态不需要改变电压电流,只需要开关电源,用在 BootLoader、frameware、kernel board 阶段等;动态是根据需要改变电压电流。1.2、 获取设备的 regulator、dev 为驱动对应的设备指针,可以用NULL,Vcc 为电源的 ID,内核会查表找到电源 ID 对应的 regulator。如:struct regulator *ldo; ldo = regualtor_get(NULL,转载 2021-02-19 17:22:32 · 3454 阅读 · 0 评论 -
[Linux 驱动] -- Linux SD 卡驱动开发(一) ------ SD 相关基础概念
一、SD/MMC 卡基础概念1.1、什么是MMC卡MMC:MMC 就是 MutiMediaCard 的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。1.2、什么是SD卡SD:SD卡为 Secure Digital Memory Card,即安全数码卡。它在MMC的基础上发展而来,增加...转载 2020-02-25 17:30:07 · 344 阅读 · 0 评论 -
[Linux 驱动] -- Linux 设备驱动--块设备(三)之程序设计
块设备驱动注册与注销块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigned int major, const char *name);major 参数是块设备要使用的主设备号,name 为设备名,它会在 /proc/devices 中被显示。如果major为0,内...转载 2020-02-23 16:50:30 · 332 阅读 · 0 评论 -
[Linux 驱动] -- Linux 设备驱动--块设备(二)之相关结构体
上回最后面介绍了相关数据结构,下面再详细介绍块设备对象结构 block_device内核用结构 block_device 实例代表一个块设备对象,如:整个硬盘或特定分区。如果该结构代表一个分区,则其成员bd_part指向设备的分区结构。如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk。当用户打开块设备文件时,内核创建结构block_device实例,设备驱...转载 2020-02-23 10:38:55 · 382 阅读 · 0 评论 -
[Linux 驱动] -- Linux 设备驱动 -- 块设备(一)之概念和框架
基本概念块设备(Block device)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)--- 是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所有对这种设备的读...转载 2020-02-20 11:13:26 · 354 阅读 · 0 评论 -
[Linux 驱动] -- Linux USB 驱动开发(五)---- USB 驱动程序开发过程简单总结
设备驱动程序是操作系统内核和及其硬件之间的接口,由一组函数和一些私有数据组成,是应用程序和硬件设备之间的桥梁。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,主要完成以下功能:对设备的初始化和释放;把数据从内核传送到硬件设备和从硬件设备读取数据;读取应用程序数据传送给设备文件和回送应用程序请求的数据;检测和处理硬件设备出现...转载 2020-02-14 16:36:27 · 378 阅读 · 0 评论 -
[Linux 驱动] -- Linux USB 驱动开发(四)---- 热插拔那点事
学习USB热插拔之前,先学习一些USB的硬件知识:一、USB基础概念1、硬件知识(USB插座和插头)在最初的标准里,USB接头有4条线:电源,D-,D+,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了,又增加了miniUSB接头。而miniUSB接头则有5条线,多了一条ID线,用来标识身份用的。标准USB口只有A型和B型。其中每一型又分为插头和插座,例如A型插头,A型插...转载 2020-02-12 17:43:08 · 651 阅读 · 0 评论 -
[Linux 驱动] -- Linux USB 驱动开发(三)---- 编写USB驱动程序
前面学习了 USB 驱动的一些基础概念与重要的数据结构,那么究竟如何编写一个 USB 驱动程序呢?编写与一个 USB 设备驱动程序的方法和其他总线驱动方式类似,驱动程序把驱动程序对象注册到 USB 子系统中,稍后再使用制造上和设备表示来判断是否安装了硬件。当让,这些制造商和设备标识需要我们编写进 USB 驱动程序中。USB驱动程序依然遵循设备模型 ---- 总线、设备、驱动。和 I2C 总线设...转载 2020-02-12 15:21:10 · 546 阅读 · 0 评论 -
[Linux 驱动] -- Linux USB 驱动开发(二)------ USB 驱动几个重要数据结构
前面我们学习了 USB 驱动的一个描述符,下面来学习 USB 驱动的几个重要数据结构一、struct usb_interface 接口函数struct usb_interface{ struct usb_host_interface *altsetting; struct usb_host_interface *cur_altsetting; u...转载 2020-02-08 14:47:15 · 603 阅读 · 0 评论 -
[Linux 驱动] -- Linux USB 驱动开发(一)------ USB设备基础概念
在终端用户看来,USB 设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对 USB 主机来说,它与所有 USB 设备的接口都是一致的。一个 USB 设备由3个功能模块组成:USB 总线接口、USB 逻辑接口和功能单元:a -- 这里的 USB 总线接口指的是 USB设备中的串行接口引擎(SIE);b -- USB 逻辑设备被 USB 系统软件看作是一个端点的集合;c --...转载 2020-01-22 16:28:56 · 228 阅读 · 0 评论 -
[Linux 驱动] -- 总线驱动模型浅析
复习总线驱动模型,做了点小笔记,大牛略过。一、Linux 系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。二、涉及 3 个重要结构体:struct bus_type :总线struct device :设备struct device_driver :驱动三、结构体核心代码分析(2.6.38内核)struct bus_tpye{ const cha...转载 2020-01-18 17:27:10 · 207 阅读 · 0 评论 -
[Linux 驱动] -- 驱动调试技巧点滴分享
引言作为驱动工程师,主要的工作就是移植各种驱动,接触各种硬件。接触最多的就是 dts、中断、gpio、sysfs、proc。如何利用 sysfs、proc 及内核提供的接口为我们降低调试难度,快速解决问题呢?注:部分代码分析举例基于 Linux-4.15。如何利用 dts ?首先我们关注的主要是两点,gpio 和 irq。其他的选择忽略。先展示一下我期望的 gpio 和 irq 的...转载 2020-01-07 14:44:56 · 881 阅读 · 0 评论 -
[Linux 驱动] -- 驱动程序分层分离概念--总线驱动设备模型 示例
文章来源:https://www.cnblogs.com/liulipeng/p/3391309.html一、示意图 App-------------------------------------------------- input.c----------------------------------------...转载 2019-01-23 15:13:19 · 227 阅读 · 0 评论 -
[Linux 驱动] -- I2C子系统驱动框架及应用
本文来源于:https://blog.youkuaiyun.com/hanp_linux/article/details/72832158讲的很好,特此做记录原创 2019-02-21 19:16:20 · 236 阅读 · 0 评论 -
[Linux 驱动] -- pci_alloc_consistent () 申请DMA空间返回NULL
问题: 在tw686x驱动从linux4.7内核移植到4.4内核的过程中,出现pci_alloc_consistent()函数申请DMA空间,返回NULL在启动log中出现如下信息:tw686x 0000:01:00.0:dma0: unable to allocate B-bufferunable to handle kernel NULL pointer dereference ...原创 2019-05-05 19:46:19 · 4677 阅读 · 0 评论 -
[Linux 驱动] -- Linux 驱动之串口(UART)
一、UART 驱动程序概述在嵌入式 Linux 系统中,串口被看成终端设备,终端设备(tty)的驱动程序分为三个部分:tty_core tty_disicipline tty_driver包括3个结构体:uart_driver uart_port uart_ops( include/serial_core.h)因此实现一个平台的 UART 驱动程序只需要实现这3个结构体即可...转载 2019-08-31 15:17:40 · 2205 阅读 · 0 评论 -
[Linux 驱动] -- I2C子系统驱动框架及应用
I2C子系统驱动框架:应用程序层(app层)i2c driver 层:从设备驱动层(TS Sensor等)需要和应用层交互(fops cdev); 封装数据,但是不知道数据如何写入到硬件,需要调用adapter层的相关函数去写i2c core:维护i2c bus,包括i2c driver 和i2c client链表实现i2c client 和 i2c driver的匹配;这一...转载 2019-08-31 20:00:07 · 193 阅读 · 0 评论 -
[Linux 驱动] -- Linux 下 I2C 驱动架构全面分析
I2C 架构概述Linux 的 I2C 体系结构分为3个组成部分:I2C 核心:I2C 核心提供了 I2C 总线驱动和设备驱动的注册、注销方法,I2C 通信方法(“algorithm”)上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。I2C 总线驱动:I2C 总线驱动是对 I2C 硬件体系结构中适配器端的实现,适配器可由 CPU 控制,甚至可以直接集成在CPU内部...转载 2019-08-18 14:05:05 · 219 阅读 · 0 评论 -
[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)
platform_device与platform_driver的匹配分为如下三种情况:基于设备树风格的匹配: platform_driver.device_driver.of_device_id->compatible 和 设备树中的compatible属性进行比较; 匹配 id 表(id_table),即 platform_device 设备名是否出现在 platform_driv...原创 2019-09-01 10:01:53 · 1052 阅读 · 0 评论 -
[Linux 基础] -- Linux 字符设备驱动结构
Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析:https://blog.youkuaiyun.com/zqixiao_09/article/details/50839042Linux 字符设备驱动结构(二)—— 自动创建设备节点:https://blog.youkuaiyun.com/zqixiao_09/article/details/50849735Linux 字符设备...原创 2019-09-25 17:57:11 · 213 阅读 · 0 评论 -
[Linux 驱动] -- class_create()、device_create()、register_chrdev() 三个函数的说明 (自动创建设备节点)
自动创建节点在驱动中加入对 udev 的支持(自动创建设备节点)的主要做法是:在驱动初始化的代码里调用 class_create() 为该设备创建一个 class,再为每个设备调用 device_create() 创建对应的设备。内核中定义的 struct class 结构体,顾名思义,一个 struct class 结构体类型的变量对应一个类,内核同时提供了 class_create()...原创 2019-09-25 18:17:55 · 1912 阅读 · 0 评论 -
ubuntu18.04 编译安卓6.0 出错的总结
出现的错误:error: unsupported reloc 43解决办法:cp ../ld.2.11 prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ldcp ../ld.2.15 prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.1...原创 2018-12-28 19:01:13 · 737 阅读 · 1 评论