Linux驱动开发与使用大全

1. 课程介绍

这是连载课程,会涉及如下内容:

2. 适用单板

本教程支持三款开发板100ASK_IMX6ULL pro、100ASK_IMX6ULL mini emmc、100ASK_STM32MP157 pro。

  • 100ASK_IMX6ULL pro全功能版

  • 100ASK_IMX6ULL mini emmc

  • 100ASK_STM32MP157 pro全功能版

3. 资料下载

先去https://gitforwindows.org/下载Windows版本的git工具

安装、启动Git Bash。

然后执行命令:

git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

为了方便记忆,上述地址都放在百问网下载中心:http://download.100ask.net/

4. 观看视频

5. 更新记录

  • 2020.06.18 完结"同步与互斥"

  • 2021.01.05 正式启动"驱动大全"的录制,发布"LCD驱动"

  • 2021.01.11 发布"LCD驱动"07_硬件_8080接口LCD时序分析、08_硬件_TFT-RGB接口LCD时序分析

  • 2021.01.14 发布"LCD驱动"09_硬件_IMX6ULL的LCD控制器、09_硬件_STM32MP157的LCD控制器

  • 2021.01.15 发布"LCD驱动"10_分析内核自带的LCD驱动程序_基于IMX6ULL

  • 2021.01.20 发布"LCD驱动"10_分析内核自带的LCD驱动程序_基于STM32MP157

  • 2021.01.21 发布"LCD驱动"11_编程_LCD驱动程序框架_使用设备树

  • 2021.01.21 发布"LCD驱动"12_编程_引脚配置_基于IMX6ULL

  • 2021.01.22 发布"LCD驱动"12_编程_配置引脚_基于STM32MP157

  • 2021.01.23 发布"LCD驱动"13_编程_时钟配置_基于IMX6ULL

  • 2021.01.25 发布"LCD驱动"13_编程_时钟配置_基于STM32MP157

  • 2021.01.25 发布"LCD驱动"14_编程_LCD控制器配置之获得LCD参数_通用

  • 2021.01.27 发布"LCD驱动"15_编程_配置LCD控制器之寄存器操作_基于IMX6ULL

  • 2021.01.28 发布"LCD驱动"16_上机实验_基于IMX6ULL

  • 2021.01.29 发布"LCD驱动"17_单Buffer的缺点与改进方法

  • 2021.02.01 发布"LCD驱动"18_编写使用多buffer的应用程序

  • 2021.02.03 发布"LCD驱动"

    • 15_编程_配置LCD控制器之寄存器操作_基于STM32MP157
    • 16_上机实验_基于STM32MP157
    • 18_STM32MP157内核自带的LCD驱动不支持多buffer
  • 2021.02.20 发布"I2C系统"01_I2C视频介绍

  • 2021.02.22 发布"I2C系统"02_I2C协议

  • 2021.02.23 发布"I2C系统"03_I2C系统的重要结构体

  • 2021.02.24 发布"I2C系统"

    • 发布新教程03_SMBus协议
  • 把之前的03_I2C系统的重要结构体改名为04_I2C系统的重要结构体

  • 2021.02.25 发布"I2C系统"

    • 修改03_SMBus协议增加了I2C Block Read/Write
    • 新增05_无需编写驱动直接访问设备_I2C-Tools介绍
    • 新增06_编写APP直接访问EEPROM
  • 2021.02.27 发布"I2C系统"

    • 07_通用驱动i2c-dev分析
    • 08_I2C系统驱动程序模型
  • 2021.03.01 发布"I2C系统"09_编写设备驱动之i2c_driver

  • 2021.03.01 发布"I2C系统"10_编写设备驱动之i2c_client

  • 2021.03.05 发布"I2C系统"11_I2C_Adapter驱动框架讲解与编写

  • 2021.03.11 发布"I2C系统"12_完善虚拟的I2C_Adapter驱动并模拟EEPROM

  • 2021.03.12 发布"I2C系统"13_使用GPIO模拟I2C的驱动程序分析

  • 2021.03.13 发布"I2C系统"

    14_使用GPIO操作I2C设备_基于IMX6ULL
    14_使用GPIO操作I2C设备_基于STM32MP157
    
  • 2021.03.15 完结"I2C系统"发布15_具体芯片的I2C_Adapter驱动分析

  • 2021.03.23 发布"Input子系统"01_Input子系统视频介绍

  • 2021.03.23 发布"Input子系统"

    02_先学习输入系统应用编程
    APP_01.输入系统框架及调试
    APP_02.现场编程读取获取输入设备信息
    APP_03.查询_休眠唤醒_方式读取输入数据
    APP_04.POLL_SELECT_方式读取输入数据
    APP_05.异步通知方式读取输入数据
    APP_06.电阻屏和电容屏
    APP_07.tslib框架分析
    APP_08.tslib交叉编译与测试
    APP_09.编写基于tslib的测试程序
    
  • 2021.03.25 发布"Input子系统"DRV_01_Input子系统框架详解

  • 2021.03.26 发布"Input子系统"DRV_02_编写input_dev驱动框架

  • 2021.03.29 发布"Input子系统"

    DRV_03_编写最简单的触摸屏驱动程序之IRQ_基于QEMU
    DRV_04_编写最简单的触摸屏驱动程序之完善_基于QEMU
    
  • 2021.03.31 发布"Input子系统"

    DRV_05_GPIO按键驱动分析与使用
    DRV_06_I2C接口触摸屏驱动分析
    
  • 2021.04.02 发布、完结"Input子系统"DRV_07_UInput分析_用户态创建input_dev

  • 2021.04.30 发布"Pinctrl子系统"

    01_Pinctrl子系统视频介绍
    02_使用Pinctrl要掌握的重要概念
    
  • 2021.04.30 发布"Pinctrl子系统"

    03_Pinctrl子系统使用示例_基于IMX6ULL
    03_Pinctrl子系统使用示例_基于STM32MP157
    
  • 2021.05.06 发布"Pinctrl子系统"04_Pinctrl子系统主要数据结构

  • 2021.05.12 发布"Pinctrl子系统"

    05_Pincontroller构造过程情景分析_基于IMX6ULL
    05_Pincontroller构造过程情景分析_基于STM32MP157
    
  • 2021.05.13 发布"Pinctrl子系统"

    06_client端使用pinctrl过程的情景分析_基于IMX6ULL
    06_client端使用pinctrl过程的情景分析_基于STM32MP157
    
  • 2021.05.14 发布"Pinctrl子系统"

    07_编写虚拟的Pinctrl驱动程序之实现框架
    08_编写虚拟的Pinctrl驱动程序之设置pinctrl_desc
    09_编写虚拟的Pinctrl驱动程序之处理设备树
    
  • 2021.05.15 完结"Pinctrl子系统"

    10_调试虚拟的Pinctrl驱动程序
    
  • 2021.05.26 开始发布"GPIO子系统":

    01_GPIO子系统视频介绍
    02_使用GPIO子系统要掌握的重要概念
    03_基于GPIO子系统的LED驱动程序
    04_在100ASK_IMX6ULL上机实验
    04_在100ASK_STM32MP157上机实验
    
  • 2021.05.27 发布"GPIO子系统":

    05_GPIO子系统层次与数据结构
    
  • 2021.05.28 发布"GPIO子系统":

    06_IMX6ULL的GPIO驱动源码分析
    06_STM32MP157的GPIO驱动源码分析
    07_编写一个虚拟GPIO控制器的驱动程序
    08_调试与使用虚拟的GPIO控制器
    
  • 2021.05.29 完结"GPIO子系统":

    09_GPIO子系统与Pinctrl子系统的交互
    10_编程_GPIO使用Pinctrl
    11_GPIO子系统的sysfs接口
    
  • 2021.06.12 发布"Interrupt子系统"

    01_异常与中断的概念及处理流程
    02_进程线程中断的核心_栈
    03_Linux系统对中断处理的演进
    04_Linux中断系统中的重要数据结构
    05_在设备树中指定中断_在代码中获得中断
    06_编写使用中断的按键驱动程序
    07_IMX6ULL设备树修改及上机实验
    07_STM32MP157设备树修改及上机实验
    
  • 2021.06.25 发布"Interrupt子系统"

    08_中断相关的其他驱动程序
    09_中断的硬件框架
    10_GIC介绍与编程
    
  • 2021.06.26 发布"Interrupt子系统"

     11_异常向量表的安装与调用
    
  • 2021.06.28 发布"Interrupt子系统"

    12_GIC驱动程序对中断的处理流程
    13_GIC驱动程序分析
    
  • 2021.07.03 发布"Interrupt子系统"

    14_两类中断控制器处理流程_链式和层级
    15_链式中断控制器驱动程序编写
    
  • 2021.07.04 发布"Interrupt子系统"

    16_legacy方式代码的上机实验
    
  • 2021.07.05 发布"Interrupt子系统"

    17_链式中断控制器驱动程序编写_linear方式
    18_层级中断控制器驱动程序编写
    19_层级中断控制器驱动程序上机实验
    
  • 2021.07.12 发布"UART子系统"

    01_UART子系统视频介绍
    02_硬件知识_UART硬件介绍
    
  • 2021.07.14 发布"UART子系统"

    03_TTY体系中设备节点的差别
    
  • 2021.07.16 发布"UART子系统"

    04_TTY驱动程序框架
    
  • 2021.07.19 发布"UART子系统"

    5a_在STM32MP157上做串口实验的准备工作
    05_Linux串口应用编程_回环
    06_Linux串口应用编程_GPS
    
  • 2021.07.21 发布"UART子系统"

    07_字符设备驱动程序的另一种注册方法
    
  • 2021.07.22 发布"UART子系统"

    08_UART驱动情景分析_注册
    
  • 2021.07.26 发布"UART子系统"

    09_UART驱动情景分析_open
    10_UART驱动情景分析_read
    11_UART驱动情景分析_write
    
  • 2021.07.30 发布"UART子系统"

    12_UART驱动调试方法
    13_编写虚拟UART驱动程序_框架
    
  • 2021.08.02 发布"UART子系统"

    14_编写虚拟UART驱动程序_实现uart_ops
    
  • 2021.08.04 发布"UART子系统"

    15_编写虚拟UART驱动程序_实现数据传输
    
  • 2021.08.06 发布"UART子系统"

    16_编写虚拟UART驱动程序_调试
    
  • 2021.08.12 发布"UART子系统"

    17_printk执行过程
    
  • 2021.08.16 发布"UART子系统"

    18_console驱动注册过程
    19_编写console驱动
    20_early_printk和earlycon
    
  • 2021.08.17 完结"UART子系统"

    21_RS485简单讲解
    
  • 2021.10.11 发布"PCI和PCIe子系统"

    01_从软件开发角度看待PCI和PCIe
    
  • 2021.10.29 发布"PCI和PCIe子系统"

    02_PCI设备的访问方法_非桥设备(type0)
    
  • 2021.11.01 发布"PCI和PCIe子系统"

    03_PCI设备的访问方法_桥设备(type1)
    
  • 2021.11.11 发布"PCI和PCIe子系统"

    04_从软件角度看PCIe设备的硬件结构
    
  • 2021.11.18 发布"PCI和PCIe子系统"

    05_PCIe设备的配置过程
    
  • 2021.11.30 发布"PCI和PCIe子系统"

    06_PCIe路由方式
    
  • 2021.12.29 发布"PCI和PCIe子系统"

    07_PCI驱动程序框架
    
  • 2021.12.31 发布"PCI和PCIe子系统"

    08_RK3399_PCIe芯片手册解读
    
  • 2022.01.02 发布"PCI和PCIe子系统"

    09_RK3399_PCIe_Host驱动分析_地址映射
    
  • 2022.01.06 发布"PCI和PCIe子系统"

    10_RK3399_PCIe_Host驱动分析_设备枚举
    
  • 2022.01.17 发布"PCI和PCIe子系统"

    11_INTx_MSI_MSIX三种中断机制分析
    
  • 2022.01.20 发布"PCI和PCIe子系统"

    12_INTx中断机制源码分析
    
  • 2022.01.25 发布"PCI和PCIe子系统"

    13_GICv3_LPI机制
    
  • 2022.01.26 完结"PCI和PCIe子系统"

    14_MSI_MSI-X中断之体验与使用
    15_MSI_MSI-X中断之源码分析
    16_怎么编写PCIe设备驱动程序
    
  • 2022.02.16 发布"SPI子系统"

    01_SPI视频概述
    02_SPI协议介绍
    
  • 2022.02.24 发布"SPI子系统"

    03_SPI总线设备驱动模型
    
  • 2022.03.07 发布"SPI子系统"

    04_SPI设备树处理过程
    
  • 2022.03.09 发布"SPI子系统"

    05_spidev的使用(SPI用户态API)
    
  • 2022.03.10 发布"SPI子系统"

    06_使用spidev操作SPI_DAC模块
    
  • 2022.03.14 发布"SPI子系统"

    07_DAC模块上机实验_IMX6ULL
    07_DAC模块上机实验_STM32MP157
    
  • 2022.03.17 发布"SPI子系统"

    08_SPI_OLED模块操作方法
    
  • 2022.03.23 发布"SPI子系统"

    09_使用spidev操作SPI_OLED模块
    10_OLED模块上机实验_IMX6ULL
    
  • 2022.03.23 发布"SPI子系统"

    11_编写SPI设备驱动程序
    
  • 2022.04.25 发布"SPI子系统"

    10_OLED模块上机实验_STM32MP157
    
  • 2022.04.26 发布"SPI子系统"

    12_编写SPI_DAC模块驱动程序
    13_编写DAC驱动_上机实验_IMX6ULL
    13_编写DAC驱动_上机实验_STM32MP157
    
  • 2022.04.29 发布"SPI子系统"

    14_编写SPI_OLED模块驱动程序
    15_编写OLED驱动_上机实验_IMX6ULL
    15_编写OLED驱动_上机实验_STM32MP157
    
  • 2022.05.07 发布"SPI子系统"

    16_使用Framebuffer改造OLED驱动
    
  • 2022.05.13 发布"SPI子系统"

    17_OLED_Framebuffer驱动_上机实验
    
  • 2022.05.31 发布"SPI子系统"

    18_SPI_Master驱动程序框架
    
  • 2022.06.06 发布"SPI子系统"

    19_编写SPI_Master驱动程序_老方法
    
  • 2022.06.08 发布"SPI子系统"

    20_使用老方法编写的SPI_Master驱动程序上机实验_IMX6ULL
    20_使用老方法编写的SPI_Master驱动程序上机实验_STM32MP157
    
  • 2022.06.15 发布"SPI子系统"

    21_编写SPI_Master驱动程序_新方法
    22_使用新方法编写的SPI_Master驱动程序上机实验
    
  • 2022.07.01 发布"SPI子系统"

    23_SPI_Slave_Mode驱动程序框架
    
  • 2022.07.05 发布"SPI子系统"

    24_SPI_Slave_Mode驱动程序源码解读
    
  • 2022.07.21 发布"USB子系统"

    01_USB视频介绍及资料下载
    02_USB系统硬件框架和软件框架
    
  • 2022.08.10 发布"USB子系统"

    03_软件工程师眼里的USB电气信号
    
  • 2022.08.19 发布"USB子系统"

    04.1_USB协议层数据格式_事务_包_域
    
  • 2022.08.22 发布"USB子系统"

    04.2_USB协议层数据格式_批量_中断_实时传输
    04.3_USB协议层数据格式_控制传输
    
  • 2022.08.30 发布"USB子系统"

    04.4_使用工具体验数据格式
    05.1_描述符的概念
    05.2_设备枚举过程
    
  • 2022.09.20 发布"USB子系统"

    06.1_libusb的使用流程
    06.2_libusb的API接口简单介绍
    06.3_libusb的示例代码
    
  • 2022.09.23 发布"USB子系统"

    07.1_USB鼠标协议
    
  • 2022.09.28 发布"USB子系统"

    07.2_使用libusb同步函数读取USB鼠标
    07.3_上机实验1_在Ubuntu上实验
    07.4_上机实验2_交叉编译libusb
    07.5_上机实验3_在板上实验
    
  • 2022.09.28 发布"USB子系统"

    07.6_使用libusb异步函数读取USB鼠标
    07.7_异步方式上机实验
    
  • 2022.10.10 发布"USB子系统"

    08_USB设备驱动模型
    
  • 2022.10.11 发布"USB子系统"

    09.1_编写USB鼠标驱动程序_框架
    
  • 2022.10.13 发布"USB子系统"

    09.2_编写USB鼠标驱动程序_完善代码
    09.3_编写USB鼠标驱动程序_上机实验
    
  • 2022.11.08 发布"USB子系统"

    10_OTG硬件监测电路
    
  • 2022.12.30 发布"USB子系统"

    11.1_怎样理解Gadget框架
    11.2_从硬件软件角度理解Gadget框架1_UDC驱动
    
  • 2023.01.03 发布"USB子系统"

    11.2_从硬件软件角度理解Gadget框架2_上层驱动
    
  • 2023.01.07 发布"USB子系统"

    11.3_从构造描述符的角度理解Gadget框架
    
  • 2023.02.07 发布"USB子系统"

    11.4_从获取描述符的角度理解Gadget框架
    
  • 2023.02.15 发布"USB子系统"

    11.5_从数据传输的角度理解Gadget框架1_endpoint是核心
    11.5_从数据传输的角度理解Gadget框架2_loopback驱动分析
    11.5_从数据传输的角度理解Gadget框架3_sourcesink驱动分析
    
  • 2023.02.21 发布"USB系统"

    12.1_Gadget应用示例之zero_编程
    12.2_Gadget应用示例之zero_上机
    
  • 2023.03.03 发布"USB系统"

    13.1_Gadget应用实例之serial_框架分析
    13.2_Gadget应用实例之serial_编程
    
  • 2023.03.28 发布"USB系统"

    14.1_configfs的体验
    14.2_configfs内部机制
    
  • 2023.03.28 完结"USB系统"

    15.1_ADB体验与内部机制
    15.2_使用Buildroot移植ADB
    
  • 2023.06.18 发布"摄像头驱动"

    [01-1]_V4L2应用程序开发_数据采集流程
    
  • 2023.07.18 发布"摄像头驱动"

    [01-2]_V4L2应用程序开发_控制流程
    
  • 2023.07.18 发布"摄像头驱动"

    [01-3]_V4L2应用程序开发_列出帧细节
    [01-4]_V4L2应用程序开发_获取数据
    

[01-5]_V4L2应用程序开发_调试 [01-6]_V4L2应用程序开发_控制亮度


* 2023.08.03 发布"摄像头驱动"

```shell
[02-1]_驱动总体框架
[02-2]_ioctl调用流程分析
  • 2023.08.10 发布"摄像头驱动"

    [02-3]_videobuffer2缓冲区结构体
    
  • 2023.08.26 发布"摄像头驱动"

    [02-4]_videobuffer2的3个ops
    [02-5]_videobuffer2情景分析
    
  • 2023.09.04 发布"摄像头驱动"

    [03-1]_回顾与编写驱动框架
    [03-2]_虚拟摄像头驱动编程_ioctl代码
    [03-3]_虚拟摄像头驱动编程_buffer代码
    
  • 2023.09.18 发布"摄像头驱动"

    [03-4]_虚拟摄像头驱动编程_数据传输
    [03-5]_虚拟摄像头驱动编程_上机实验
    [03-6]_虚拟摄像头驱动编程_在STM32MP157上做实验
    
  • 2023.10.14 发布"摄像头驱动"

    [04-1]_USB摄像头描述符解析
    
  • 2023.10.24 发布"摄像头驱动"

    [04-2]_USB摄像头枚举过程
    [04-3]_USB摄像头设备控制过程
    [04-4]_USB摄像头数据传输过程
    
  • 2023.12.07 发布"摄像头驱动"

    [05-1]_MIPI摄像头硬件框架
    
  • 2024.02.24 发布"摄像头驱动"

    [05-2-1]_搭建V853开发环境_下载与体验
    [05-2-2]_搭建V853开发环境_更换单板系统
    [05-2-3]_搭建V853开发环境_自制单板系统
    
  • 2024.03.02 发布"摄像头驱动"

    [05-3-1]_subdev和media子系统的引入
    [05-3-2]_subdev概览与数据结构
    [05-3-3]_media子系统概览与数据结构
    [05-3-4]_subdev的注册
    
  • 2024.03.20 发布"摄像头驱动"

    [05-3-5]_subdev的使用
    [05-3-6]_media子系统的注册
    [05-3-7]_media子系统的使用
    
  • 2024.05.25 "摄像头驱动"完结

    [05-4-1]_V853_MIPI驱动程序的层次
    [05-4-2]_V853_MIPI源码分析_Sensor
    [05-4-3]_V853_MIPI源码分析_其他subdev
    [05-4-4]_上层驱动如何管理subdev
    [05-4-5]_使用media子系统和subdev的APP
    
  • 2024.10.25 发布"IIO子系统"

    01.1_IIO子系统简化框架
    01.2_DHT11操作原理与编程思路
    
  • 2024.10.31 发布"IIO子系统"

    01.3_DHT11驱动程序体验_IMX6ULL
    01.3_DHT11驱动程序体验_STM32MP157
    
  • 2024.11.05 发布"IIO子系统"

    01.4_DHT11驱动程序分析
    01.5_通道的sysfs信息修改与体验
    
  • 2024.11.07 发布"IIO子系统"

    02.1_iio_buffer的核心要素与体验
    
  • 2024.11.08 发布"IIO子系统"

    02.2_增加iio_buffer并体验sysfs
    02.3_实现iio_buffer的写入
    
  • 2024.11.25 发布"IIO子系统"

    03.1_iio_trigger的引入与体验
    03.2_iio_trigger内部机制
    03.3_iio-trig-hrtimer分析
    03.4_修改DHT11驱动使用iio_trigger
    
  • 2024.11.28 完结"IIO子系统"

    04.1_iio_event的引入与体验
    04.2_修改DHT11驱动使用iio_event_编程
    04.3_修改DHT11驱动使用iio_event_上机测试
    04.4_使用trigger写iio_event(不实用)
    05.1_驱动示例_IMX6ULL的ADC驱动
    05.2_驱动示例_STM32MP157的ADC驱动
    05.3_STM32MP157的ADC驱动分析
    
  • 2025.04.09 完结"devmem和UIO子系统"

    01_devmem和UIO
    02_devmem应用与驱动分析
    03.1_UIO驱动分析
    03.2_UIO驱动编写
    03.3_UIO驱动测试
    03.4_STM32MP157上机实验
    

6. 联系方式


Description
No description provided
Readme 1.7 GiB
Languages
C 89.6%
HTML 6.4%
Makefile 2.1%
C++ 1.6%
Shell 0.2%