文章 2024-01-18 来自:开发者社区

入职Linux驱动工程师后,我才知道的真相…

大家好,我是ST。做Linux驱动工程师也有一段时间了,今天分享一下我曾经入职才知道的一些事情,算是一个菜鸟的经历吧!设备树起初学习Linux驱动,是从最简单的一个.c文件开始。在.c中实现module_init和module_exit这两个函数,然后在module_init的函数里加个printk,输出个hello world。把.c编译成.ko,然后insmod加载驱动,看到有打印,就算成功....

入职Linux驱动工程师后,我才知道的真相…
文章 2024-01-18 来自:开发者社区

Linux系统的tty架构及UART驱动详解

一、模块硬件学习1.1. Uart介绍通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART 通常被集成于其他通讯接口的连上。UART 是一种通用串行数据总线,用于异步通信。该总线双....

Linux系统的tty架构及UART驱动详解
文章 2024-01-05 来自:开发者社区

Linux设备驱动中的并发控制(四)

前言之前咱们不是自己写了个驱动globalmem的设备驱动嘛,不过当时只有简单的驱动文件描述符。这里我们不是学习了并发,于是这里给咱们的这个驱动增加上。增加并发控制后的globalmem的设备驱动在globalmem()的读写函数中,由于要调用copy_from_user()、copy_to_user()这些可能导致阻塞的函数,因此不能使用自旋锁,宜使用互斥体。(阻塞的就不适合用自旋锁)驱动工程....

文章 2024-01-05 来自:开发者社区

Linux设备驱动中的并发控制(三)

信号量信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0、1或者n。信号量与操作系统中的经典概念PV操作对应。+ P(S):①将信号量S的值减1,即S=S-1;②如果S≥0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 + V(S):①将信号量S的值加1,即S=S+1;②如果S>0,唤醒队列中等待信号量的进程。Linux中与信号量相关的操作....

Linux设备驱动中的并发控制(三)
文章 2024-01-05 来自:开发者社区

Linux设备驱动中的并发控制(二)

一、自旋锁1 自旋锁的使用自旋锁(Spin Lock)是一种典型的对临界资源进行互斥访问的手段,其名称来源于它的工作方式。为了获得一个自旋锁,在某CPU上运行的代码需先执行一个原子操作,该操作测试并设置(Test-And-Set)某个内存变量。(为什么需要执行一个原子操作?)由于它是原子操作,所以在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁....

文章 2024-01-05 来自:开发者社区

Linux设备驱动中的并发控制(一)

前言在Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态,即使是经验丰富的驱动工程师也会常常设计出包含并发问题bug的驱动程序。Linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。一起了解一下并发和竞态的概念及发生场合。编译乱序、执行乱序的问题,以及内存屏障。中断屏蔽、原子操作、自旋锁、信号量和互斥体等并发控制机制。并发控制后的global....

文章 2024-01-05 来自:开发者社区

关于S3学习所涉及到的知识(二):Linux设备驱动suspend/resume的顺序

一、Linux设备驱动suspend/resume的顺序1-前言前面我们知道syscore ops的回调是关中断,关非boot cpu的情况下调用的。suspend/shutdown回调注册的越早越靠后调用,resume回调注册的越早越靠前调用。syscore的suspend回调是在所有驱动的suspend回调之后被调用,syscore的resume回调在所有驱动的resume回调之前被调用2-....

文章 2024-01-04 来自:开发者社区

Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想

《Linux设备驱动开发详解》的学习笔记1、主机驱动与外设驱动分离Linux中的SPI、I2C、USB等子系统都利用了典型的把主机驱动和外设驱动分离的想法,让主机端只负责产生总线上的传输波形,而外设端只是通过标准的API来让主机端以适当的波形访问自身。因此这里面就涉及了4个软件模块:1)主机端的驱动。根据具体的I2C、SPI、USB等控制器的硬件手册,操作具体的I2C、SPI、USB等控制器,产....

文章 2024-01-04 来自:开发者社区

Linux驱动的软件架构(二):设备驱动的分层思想

在Linux 2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,在SoC系统中集成的....

Linux驱动的软件架构(二):设备驱动的分层思想
文章 2024-01-04 来自:开发者社区

Linux驱动的软件架构(一):驱动的软件设计模式理念

这个内容是我观看《Linux设备驱动开发详解》的学习笔记,其实书里面是先讲了关于驱动的很多的基础知识,然后再讲驱动的软件架构。但是我最近深深地沉迷于自顶向下的学习逻辑,所以打算先对整个驱动有了框架之后,再带着这个学习的过程中的疑惑与思维去学习基础。老师是基于globalmem和globalfifo两个虚拟得驱动开始讲解的,所以先说一下这两个是什么?**globalmem意味着“全局内存”,**在....

Linux驱动的软件架构(一):驱动的软件设计模式理念

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐

Linux宝库