![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
朱有鹏Linux驱动开发
从零开始逐步深入了解字符设备驱动、块设备驱动、网络设备驱动
big__C
小白
展开
-
Linux驱动开发(1)------- 以最简单的驱动模块开启驱动开发之路
这里写目录标题一,开启驱动开发之路二,最简单的模块源码分析三,用开发板来调试模块一,开启驱动开发之路1、驱动开发的准备工作(1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。(2)内核源码树,其实就是一个经过了配置编译之后的内核源码。(3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。2、驱动开发的步骤(1)驱动源码编写、Makefile编写、编译(2)insmod装载模块、测试、rmmod卸载模块3、原创 2020-05-29 13:00:10 · 713 阅读 · 0 评论 -
Linux驱动开发(2)------- 字符设备驱动基础
目录一,开启驱动开发之路最简单的模块源码分析用开发板来调试模块字符设备驱动工作原理字符设备驱动代码实践应用程序如何调用驱动添加读写接口读写接口实践驱动中如何操控硬件静态映射操作LED动态映射操作LED一,开启驱动开发之路1、驱动开发的准备工作(1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。(2)内核源码树,其实就是一个经过了配置编译之后的内核源码。(3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。2、驱原创 2020-05-29 16:16:55 · 803 阅读 · 0 评论 -
Linux驱动开发(3)------- 字符设备驱动高级
目录一,注册字符设备驱动新接口二,字符设备驱动注册代码分析自动创建字符设备驱动的设备文件设备类相关代码分析静态映射表建立过程分析动态映射结构体方式操作寄存器内核提供的读写寄存器接口一,注册字符设备驱动新接口1、新接口与老接口(1)老接口:register_chrdev(2)新接口:register_chrdev_region/alloc_chrdev_region + cdev2、cdev介绍(1)结构体struct cdev { struct kobject kobj;原创 2020-05-31 16:57:28 · 491 阅读 · 0 评论 -
Linux驱动开发(4)------- 驱动框架入门之LED
目录何谓驱动框架内核驱动框架中LED的基本情况初步分析led驱动框架源码在内核中添加或去除某个驱动基于驱动框架写led驱动何谓驱动框架1、驱动是谁写的(1)驱动开发工程师(2)内核维护者2、驱动编程协作要求(1)接口标准化(2)尽量降低驱动开发者难度3、到底什么是驱动框架(1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架。(2)内核维原创 2020-06-01 14:44:48 · 466 阅读 · 0 评论 -
Linux驱动开发(5)------- linux内核的gpiolib学习
目录.1、gpiolib学习重点(1)gpiolib的建立过程(2)gpiolib的使用方法:申请、使用、释放(3)gpiolib的架构:涉及哪些目录的哪些文件5.4.9.2、gpiolib的学习方法(1)以一条主线进去,坚持主线(2)中途遇到杂碎知识,彻底搞定之,然后继续主线(3)随时做笔记以加深理解和记忆(4)学习途中注意架构思想,提升自己大脑的空间复杂度5.4.9.3、主线1:gpiolib的建立(1)找到目标函数smdkc110_map_ios5pv210_gpiolib_原创 2020-06-02 22:38:59 · 398 阅读 · 0 评论 -
Linux驱动开发(6)------- linux设备驱动模型的底层架构与组织方式
目录linux设备驱动模型简介设备驱动模型的底层架构总线式设备驱动组织方式platform平台总线工作原理平台总线实践环节linux设备驱动模型简介1、什么是设备驱动模型(1)类class、总线bus、设备device、驱动driver(2)kobject和对象生命周期(3)sysfs(4)udev5.5.1.2、为什么需要设备驱动模型(1)早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用(2)2.6版本中正式引入设备驱动模型,目的是在设备越来越多,功耗要求等新特性要求的情况下让原创 2020-06-06 00:15:14 · 459 阅读 · 0 评论 -
Linux驱动开发(7)------- platform平台总线
目录一,platform平台总线简介二,platform平台总线工作原理三,使用platform平台总线的LED驱动代码实践一,platform平台总线简介1、何为平台总线(1)相对于usb、pci、i2c等物理总线来说,platform总线是虚拟的、抽象出来的。(2)回顾裸机中讲的,CPU与外部通信的2种方式:地址总线式连接和专用接口式连接。平台总线对应地址总线式连接设备,也就是SoC内部集成的各种内部外设。2、平台总线下管理的2员大将(1)platform工作体系都定义在drivers/原创 2020-06-06 13:44:55 · 533 阅读 · 0 评论 -
Linux驱动开发(8)------- misc类设备与蜂鸣器驱动
目录misc类设备介绍misc驱动框架源码分析蜂鸣器驱动源码分析板载蜂鸣器驱动测试misc类设备介绍1、什么是misc设备(1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于杂散设备,也就是misc设备,例如像adc、buzzer等这些设备一般都归属于misc中。由于官方没有规定什么设备是misc设备,由于驱动工程师的差异可能导致虽然这些设备归属于杂散设备中,但不把设备放在这个misc类中,这都是驱动工程师按照自原创 2020-06-07 10:07:40 · 393 阅读 · 0 评论 -
Linux驱动开发(9)------- framebuffer驱动详解
目录framebuffer驱动源码分析1.framebuffer驱动框架总览2.framebuffer驱动框架分析3.framebuffer驱动分析framebuffer介绍framebuffer驱动源码分析1.framebuffer驱动框架总览1、驱动框架部分 drivers/video/fbmem.c主要任务:fbmen_init()函数负责创建graphics类、注册FB的字符设备驱动、register_framebuffer()函数提供接口给具体framebuffer驱动编写着来注册f原创 2020-06-08 13:20:26 · 5635 阅读 · 0 评论 -
Linux驱动开发(10)------- input子系统
目录一,什么是input子系统二,input子系统源码分析1.input子系统架构总览2.输入核心层源码分析3.输入事件驱动层源码分析4.输入设备驱动层源码分析三,input设备应用层编程实践中断方式按键驱动实战一,什么是input子系统1、何为输入设备5.8.1.2、linux中输入设备的编程模型(1)命令行界面的输入类设备应用接口(2)GUI界面带来的麻烦、不同的输入类设备也会带来麻烦(3)struct input_event5.8.1.3、input子系统简介(1)linux的in原创 2020-11-09 16:39:38 · 873 阅读 · 0 评论 -
Linux驱动开发(11)-------- 内核的同步与互斥
这里写目录标题内核中的互斥内核的竞态与并发内核提供的互斥的手段1.中断屏蔽2.原子变量3.自旋锁4.读写锁5.顺序锁6.信号量7.互斥量8.Rcu机制内核中的同步1.完成量内核中的互斥内核的竞态与并发【1】内核中的并发当内核有多条执行路径同时访问同一个共享资源时,就会造成竞态。常见的共享资源有全局变量、静态变量、硬件的寄存器和共同使用的动态分配的同一段内存等。造成竞态的根本原因就是内核中的代码对共享资源产生了并发(同时)的访问。【2】内核中有哪些并发的情况硬件中断-----&g原创 2020-11-10 17:05:42 · 594 阅读 · 0 评论 -
Linux驱动开发(12)------- IIC子系统
目录一,IIC协议简介二,IIC时序分析三,Linux的IIC子系统框架四,linux内核的I2C子系统源代码分析1.i2c-core.c分析2.i2c_s3c2410.c分析3.gslX680的驱动为例-----i2c_driver 和 i2c_client一,IIC协议简介【1】IIC( Intel-Integrated Circuit)是由飞利浦(现在叫恩智浦)公司开发的一种慢速两线制总线协议。【2】最初总线的速率定为100KHz,经过发展,速率出现了400KHz、34MHz、1MHz和5M原创 2020-11-14 13:46:21 · 938 阅读 · 0 评论 -
Linux驱动开发(13)------- 块设备驱动介绍
目录1.正确理解块设备驱动的概念2.块设备驱动框架简介3.块设备驱动案例分析-------->用内存虚拟出来的硬盘4.块设备驱动案例演示1.正确理解块设备驱动的概念【1】块设备和字符设备的差异块和字符是两种不同的访问设备的策略同一个设备可以同时支持块和字符两种访问策略设备本身的物理特性决定了哪一种访问策略更适合块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲块设备驱动最适合存储设备【2】块设备驱动的特点字符设备只能顺序访问(如串口发送数据顺序),而块设备可以随机访问(不原创 2020-11-15 17:40:50 · 369 阅读 · 0 评论 -
Linux驱动开发(14)------- 网络设备驱动介绍
目录网络设备驱动概述网络设备驱动核心数据结构网络设备驱动实例------>虚拟网卡网络设备驱动概述【1】Linux网络层次结构【2】什么是网络设备网络设备驱动它负责了数据链路层的一部分工作,最主要的工作就具驱动网络设备(通常也叫网卡)将数据发送出去,或者将网络设备收到的数据往上层递交,更简单地说就是负责网络数据的收发。我们知道,网络数据是按包为单位来组织的,这样网络设备驱动就和块设备驱动非常类似。网络设备驱动负责将数据包“写入”网络或从网络中“读取”数据包,从而完成上层的请求。原创 2020-11-16 19:18:20 · 585 阅读 · 0 评论