【手把手教Linux驱动7-内核互斥锁】教程文章相关的互联网学习教程文章

手把手教Linux驱动6-原子操作原理分析【代码】【图】

原子操作原理分析概念原子操作是指不被打断的操作,即它是最小的执行单位。最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)。在 linux 中原子操作对应的数据结构为 atomic_t,定义如下:typedef struct {int counter;} atomic_t;本质上就是一个整型变量,之所以定义这么一个数据类型,是为了让原子操作函数只接受 atomic_t 类型的操作数,如果传入的不是 atomic_t 类型数据,在程序编...

手把手教Linux驱动2-之模块参数和符号导出【代码】【图】

通过《手把手教Linux驱动1-模块化编程》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数。一、给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在Linux操作系统中,每个中断都有一个中断号。如果...

手把手教Linux驱动3-之字符设备架构详解,有这篇就够了【代码】【图】

一、Linux设备分类Linux系统为了管理方便,将设备分成三种基本类型:字符设备块设备网络设备字符设备:字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和write的系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是两个字符设备,它们能很好的说明“流”这种抽象概念。字符设备可以通过文件节点来访问,...

手把手教Linux驱动4-进程、文件描述符、file、inode关系详解【代码】【图】

本文目标什么是文件描述符?进程打开文件相关信息管理Linux设备文件三大结构:inode,file,file_operationsmknod 做了什么事?进程打开设备文件驱动如何支持同类型设备?如何获得注册的设备结构体私有地址?什么是文件描述符?Linux 中一切都可以看作文件,包括普通文件、链接文件、Socket 以及设备驱动等,对其进行相关操作时,都可能会创建对应的文件描述符。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建...

手把手教linux驱动11-linux设备驱动统一模型【代码】【图】

1. 设备树概念1.1.设备树感性认识设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做DTS(Device Tree Source),这个DTS 文件采用树形结构描述板级设备,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。 设备树是树形数据结构,具有描述系统中设备的节点。每个节点都有描述所代表设备特征的键值对。每个节点只有一个父节点,而根节点则没有父节点。 1.2.DTS、DTB、DT...

zynq操作系统: Linux驱动开发AXIDMA篇【代码】【图】

前言 ?? 由于bram形式的速率限制,在同样紧急的时间条件下,还是改回了axidma的方式来降维打击,对于几兆的速率,颇有种杀鸡用牛刀的感觉,没办法,原来的刀就是差一点,牛刀好用是好用但是终究得提升一点内功 裸机下的DMA相对是比较简单的,参考之前裸板对于DMA的操作,而对于LINUX下,只能说苦不堪言。先不谈如何实现用户空间的零拷贝DMA传输,光是Linux环境下的DMA传输就已经感觉比较棘手,一方面是对Linux了解不够深入,另一方...

【linux】驱动-10-pinctrl子系统【代码】【图】

目录前言10. pinctrl子系统10.1 参考路径10.2 pinctrl子系统主要工作10.2 pinctrl子系统格式说明10.3 概念10.4 实例分析10.4.1 pin controller服务端10.4.2 client device客户端前言 参考文档:内核文档链接:https://www.kernel.org/doc/Documentation/ 内核源码doc:Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt建议配合 GPIO 子系统使用。 建议,复制 原文链接观看,排版清晰,便于学习:原文链接:https:/...

zynq操作系统: Linux驱动开发串口篇【代码】【图】

一.简介 ??串口( UART)是一种非常常见的外设, 串口在嵌入式开发领域当中一般作为一种调试手段,通过串口将调试信息打印出来,或者通过串口发送指令给主机端进行处理;当然除了作为基本的调试手段之外,还可以通过串口与其他设备或传感器进行通信, 譬如有些 sensor 就使用了串口通信的方式与主机端进行数据交互。 根据电平标准的不同,串口可以分为 TTL, RS232,RS485, RS422等这些,虽然它们的电平标准不同,但是却都遵循相...

【linux】驱动-2-内核模块【代码】【图】

目录前言2. 内核模块2.1 内核模块概念2.1.1 内核2.1.2 内核模块机制的引入2.2 内核模块2.2.1 内核模块参考例程2.2.2 内核模块命令2.2.3 系统自动加载模块 **2.2.4 导出符号2.2.5 模块参数参考前言以野火i.M 6U为例2. 内核模块 本章节笔记主要理解内核模块代码框架和原理,分析一个简单的内核模块例子。 需要明确的是模块和驱动是两回事。 2.1 内核模块概念 2.1.1 内核 内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提...

linux驱动开发笔记_自旋锁【代码】

自旋锁介绍 自旋锁(spin lock)是一种典型的对临界资源进行互斥访问的手段。如果A执行单元首先进入例程,他将持有自旋锁,当B执行单元试图进入同一个例程时,将获悉自旋锁已经被持有,然后需要等待A单元释放后,方可进入。 相关操作函数 1.定义自旋锁 spinlock_t lock; 2.初始化自旋锁 spin_lock_init(lock);3 获得自旋锁 spin_lock(lock);该宏如果能够立即获得锁。它就马上返回;否则,他就将在其中自旋,直到该自旋锁的保持...

【正点原子Linux连载】第十六章主频和时钟配置实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0【图】

1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对正点原子Linux感兴趣的同学可以加群讨论:935446741 4)关注正点原子公众号,获取最新资料更新 第十六章主频和时钟配置实验 在前几章实验中我们都没有涉及到I.MX6U的时钟和主频配置操作,全部使用的默认配置,默认配置下I.MX...

Linux驱动面试题总结(2)【代码】

1、 Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少实现open,close,read和write系统调用。字符终端、串口、鼠标、键盘、摄像头、声卡和显卡等就是典型的字符设备。块设备:和字符设备类似,块设备也是通过/dev目录下的文件系统节点来访问。块设...

【正点原子Linux连载】第八章汇编LED灯试验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0【代码】【图】

【正点原子Linux连载】第八章汇编LED灯试验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0 第八章汇编LED灯试验8.1 I.MX6U GPIO详解8.2硬件原理分析8.3实验程序编写8.4编译下载验证1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对正点原子Linux感兴趣的同学可以加群讨...

Linux驱动之Framebuffer子系统基础知识【图】

1、Linux Framebuffer概述 Framebuffer驱动在Linux内核中用于子系统最重要的显示输出,以该驱动为基础,Linux设备才能向用户展现一个色彩斑斓的世界,对于PC而言,就是显卡驱动,对于嵌入式设备,就是显示控制器和LCD模组驱动。 Framebuffer设备是一个字符设备,在文件系统中的设备节点通常为/dev/fbX,当一个系统中有多个显示设备时,依次使用/de/fb0、/dev/fb1等来表示。在Android系统中,该类设备的主设备号是29,Framebuffer设...

Linux驱动-platform总线详解【代码】

本文参考已发布:Linux 3.14内核 一、概念 嵌入式系统中有很多的物理总线:I2c、SPI、USB、uart、PCIE、APB、AHB linux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线,是一条虚拟的总线,并不是一个物理的总线。 相比 PCI、USB,它主要用于描述SOC上的片上资源。platform 所描述的资源有一个共同点:在CPU 的总线上直接取址。 平台设备会分到一个名称(用在驱动绑定中)以及一系列诸如地址和中断请求号(IRQ)之类的...