Linux驱动开发

2024/4/11 14:23:46

Linux网卡驱动(1)-网卡驱动架构分析

1、Linux网络子系统 网络子系统采用分层的结构: 我们这里研究内核空间即可,在内核空间分成5层,分别是: 1、系统调用接口,它面向的客户是应用层序,为应用程序提供访问网络子系统的统一方法,比如…

Linux——Linux驱动之玩转SPI(下)iMX6ULL驱动SPI接口的6轴MEMS传感器芯片实现数据采集开发实战

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》

linux驱动开发之字符设备--内核和用户空间数据的交换(sysfs)

前言 设备驱动程序中与用户层的接口,除了 read/write/ioctl 方式外,还有sysfs属性。 对于sysfs属性提供的接口,在应用层,可以直接使用 shell 进行交互,而不必进行 编写 C 代码的方式进行对底层的读写。 正文 API接口…

15.NAND FLASH驱动

NAND FLASH 原理以及操作详见:https://blog.csdn.net/qq_16933601/article/details/100001443 一、基本的问题 NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线&am…

【深入理解Linux内核锁】七、互斥体

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、互斥体API2、API实现2.1 mutex2.2 mutex_init2.3 mutex_lock2.4 mutex_un…

【LED子系统】七、触发器实现

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录…

【LED子系统】六、核心层详解(三)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录…

【深入理解Linux内核锁】六、信号量

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、信号量介绍2、信号量的API3、API实现3.1 semaphore3.2 sema_init3.3 down…

Linux内存管理 | 六、物理内存分配——伙伴系统

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

linux设备驱动开发 第一个驱动程序-1

参考:宋宝华 Linux设备驱动开发详解 嵌入式Linux驱动开发教程 开发环境:ubuntu16.04 所需Makefile文件感谢网友,链接:https://www.cnblogs.com/guanguangreat/p/7920378.html 1- hello world 模块代码,名字取为hel…

Linux内核态内存泄露检测工具——Kmemleak

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

Linux总线驱动设计(1)-总线驱动模型

1、总线模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型。 假如说现…

Linux串口驱动程序(1)-tty架构

1、tty概念分析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。由于串口也是一种终端,因此这里引入终端这个概念 串口终端(/dev/ttyS*) 串口终端是使用计算机…

Linux-Flash驱动(2)-块设备驱动实例分析

在上一节课中&#xff0c;我们在内存中划分出512kB作为一个块设备&#xff0c;并对它实现读写的操作。现在我们来具体分析这段代码。 #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h>#include <linux/sched.h> #in…

Linux按键驱动程序设计(4)-中断分层技术

1.中断嵌套 首先引入之前提到过的快速中断和慢速中断&#xff1a;快/慢速中断的主要区别在于&#xff1a;快速中断保证中断处理的原子性(不被打断)&#xff0c;而慢速中断则不保证。换句话说&#xff0c;也就是“开启中断”标志位(处理器IF)在运行快速中断处理程序时是关闭的&a…

Linux串口驱动程序(6)-串口驱动实现

在Linux驱动开发中&#xff0c;一般都不会从0开始写&#xff0c;我们做的更多的是移植和修改&#xff0c;有时候还需要对驱动程序进行优化。当然具备移植、修改驱动能力的基础是能够读懂驱动程序&#xff0c;同时需要对这个驱动程序的核心功能非常了解。接下来开始编写发送中断…

Linux串口驱动程序(5)-串口接收分析

1、tty数据接收流程分析 在用户调用read函数来读取设备的文件的数据时&#xff0c;首先得到响应的是tty_read&#xff0c;这个函数又是由n_tty_read来实现的 /*** n_tty_read - read function for tty* tty: tty device* file: file object* buf: userspace buffer pointer* …

Linux网卡驱动(2)-回环网卡的设计

1、回环网卡介绍 在Linux系统中有一个叫做lo的网卡&#xff0c;它的IP地址是127.0.0.1&#xff0c;当我们ping 127.0.0.2的时候他是可以ping通的。回环网卡和其他网卡最大的区别就是他的数据包不会真正的方式到网络上&#xff0c;而是通过网卡发送端发送到了自己的接收端。就…

Linux网卡驱动(3)-网卡驱动深层分析

之前我们介绍了网卡是怎么把一个数据包发送到网络上的&#xff0c;但是这只是Linux网络系统中的一个非常小的部分。对于内核怎么把用户数据传递给网卡&#xff0c;以及内核怎么把网卡收到的数据传递给用户是一个庞大的知识。 学过计算机网络的都知道&#xff0c;当用户需要发送…

Linux-Flash驱动(1)-块设备系统架构

1、块设备的体验 块设备快速体验&#xff1a;块设备是指只能以块为单位进行访问的设备&#xff0c;块大小一般是512个字节的整数倍。常见的块设备包括硬件&#xff0c;SD卡&#xff0c;光盘等。有同学会说&#xff0c;加入我需要通过硬盘访问1个字节的数据&#xff0c;难道无法…

Linux-Flash驱动(3)-简单块设备驱动设计

这节课的内容主要根据上一节课分析出来的块设备的初始化和操作流程&#xff0c;编写出自己的块设备驱动函数。因此这篇博文主要讲一下所用到函数的用法及其他框架。 1、编写一个模块框架 2、注册一个块设备major register_blkdev(major, "blk");它有2个参数&#…

Linux-Flash驱动(4)-MTD系统架构

1、什么是MTD系统架构 MTD(memory technology device 存储 技术设备 ) 是用于访问 memory 设备&#xff08; ROM 、 flash &#xff09;的 linux 的子系统。 MTD 的主要目的是为了使新的 memory 设备的驱动更加简单&#xff0c;为此它在硬件和上层之间提供了一个抽象的接口。 …

linux驱动开发之字符设备框架 -调用过程分析

前言 在前边三节的基础上&#xff0c;粗略的分析一下&#xff0c;上层应用调用到驱动程序的过程&#xff0c;分为下面几个方面&#xff1a; 1.字符设备驱动本身 2.mknod的作用 3.open的调用过程 正文 字符设备驱动本身 start_kernel(kernel-3.10\init\main.c)//启动内核…

【LED子系统】十、详细实现流程(番外篇)

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录…

Bootloader的作用、为什么需要Bootloader?

1、Bootloader的作用 简单的说&#xff0c;BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序&#xff0c;可以初始化硬件设备&#xff0c;从而将系统的软硬件环境带到一个合适的状态&#xff0c;以便为最终调用操作系统做好准备。对于Bootloader的启动过程又…

【LED子系统深度剖析】十、详细实现流程(番外篇)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、LED驱动初始化流程1.1 LED驱动匹配以及设备的创建1.1.1 gpio_led_probe1.1.2 gpi…

Linux内存管理 | 二、虚拟地址空间布局

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

【Linux API 揭秘】container_of函数详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

linux驱动开发-copy source size is too small __bad_copy_from();

完整的报错提示如下&#xff1a; In function ‘check_copy_size’,inlined from ‘my_read’ at ./include/linux/uaccess.h:154:6: ./include/linux/thread_info.h:138:4: error: call to ‘__bad_copy_from’ declared with attribute error: copy source size is too smal…

linux驱动开发-copy_from_user copy_to_user 报未申明的错误

先贴一个段报错提示 error: implicit declaration of function ‘copy_to_user’ [-Werrorimplicit-function-declaration]copy_to_user(buf,(void *)(pDev->myData*ppos),size); error: implicit declaration of function ‘copy_from_user’ [-Werrorimplicit-function-d…

git提交代码的基本流程

&#xff08;本文仅用于本人学习记录&#xff0c;仅供参考&#xff09; 1、 查看当前工作区和暂住区状态 git status 2、将当前分支重设到默认HEAD&#xff0c;即最新的一次提交&#xff0c;同时清理当前工作区的所有修改 git reset HEAD –hard && git clean -xfd&am…

Linux串口驱动程序(3)-串口打开分析

先来分析一下串口打开的过程&#xff1a; 1、用户调用open函数打开串口设备文件 2、在内核中通过tty子系统&#xff0c;把open操作层层传递到串口驱动程序中 3、在串口驱动程序中的XX_open最终实现这个操作。 这里主要有2个点需要我们重点分析&#xff0c;一个是open函数的传…

Linux子系统学习

1、Linux子系统介绍 如图所示&#xff0c;Linux有7个子系统&#xff0c;分别为SCI&#xff1a;系统调用PM&#xff1a;进程管理VFS&#xff1a;虚拟文件系统MM&#xff1a;内存管理Network Stack&#xff1a;网络协议栈Arch&#xff1a;体系结构相关DD&#xff1a;设备驱动和Li…

Linux按键驱动程序设计(3)-按键操作硬件实现

1、复习裸机按键操作驱动 #define GPGCON (volatile unsigned long *)0x56000060/** K1,K2,K3,K4对应GPG0、GPG3、GPG5、GPG6*/ #define GPG0_int (0x2<<(0*2)) #define GPG3_int (0x2<<(3*2)) #define GPG5_int (0x2<<(5*2)) #define GPG6_in…

Linux按键驱动程序设计(2)-Linux中断处理程序

写过按键裸机程序的同学都知道按键的读取一般都采用中断的方式&#xff0c;如果采用轮询的方式真的是太浪费CPU资源了。下面将介绍Linux中的中断处理程序。 1、裸机中断处理流程回顾 对所有芯片而言&#xff0c;中断都有一个通用的入口&#xff0c;进入后会保存保存当前的环境把…

Linux按键驱动程序设计(5)-按键去抖

1、按键去抖介绍 编写过裸机驱动的同学都知道按键是必需去抖的&#xff0c;这里不再赘述。2、去抖方法 按键去抖动的方法主要有二种一种是硬件电路去抖动;另一种就是软件延时去抖。而延时又一般分为二种&#xff0c;一种是for循环等待&#xff0c;另一种是定时器延时。在操作系…

Linux字符设备驱动程序开发(1)-使用字符设备驱动

1、使用字符设备驱动程序 1.1编译/安装驱动 在Linux系统中&#xff0c;驱动程序通常采用内核模块的程序结构来进行编码。因此&#xff0c;编译/安装一个驱动程序&#xff0c;其实质就是编译/安装一个内核模块。把下面的范例代码拷贝到Linux系统中&#xff1a; #include <…

linux驱动开发之字符设备--内核和用户空间数据的交换(ioctl)

前言 在驱动中&#xff0c;除了需要具备读写能力外&#xff0c;还需要对硬件设备进行控制。ioctl就常用户底层的一些操作。 正文 linux中&#xff0c;建议使用下边的方式&#xff0c;进行进行ioctl命令 设备类型序列号方向数据尺寸8bit8bit2bit13/14bit 命令码的设备类型为…

linux驱动开发之字符设备框架 - file_operations

前言 在上一节中介绍了字符设备的重要结构体 cdev,以及和 cdev 相关的一些操作函数&#xff0c;比如cdev_alloc()、 cdev_init() 等&#xff0c;但是和 cdev_init() 密切相关的一个参数 fops&#xff0c;并没有介绍。这节重点分析 file_operations 结构体。 正文 file_opera…

linux驱动开发之字符设备框架 - 实例

前言 前两小节中介绍了字符设备的cdev和函数操作集 file_operations。理论还需要和实践结合起来&#xff0c;这节主要是给出一个示例代码和测试代码。 正文 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h>#include <li…

linux驱动开发之字符设备--内核和用户空间数据的交换(read write)

前言 前边给出了字符设备的框架&#xff0c;内核和用户空间进行交互的时候&#xff0c;离不开数据的交换&#xff1b;内核实现read、wriet 、ioctl是常用的交互手段。 正文 内核API 函数操作集file_operations 的成员 read、write、unlocked_ioctl,就进行着数据的交换 ssi…

【深入理解Linux锁机制】六、信号量

系列文章: 我的圈子:高级工程师聚集地 【深入理解Linux锁机制】一、内核锁的由来 【深入理解Linux锁机制】二、中断屏蔽 【深入理解Linux锁机制】三、原子操作 【深入理解Linux锁机制】四、自旋锁 【深入理解Linux锁机制】五、衍生自旋锁 【深入理解Linux锁机制】六、信…

linux 的uart驱动框架分析

文章目录 一、底层串行硬件驱动程序二、Console支持三、锁支持四、核心数据结构1、struct uart_driver2、struct uart_port3、struct uart_ops四、常用API总结五、uart驱动示例剖析1、原厂设计的uart驱动2、8250标准uart驱动六、总结🔺【linux内核系列文章】 👉对一些文章内…

Linux内存管理 | 四、物理地址空间设计模型

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

Linux设备驱动中的并发控制

随书总结&#xff1a;《linux设备驱动开发》 宋宝华著 主要有&#xff1a;中断屏蔽&#xff1b;原子操作&#xff1b;自旋锁&#xff1b;信号量 1- 中断屏蔽&#xff1a;进入临界区前后关、开中断使能 2- 原子操作&#xff1a;在多进程&#xff08;线程&#xff09;的操作系统…

Linux按键驱动程序设计(1)-混杂设备驱动模型

1、混杂设备概念 在Linux系统中&#xff0c;存在一类字符设备&#xff0c;它们拥有相同的主设备号&#xff08;10&#xff09;&#xff0c;但次设备号不同&#xff0c;我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表&#xff0c;对设备访问时内核根据次设…

Linux字符设备驱动程序开发(3)-LED驱动程序设计

1、设备控制理论 控制理论-作用 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力。比如: 改变波特率。 设备控制-应用函数 在用户空间&#xff0c;使用ioctl系统调用来控制设备&#xff0c;原型如下:int ioctl(int fd,unsigned long cmd,...) fd: 要…

Linux字符设备驱动程序开发(2)-字符设备驱动模型分析

1、设备描述结构cdev 在Linux系统中,设备的类型非常繁多&#xff0c;如&#xff1a;字符设备&#xff0c;块设备&#xff0c;网络接口设备&#xff0c;USB设备&#xff0c;PCI设备&#xff0c;平台设备&#xff0c;混杂设备……&#xff0c;而设备类型不同&#xff0c;也意味着…

Linux驱动开发准备

1、Linux驱动开发概述 Linux驱动分类&#xff0c;分类有很多分类方法&#xff0c;比如常规分类法、总线分类法&#xff0c;按照常规分类法可分为字符设备、块设备、网络设备。1.1 字符设备 字符设备是一种按字节(最小访问单位)来访问的设备&#xff0c;字符驱动则负责驱动字符设…

【NVMEM子系统】三、 核心数据结构及内在关联

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、前言2、核心数据结构2.1 nvmem_device2.2 nvmem_cell2.3 nvmem_config3、数据结构之间如何关联4、相…

【LED子系统】四、核心层详解(一)

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、前言2、leds_init分析2.1 相关数据结构2.1.1 class 2.2 实现流程 3、leds_class_dev_pm_ops分析…

【linux kernel】linux的platform设备驱动框架分析

文章目录 一、简介二、platform总线三、platform设备和驱动的匹配过程四、platrom驱动和platform设备五、platform驱动设计六、代码示例 &#x1f53a;【linux内核系列文章】 &#x1f449;对一些文章内容进行了勘误&#xff0c;本系列文章长期不定时更新&#xff0c;希望能分享…

【Linux API 分析】module_init与module_exit

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、前言2、调用层次分析2.1 module_init2.2 __initcall2.3 device_initcall2.4 ___define_initcall2.5、…

Linux内存管理 | 五、物理内存空间布局及管理

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …