Linux驱动开发与使用大全
1. 课程介绍
这是连载课程,会涉及如下内容:
2. 适用单板
本教程支持三款开发板:100ASK_IMX6ULL pro、100ASK_IMX6ULL mini emmc、100ASK_STM32MP157 pro。
- 100ASK_IMX6ULL 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. 观看视频
- 官网:http://www.100ask.net
- 微信小程序:搜“韦东山”
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. 联系方式
-
微信小程序:搜“韦东山”




