# linux-drive **Repository Path**: ax020913/linux-drive ## Basic Information - **Project Name**: linux-drive - **Description**: linux 驱动开发的学习代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-07-14 - **Last Updated**: 2025-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: C语言, makefile, shell ## README # Linux 驱动开发代码学习 ## 开发环境搭建 ##### 1. 关闭windows防火墙;下载VsCode,并装好ssh远程链接虚拟机的插件 ##### 2. 安装VMware 17以上的版本,安装Ubuntu 版本 >= 18.04 ##### 3. 设置Ubuntu通过NAT连网,Ubuntu内ssh设置,通过vscode插件ssh链接Ubuntu开发(不用在虚拟机上的 vi / vim 上开发) ##### 4. 板子环境的设置...... - vscode终端使用细节:code readme.md(文件名) 命令,可以直接打开对应的文件,链接虚拟机的时候就不用打开更多的文件夹层级。 ## 一. 内核模块 #### 1. 内核模块的创建和外部编译 #### 2. 模块依赖与导出符号 ## 二. Linux内核中字符设备驱动框架 #### 1. 字符设备驱动开发框架 #### 2. 上通-驱动代码和应用层代码的数据交互 #### 3. 下达-驱动代码和操作底层硬件点LED灯 #### 4. 设备节点简化02-3的驱动方式 #### 5. struct cdev字符设备的使用 #### 6. 对字符设备的复杂操作ioctl #### 7. 内核动态开辟空间kmalloc_kzalloc_vmalloc_kfree_vfree_goto的使用 ## 三. Linux内核中处理IO请求的模型 #### 1. 内核等待队列实现阻塞IO模型 #### 2. 非阻塞IO模型 #### 3. 多路复用模型 #### 4. 信号驱动IO模型 ## 四. Linux内核中竞态的四种同步解决方案 #### 1. 内核自旋锁spinlock_t的使用 #### 2. 内核信号量semaphra的使用 #### 3. 内核互斥体mutex的使用 #### 4. 内核原子操作的使用 ## 五. 平台总线platform #### 1. 平台设备struct_platform_device #### 2. 平台驱动struct_platform_driver(设备与驱动的name匹配方式,一对一) #### 3. 设备与驱动的id匹配,多对一 #### 4. 平台总线的方式点灯 ## 六. 设备树 #### 1. 备树节点与驱动的匹配方式 #### 2. 备树中GPIO子系统的点灯应用 ## 七. 中断和中断子系统 #### 1. 中断上文按键中断控制led灯的亮灭-未处理按键抖动 #### 2. 内核定时器对按键消抖 #### 3. 中断下文tasklet对按键消抖(软中断机制) #### 4. 中断下文workqueue对按键msleep阻塞消抖(线程机制) #### 5. 中断下文中断线程化对按键msleep阻塞消抖(多线程机制) ## 八. input输入子系统 #### 1. input输入子系统的应用 - 按键key1 key2 key3 对应输出 A B C ## 九. IIC总线驱动子系统 #### 1. IIC总线驱动的应用(获取温度和湿度) ## 十. SPI总线驱动子系统 #### 1. SPI总线驱动数码管显示数字 ## 十一. PWM子系统 #### 1. PWM总线电机控制实验,控制风扇的转速/功率 #### 2. PWM总线控制LED灯的亮度/功率 ## 十二. 块设备驱动 #### 1. 视频地址:[b站up绯夏之雨 - 合集·Linux驱动开发学习分享](https://space.bilibili.com/266979612/channel/collectiondetail?sid=3029193) 文档笔记:[有道云笔记](https://note.youdao.com/s/Y4tL6qob)