正点IMX6ULL驱动开发
文章平均质量分 96
正点原子驱动视频:
https://www.bilibili.com/video/BV1fJ411i7PB?spm_id_from=333.999.0.0
行稳方能走远
日日行,不怕千万里;常常做,不怕千万事
展开
-
Linux 有线网络驱动实验(PHY芯片LAN8720)
网络驱动是linux 里面驱动三巨头之一,linux 下的网络功能非常强大,嵌入式linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动,本章我们就来学习一下linux 里面的网络设备驱动。原创 2023-10-29 22:49:15 · 3962 阅读 · 0 评论 -
Linux 块设备驱动实验
前面我们都是在学习字符设备驱动,本章我们来学习一下块设备驱动框架,块设备驱动是Linux 三大驱动类型之一。块设备驱动要远比字符设备驱动复杂得多,不同类型的存储设备又对应不同的驱动子系统,本章我们重点学习一下块设备相关驱动概念,不涉及到具体的存储设备。最后,我们使用ALPHA 开发板板载RAM 模拟一个块设备,学习块设备驱动框架的使用。原创 2023-10-29 22:45:43 · 606 阅读 · 0 评论 -
Linux 音频驱动实验
音频接口简介为何需要音频编解码芯片?WM8960 简介I2S 总线接口I.MX6ULL SAI 简介硬件原理图分析音频驱动使能修改设备树使能内核的WM8960 驱动alsa-lib 移植alsa-utils 移植声卡设置与测试amixer 使用方法音乐播放测试MIC 录音测试LINE IN 录音测试开机自动配置声卡mplayer 播放器移植与使用mplayer 移植(移植zlib 库)mplayer 使用alsamixer 简介原创 2023-10-29 18:44:00 · 1283 阅读 · 0 评论 -
Linux 串口RS232/485/GPS 驱动实验(移植minicom)
Linux 下UART 驱动框架I.MX6U UART 驱动分析硬件原理图分析RS232 驱动编写移植minicomRS232 驱动测试RS232 连接设置minicom 设置RS232 收发测试RS485 测试RS485 连接设置RS485 收发测试GPS 测试GPS 连接设置GPS 数据接收测试原创 2023-04-01 11:23:32 · 2642 阅读 · 2 评论 -
Linux 4G 通信实验
4G 网络连接简介高新兴ME3630 4G 模块实验ME3630 4G 模块简介ME3630 4G 模块驱动修改ME3630 4G 模块ppp 联网测试原创 2023-03-30 22:00:57 · 4129 阅读 · 0 评论 -
Linux WIFI 驱动实验(USB和SDIO方式)
WIFI 驱动添加与编译向Linux 内核添加WIFI 驱动配置Linux 内核编译WIFI 驱动驱动加载测试wireless tools 工具移植与测试wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植wpa_supplicant 移植WIFI 联网测试RTL8188 USB WIFI 联网测试RTL8189 SDIO WIFI 联网测试原创 2023-03-30 21:51:56 · 4924 阅读 · 0 评论 -
Linux USB 驱动实验
USB 接口简介什么是USB?USB 电气特性USB 拓扑结构什么是USB OTG?I.MX6ULL USB 接口简介硬件原理图分析USB HUB 原理图分析V2.4 版本以前底板USB OTG 原理图分析V2.4 及以后版本底板USB OTG 原理图分析USB 协议简析USB 描述符USB 数据包类型USB 传输类型USB 枚举Linux 内核自带HOST 实验USB 鼠标键盘测试U 盘实验Linux 内核自带USB OTG 实验修改设备树OTG 主机实验OTG原创 2023-03-29 22:04:07 · 4287 阅读 · 0 评论 -
Linux CAN 驱动实验
目录CAN 协议简析何为CAN?CAN 电气属性CAN 协议CAN 速率I.MX6ULL FlexCAN 简介硬件原理图分析实验程序编写修改设备树使能Linux 内核自带的FlexCAN 驱动FlexCAN 测试检查CAN 网卡设备是否存在移植iproute2移植can-utils 工具CAN 通信测试CAN 是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN 总线连接起来的。CAN 总线目前是自动化领域发展的热点技术之一,由于其高可靠性原创 2021-11-22 20:21:23 · 4754 阅读 · 0 评论 -
Linux SPI 驱动实验
Linux 下SPI 驱动框架简介SPI 主机驱动SPI 设备驱动SPI 设备和驱动匹配过程I.MX6U SPI 主机驱动分析SPI 设备驱动编写流程SPI 设备信息描述SPI 设备数据收发处理流程硬件原理图分析试验程序编写修改设备树编写ICM20608 驱动编写测试APP运行测试编译驱动程序和测试APP运行测试原创 2023-05-11 20:47:49 · 1746 阅读 · 0 评论 -
Linux I2C 驱动实验
目录Linux I2C 驱动框架简介I2C 总线驱动I2C 设备驱动I2C 设备和驱动匹配过程I.MX6U 的I2C 适配器驱动分析I2C 设备驱动编写流程I2C 设备信息描述I2C 设备数据收发处理流程硬件原理图分析实验程序编写修改设备树AP3216C 驱动编写编写测试APP运行测试编译驱动程序和测试APP运行测试I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,在裸机篇已经对I.MX6U 的I2C 接口做了详细的讲解。本章我们来学习一下如何在Linux 下开发I2C 接口器件驱动,重原创 2021-11-11 21:03:02 · 2129 阅读 · 0 评论 -
Linux RTC 驱动实验
目录Linux 内核RTC 驱动简介I.MX6U 内部RTC 驱动分析RTC 时间查看与设置RTC 也就是实时时钟,用于记录当前系统时间,对于Linux 系统而言时间是非常重要的,就和我们使用Windows 电脑或手机查看时间一样,我们在使用Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写Linux 下的RTC 驱动程序。Linux 内核RTC 驱动简介RTC 设备驱动是一个标准的字符设备驱动,应用程序通过open、release、read、write 和ioctl等函数完成对RTC原创 2021-11-10 21:18:00 · 521 阅读 · 0 评论 -
Linux LCD 驱动实验
目录Linux 下LCD 驱动简析1 Framebuffer 设备LCD 驱动简析硬件原理图分析LCD 驱动程序编写运行测试LCD 屏幕基本测试设置LCD 作为终端控制台LCD 背光调节从LCD自动关闭解决方法LCD 是很常用的一个外设,在裸机篇中我们讲解了如何编写LCD 裸机驱动,在Linux 下LCD 的使用更加广泛,在搭配QT 这样的GUI 库下可以制作出非常精美的UI 界面。本章我们就来学习一下如何在Linux 下驱动LCD 屏幕。Linux 下LCD 驱动简析1 Framebuffer 设备原创 2021-11-10 21:04:54 · 1253 阅读 · 1 评论 -
Linux INPUT 子系统实验
目录input 子系统input 子系统简input 驱动编写流程input_event 结构体硬件原理图分析实验程序编写修改设备树文件按键input 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试Linux 自带按键驱动程序的使用自带按键驱动程序源码简析自带按键驱动程序的使用按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了input 框架,用户只需要负责上原创 2021-11-10 20:46:58 · 1212 阅读 · 0 评论 -
Linux MISC 驱动实验
目录MISC 设备驱动简介硬件原理图分析实验程序编写修改设备树beep 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试misc 的意思是混合、杂项的,因此MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用MISC 驱动。MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在platform 总线驱动中,实现复杂的驱动,本章我们就来学习一下MISC 驱动的编写。MISC 设备驱动简介所有的MISC 设备驱动的主设备号都为10,不同的设备使用不同的从原创 2021-11-10 20:15:56 · 332 阅读 · 0 评论 -
Linux 自带的LED 灯驱动实验
目录Linux 内核自带LED 驱动使能Linux 内核自带LED 驱动简介LED 灯驱动框架分析module_platform_driver 函数简析gpio_led_probe 函数简析设备树节点编写运行测试前面我们都是自己编写LED 灯驱动,其实像LED 灯这样非常基础的设备驱动,Linux 内核已经集成了。Linux 内核的LED 灯驱动采用platform 框架,因此我们只需要按照要求在设备树文件中添加相应的LED 节点即可,本章我们就来学习如何使用Linux 内核自带的LED 驱动来驱动I.M原创 2021-11-10 20:09:02 · 3284 阅读 · 1 评论 -
设备树下的platform 驱动编写
目录设备树下的platform 驱动简介硬件原理图分析实验程序编写修改设备树文件platform 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章我们详细的讲解了Linux 下的驱动分离与分层,以及总线、设备和驱动这样的驱动框架。基于总线、设备和驱动这样的驱动框架,Linux 内核提出来platform 这个虚拟总线,相应的也有platform 设备和platform 驱动。上一章我们讲解了传统的、未采用设备树的platform 设备和驱动编写方法。最新的Linux 内核已经支持了原创 2021-11-10 19:59:43 · 1342 阅读 · 0 评论 -
platform 设备驱动实验
目录Linux 驱动的分离与分层驱动的分隔与分离驱动的分层platform 平台驱动模型简介platform 总线platform 驱动platform 设备硬件原理图分析试验程序编写platform 设备与驱动程序编写测试APP 编写54.5 运行测试编译驱动程序和测试APP运行测试我们在前面几章编写的设备驱动都非常的简单,都是对IO 进行最简单的读写操作。像I2C、SPI、LCD 等这些复杂外设的驱动就不能这么去写了,Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,在原创 2021-11-09 22:07:01 · 972 阅读 · 0 评论 -
异步通知实验(信号)
目录异步通知异步通知简介驱动中的信号处理应用程序对异步通知的处理硬件原理图分析实验程序编写修改设备树文件程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据,类似于我们在裸机例程中讲解的中断。Linux 提供了异步通知这个机制来完成此功能,本章我们就来学习一下原创 2021-11-09 21:38:03 · 606 阅读 · 0 评论 -
Linux 阻塞和非阻塞IO 实验
目录阻塞和非阻塞IO阻塞和非阻塞简介等待队列轮询Linux 驱动下的poll 操作函数阻塞IO 实验硬件原理图分析实验程序编写运行测试非阻塞IO 实验硬件原理图分析实验程序编写运行测试阻塞和非阻塞IO 是Linux 驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。本章我们就来学习一下阻塞和非阻塞IO,以及如何在驱动程序中处理阻塞与非阻塞,如何在驱动程序使用等待队列和poll 机制。阻塞和非阻塞IO阻塞和非阻塞简介这里的“IO”并不是我们学习STM32 或者其他单片机的原创 2021-11-09 21:03:43 · 801 阅读 · 0 评论 -
Linux 中断实验
目录Linux 中断简介Linux 中断API 函数上半部与下半部设备树中断信息节点获取中断号硬件原理图分析实验程序编写修改设备树文件不管是裸机实验还是Linux 下的驱动实验,中断都是频繁使用的功能,关于I.MX6U 的中断原理已经在第十七章做了详细的讲解,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能IRQ 等等。Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。本章我们就来学习一下如何在Linux 下使用中断原创 2021-11-08 22:10:36 · 1013 阅读 · 0 评论 -
Linux 内核定时器实验————复习到这
目录Linux 时间管理和内核定时器简介内核时间管理简介内核定时器简介Linux 内核短延时函数硬件原理图分析实验程序编写修改设备树文件定时器驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下Linux 内核提供的定时器API 函数,通过这些定时器API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。Linux 时间管理和内原创 2021-11-08 21:47:45 · 1025 阅读 · 0 评论 -
Linux按键输入实验(体验一下输入驱动,实际开发使用input子系统处理)
目录Linux 下按键驱动原理49.2 硬件原理图分析49.3 实验程序编写49.3.1 修改设备树文件按键驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试在前几章我们都是使用的GPIO 输出功能,还没有用过GPIO 输入功能,本章我们就来学习一下如果在Linux 下编写GPIO 输入驱动程序。I.MX6U-ALPHA 开发板上有一个按键,我们就使用此按键来完成GPIO 输入驱动程序,同时利用第四十七章讲的原子操作来对按键值进行保护。Linux 下按键驱动原理按键驱动和LED 驱动原原创 2021-11-08 21:31:54 · 1027 阅读 · 0 评论 -
Linux并发与竞争实验(一次只允许一个应用程序操作LED灯)
目录原子操作实验实验程序编写运行测试自旋锁实验实验程序编写运行测试信号量实验实验程序编写运行测试实验程序编写运行测试在上一章中我们学习了Linux 下的并发与竞争,并且学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。原子操作实验本实验对应的例程路径为:开发板光盘-> 2、Linux 驱动例程-> 7_atomic。本例程我们在第四十五章的gpioled.c 文件基础上完成。在本节使用中我们使用原子操作来实现对原创 2021-11-08 21:14:03 · 299 阅读 · 0 评论 -
Linux并发与竞争介绍(原子操作、自旋锁、信号量、互斥体)
目录并发与竞争原子操作原子操作简介原子整形操作API 函数原子位操作API 函数自旋锁自旋锁简介自旋锁API 函数其他类型的锁自旋锁使用注意事项信号量信号量简介信号量API 函数互斥体互斥体简介互斥体API 函数Linux 是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单原创 2021-11-08 20:46:47 · 564 阅读 · 0 评论 -
Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
目录蜂鸣器驱动原理硬件原理图分析实验程序编写修改设备树文件蜂鸣器驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章实验中我们借助pinctrl 和gpio 子系统编写了LED 灯驱动,I.MX6U-ALPHA 开发板上还有一个蜂鸣器,从软件的角度考虑,蜂鸣器驱动和LED 灯驱动其实是一摸一样的,都是控制IO 输出高低电平。本章我们就来学习编写蜂鸣器的Linux 驱动,也算是对上一章讲解的pinctrl和gpio 子系统的巩固。蜂鸣器驱动原理蜂鸣器驱动原理已经在第十四章有了详细的讲原创 2021-11-08 19:59:23 · 455 阅读 · 0 评论 -
pinctrl和gpio子系统实验(芯片原厂做的,类似STM32的HAL库,我们只需调用API来直接操作GPIO)
目录pinctrl 子系统pinctrl 子系统简介I.MX6ULL 的pinctrl 子系统驱动设备树中添加pinctrl 节点模板gpio 子系统gpio 子系统简介I.MX6ULL 的gpio 子系统驱动gpio 子系统API 函数设备树中添加gpio 节点模板与gpio 相关的OF 函数硬件原理图分析实验程序编写修改设备树文件LED 灯驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章我们编写了基于设备树的LED 驱动,但是驱动的本质还是没变,都是配置LED 灯所使用的GPI原创 2021-11-07 21:49:43 · 659 阅读 · 0 评论 -
设备树下的LED驱动实验
目录设备树LED 驱动原理硬件原理图分析实验程序编写修改设备树文件LED 灯驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章我们详细的讲解了设备树语法以及在驱动开发中常用的OF 函数,本章我们就开始第一个基于设备树的Linux 驱动实验。本章在第四十二章实验的基础上完成,只是将其驱动开发改为设备树形式而已。设备树LED 驱动原理在《第四十二章新字符设备驱动实验》中,我们直接在驱动文件newchrled.c 中定义有关寄存器物理地址,然后使用io_remap 函数进行内存映射,原创 2021-11-07 21:09:14 · 618 阅读 · 0 评论 -
Linux设备树
目录什么是设备树DTS、DTB 和DTCDTS 语法.dtsi 头文件设备节点标准属性前面章节中我们多次提到“设备树”这个概念,因为时机未到,所以当时并没有详细的讲解什么是“设备树”,本章我们就来详细的谈一谈设备树。掌握设备树是Linux 驱动开发人员必备的技能!因为在新版本的Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的CPU 其驱动开发也基本都是基于设备树的,比如ST 新出的STM32MP157、NXP 的I.MX8 系列等。我们所使用的Linux 版本为原创 2021-11-07 14:34:12 · 805 阅读 · 0 评论 -
新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)
目录新字符设备驱动原理分配和释放设备号新的字符设备注册方法自动创建设备节点mdev 机制创建和删除类创建设备参考示例设置文件私有数据硬件原理图分析实验程序编写LED 灯驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试经过前两章实验的实战操作,我们已经掌握了Linux 字符设备驱动开发的基本步骤,字符设备驱动开发重点是使用register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用mkn原创 2021-11-06 20:02:45 · 531 阅读 · 0 评论 -
Linux LED驱动开发实验(直接操作寄存器 -- 实际开发很少这样做)
目录Linux 下LED 灯驱动原理地址映射I/O 内存访问函数硬件原理图分析实验程序编写LED 灯驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章我们详细的讲解了字符设备驱动开发步骤,并且用一个虚拟的chrdevbase 设备为例带领大家完成了第一个字符设备驱动的开发。本章我们就开始编写第一个真正的Linux 字符设备驱动。在I.MX6U-ALPHA 开发板上有一个LED 灯,我们在裸机篇中已经编写过此LED 灯的裸机驱动,本章我们就来学习一下如何编写Linux 下的LED 灯驱原创 2021-11-06 19:35:31 · 1085 阅读 · 0 评论 -
虚拟字符设备驱动开发步骤
目录字符设备驱动简介内核驱动操作函数集合字符设备驱动开发步骤驱动模块的加载和卸载字符设备注册与注销实现设备的具体操作函数添加LICENSE 和作者信息Linux 设备号设备号的组成设备号的分配chrdevbase 字符设备驱动开发实验实验程序编写编写测试APP编译驱动程序和测试APP运行测试Linux 中的三大类驱动:字符设备驱动、块设备驱动和网络设备驱动。字符设备驱动是占用篇幅最大的一类驱动,因为字符设备最多,从最简单的点灯到I2C、SPI、音频等都属于字符设备驱动的类型。块设备和网络设备驱动要比字原创 2021-11-06 17:03:18 · 1941 阅读 · 0 评论