Linux驱动开发
文章平均质量分 94
waterfxw
技术 专注 提升
展开
-
<Linux开发>驱动开发 -之- Linux I2C 驱动
I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件。本文学习如何在 Linux 下开发 I2C 接口器件驱动,重点是学习 Linux 下的 I2C 驱动框架,按照指定的框架去编写 I2C 设备驱动。笔者所用的 I.MX6U 开发板上有一个 AP3216C, 这是个三合一环境光传感器,通过 AP3216C 讲解一下如何编写 Linux 下的 I2C 设备驱动程序。I2C 是很常见的一种总线协议,I2C 是 NXP 公司设计的,I2C 使用两条线在主控制器和从机之间进行数据通信。原创 2023-07-08 17:44:51 · 684 阅读 · 0 评论 -
<Linux开发>驱动开发 -之- Linux RTC 驱动
本文主要分析Linux系统下的RTC,也就是实时时钟,RTC时钟是用来记录当前系统时间的;对于Linux系统来说,时间是一个非常重要的功能;比如我们的windows/linux电脑,会需要时间,还比如 我们的手机、平板,都需要时间;而且在很多app 或功能内都需要与时间打交道如导航等。本文就来分析一下linux系统下的RTC时钟。如果学习过 STM32 的话应该知道,STM32 内部有一个 RTC 外设模块,这个模块需要一个32.768KHz 的晶振,对这个 RTC 模块进行初始化就可以得到一个实时时钟。原创 2023-06-24 15:11:34 · 1968 阅读 · 1 评论 -
<Linux开发>驱动开发 -之- Linux LCD 驱动
LCD 液晶屏是常用到的外设,通过 LCD 可以显示绚丽的图形、界面等,提高人机交互的效率。本系列文章所用的开发板I.MX6U 提供了一个 eLCDIF 接口用于连接 RGB 接口的液晶屏。LCD 全称是 Liquid Crystal Display,也就是液晶显示器,是现在最常用到的显示器,手机、电脑、各种人机交互设备等基本都用到了 LCD,最常见就是手机和电脑显示器了。原创 2023-06-23 17:48:43 · 1900 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-Linux INPUT 子系统
按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息,input 核心层负责处理这些事件。本文我们就来看一下 Linux 内核中的 input 子系统。网上也有很多资料介绍 input子系统相关的,有兴趣也可执行查阅。原创 2023-06-19 21:58:07 · 1001 阅读 · 0 评论 -
<Linux开发>驱动开发 -Linux MISC 驱动
misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候,比如说某个外设,既不是I2C设备、也不是SPI设备、更不是USB等设备,就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,本文我们就来学习一下 MISC 驱动的编写。原创 2023-06-19 20:25:14 · 1042 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-platform 驱动
在前面几篇文章讲解分析编写的设备驱动是相对简单,都是对 IO进行最简单的读写操作。那么如果像I2C、SPI、LCD 等,这类比较复杂外设的驱动就不能这么去写了,如果每一个I2C芯片都单独写一个I2C驱动对应IO的话,这样内核代码会很累赘,所以Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,在这个思路下诞生了platform 设备驱动,也叫做平台设备驱动。本文主要分析一下 Linux 下的驱动分离与分层,以及 platform 框架下的设备驱动该如何编写。原创 2023-06-18 19:07:14 · 1182 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-阻塞、非阻塞IO和异步通知
在<Linux开发>驱动开发 -之-内核定时器与中断的末尾我们看到,当应用程序运行时cpu占用率时很高的,这是因为一直开循环读取设备导致的,那么有什么方法可以有效处理这种情况呢?在kernel中提供了 阻塞IO、非阻塞IO以及异步通知等方法。为有效提升资源利用和降低cpu占用率,从而提升效率,我们一一分析这三种方法。这里的 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。原创 2023-06-15 22:40:43 · 798 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-内核定时器与中断
定时器是我们最常用到的功能,一般用来完成定时功能,熟悉一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。中断也是频繁使用的功能,Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。下面我们就来一一分析。原创 2023-06-13 09:58:25 · 2218 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-资源的并发与竞争处理
对应资源的并发与竞争处理,主要涉及原子操作、自旋锁、信号量和互斥体这四个。不同进程同时访问同一个资源就会存在并发问题;比如不同进程同时控制LED或beep。本文不过多解释四种处理并发的原理,读者可以自行查阅相关资料。这里只讲使用。那么我们接下来一个一个使用看看。原创 2023-05-28 18:57:10 · 738 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的beep驱动
本文主要讲解基于pinctrl子系统和gpio子系统的前提下,编写beep驱动,并编写测试app测试beep的控制。我们结合pinctrl子系统和gpio子系统,完成了beep的驱动开发,开发beep蜂鸣器的驱动,其原理与led是一样的,都是通过控制gpio引脚输出高低电平来控制设备的。先通过控制简单的led、beep等设备,熟悉掌握pinctrl子系统和gpio子系统,后面我们在深入开发比较复杂的驱动。一步一脚印,法路自然成。原创 2023-05-28 16:25:55 · 1119 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的LED驱动
本文主要讲解基于pinctrl子系统和gpio子系统的前提下,编写LED驱动,并编写测试app测试led的控制。对于led来说,是比较常用的一种设备,不管是做系统运行指示灯,还是人机交互提示灯都是常备的功能。我们结合pinctrl子系统和gpio子系统,完成了led的驱动开发,后面我们会接着开发beep蜂鸣器的驱动,其原理与led是一样的,都是通过控制gpio引脚输出高低电平来控制设备的。原创 2023-05-25 23:47:57 · 821 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-gpio子系统
我们介绍了pinctrl子系统,pinctrl 子系统重点是设置 PIN(有的 SOC 叫做 PAD)的复用和电气属性,如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系统了。gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。原创 2023-05-26 11:21:39 · 1155 阅读 · 0 评论 -
<Linux开发>驱动开发 -之-pinctrl子系统
Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架;我们会分别介绍pinctrl子系统 和 gpio 子系统。这篇文章中主要先来讲解pinctrl子系统。本片文章主要是基于iMax6ull 实现,同时也会对比高通平台的对应实现。原创 2023-05-24 16:10:44 · 1177 阅读 · 0 评论 -
<Linux开发> linux开发工具-之-交叉编译环境搭建
要进行Linux开发,首要的任务就是搭建好开发环境。比如编写代码的软件,编译代码的工具,还有一些传输文件等的一些辅助工具。也是只有这些工具的辅助才能让嵌入式linux开发进展顺利。才能为我们开发提供有利的帮助。原创 2023-03-23 01:06:30 · 2224 阅读 · 0 评论 -
<Android开发>--内核驱动开发-- I2C设备驱动
<Android开发>–内核驱动开发-- I2C设备驱动前言:本次驱动开发是基于高通平台开发的,目的是基于I2C总线,去读取器件的相关信息,然后设置设备的属性值,以备后续的开发使用。开发步骤如下:1、添加设备树节点1)打开dts文件"LINUX/android/kernel/msm-4.4/arch/arm64/boot/dts/qcom/xxx.dts"具体文件名以实际使用为准。作者这里用到的是I2C-10,添加以下内容:&i2c_10 { status = "okay"; wat原创 2022-04-24 16:19:00 · 1811 阅读 · 0 评论 -
<Linux开发>--驱动开发-- 字符设备驱动(5) 过程详细记录
<Linux开发>–驱动开发-- 字符设备驱动(5) 过程详细记录驱动开发是建立再系统之上的,前面作者也记录了系统移植的过程记录,如果有兴趣,可进入博主的主页查看相关文章,这里就不添加链接了。其它各驱动可到博主主页查看,由于后续会有越来越多的篇幅,就不一一列举链接到文章中了。第1、2 两篇是旧版字符驱动的开发方式,第3篇是新字符设备驱动的开发实验,第4篇是基于设备树下的实验,接下来这篇,是基于pinctrl子系统和GPIO子系统进行驱动开发的方式。子系统相关介绍,可查看手册,或百度查阅相关资料。实验原创 2021-11-11 23:04:27 · 937 阅读 · 0 评论 -
<Linux开发>--驱动开发-- 字符设备驱动(3) 过程详细记录
<Linux开发>–驱动开发-- 字符设备驱动(3) 过程详细记录驱动开发是建立再系统之上的,前面作者也记录了系统移植的过程记录,如果有兴趣,可进入博主的主页查看相关文章,这里就不添加链接了。其它各驱动可到博主主页查看,由于后续会有越来越多的篇幅,就不一一列举链接到文章中了。前面两篇是旧版字符驱动的开发方式,接下来根据开发手册,进行新字符设备驱动的开发实验。实验过程记录如下:一、编程环境准备1、安装虚拟机ubuntu,以及交叉工具链,这个在讲解系统移植部分也有说到,是必须的;2、内核源码,这个原创 2021-11-09 17:42:23 · 214 阅读 · 0 评论 -
<Linux开发>--驱动开发-- 字符设备驱动(2) 过程详细记录
<Linux开发>–驱动开发-- 字符设备驱动(2) 过程详细记录作者之前讲解记录了系统移植部分内容,包括uboot、Linux和设备树、以及根文件系统这三个方面,接下来的将进入设备驱动部分的开发过程记录了。系统移植部分可参考以下链接:uboot移植可参考以下:<Linux开发> -之-系统移植 uboot移植过程详细记录(第一部分)<Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分)<Linux开发> -之-系统移植 uboot移植过程详细记录(第三部分)(uboot移植原创 2021-10-30 22:56:35 · 238 阅读 · 0 评论 -
<Linux开发>--驱动开发-- 字符设备驱动(1) 过程详细记录
<Linux开发>–驱动开发-- 字符设备驱动(1) 过程详细记录作者之前讲解记录了系统移植部分内容,包括uboot、Linux和设备树、以及根文件系统这三个方面,接下来的将进入设备驱动部分的开发过程记录了。系统移植部分可参考以下链接:uboot移植可参考以下:<Linux开发> -之-系统移植 uboot移植过程详细记录(第一部分)<Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分)<Linux开发> -之-系统移植 uboot移植过程详细记录(第三部分)(uboot移植原创 2021-10-26 22:55:01 · 254 阅读 · 0 评论