Linux驱动开发
文章平均质量分 85
Jacky~~
Learning Linux kernel!
展开
-
Linux驱动入门——基础概念
Unix是从贝尔实验室的一个失败的多用户操作系统Multics中涅槃而生的。Multics项目被终止后,贝尔实验室科学研究中心的人们发现自己处于一个没有交互式操作系统可用的境地。在这种情况下,1969年的夏天,贝尔实验室的程序员们设计了一个文件系统系统原型,而这个原型最终发展演化成了Unix。由于最初一六的设计和以后多年的创新与逐步提高,Unix系统成为一个强大、健壮和稳定的操作系统。下面的几个特点是使Unix。原创 2023-05-23 17:31:45 · 2525 阅读 · 0 评论 -
Linux内核设计与实现(一)——内核进程管理
进程是Unix操作系统抽象概念中最基本的一种。其中涉及进程的定义以及相关的概念,比如线程;然后讨论Linux内核如何管理每个进程:它们在内核中如何被列举,如何创建,最终如何消亡。我们拥有操作系统就是为了运行用户程序,因此,进程管理就是操作系统的心脏所在,Linux也不例外。本篇我们考察了操作系统中的核心概念——进程。也讨论了进程的一般特性,它为何如此重要,以及进程与线程之间的关系。然后,讨论了Linux如何存放和表示进程(用和),如何创建进程(通过fork(),实际上最终是clone()原创 2023-06-24 12:08:52 · 964 阅读 · 1 评论 -
Linux驱动入门(三)——源码下载阅读、分析和嵌入式文件系统介绍
关于Source Insight的介绍和使用大家可以参考这篇博客。或者直接在网上找资料进行学习参考博客根文件系统是Linux操作系统运行需要的一个文件系统。分区1一般存储Linux内核映象文件,在Linux操作系统中,内核映象文件一般存储在单独的分区中。分区2存放根文件系统,根文件系统中存放着系统启动必须的文件和程序。这些文件和程序包括:提供用户界面的Shell程序、应用程序依赖库、配置文件等。其他分区上存放普通的文件系统,也就是一些数据文件。操作系统的运行并不依赖于这些普通文件。原创 2023-05-26 21:18:45 · 2018 阅读 · 6 评论 -
Linux驱动入门(二)——嵌入式处理器介绍和构建驱动程序开发环境
在实际工程项目中,Linux驱动程序一般是为嵌入式系统而写的。因为嵌入式系统因用途、功能、设计厂商不同,硬件之间存在很多的差异。这些差异性,不能通过写一个通用的驱动程序来完成,需要针对不同的设备书写不同的驱动程序。要写驱动程序,必须了解处理器和开发板的相关信息。ARM是微处理器行业的一家知名企业,设计了大量高性能、廉价、低功耗的RISC处理器。ARM处理器具有性能高、成本低和能耗低的特点。适用于多种领域,比如嵌入式控制、消费/教育类多媒体、DSP和移动式应用等。原创 2023-05-24 16:06:57 · 1234 阅读 · 0 评论 -
Linux驱动开发实战(一)——设备驱动模型
在早期的Linux内核中并没有为设备驱动提供统一的设备模型。随着内核的不断扩大及系统更加复杂,编写一个驱动程序越来越困难,所以在Linux2.6内核中添加了一个统一的设备模型。这样,写设备驱动程序就稍微容易一些了。本章将对设备模型进行详细的介绍。设备驱动模型比较复杂,Linux系统将设备和驱动归一到设备驱动模型中来管理。设备驱动模型的提出,解决了以前编写驱动程序没有统一方法的局面。设备驱动模型给各种驱动程序提供了很多辅助性的函数,这些函数经过严格测试,可以很大程度上地提高驱动开发人员的工作效率。原创 2023-07-22 21:22:16 · 2738 阅读 · 0 评论 -
Linux驱动进阶(四)——内外存访问
驱动程序加载成功的一个关键因素,就是内核能够为驱动程序分配足够的内存空间。这些控件一部分用于驱动程序必要的数据结构,另一部分用于数据交换。同时,内核也应该具有访问外部设备端口的能力。一般来说,外部设备被连接到内存空间或者I/O空间中。本章将对内外存设备的访问进行详细的介绍。原创 2023-07-14 20:51:11 · 833 阅读 · 0 评论 -
Linux驱动进阶(三)——中断与时钟机制
中断和时钟机制是Linux驱动中重要的两项技术。使用这些技术,可以帮助驱动程序更高效地完成任务。在写设备驱动程序的过程中,为了使系统知道硬件在做什么,必须使用中断。如果没有中断,设备几乎什么都不能做。本章将详细讲解中断与时钟机制。原创 2023-07-13 17:33:31 · 1642 阅读 · 0 评论 -
Linux驱动进阶(二)——设备驱动中的阻塞和同步机制
阻塞和非阻塞是设备访问的两种基本方式。使用这两种方式,驱动程序可以灵活地支持阻塞与非阻塞访问。在写阻塞与非阻塞的驱动程序时,经常用到等待队列,所有本章将对等待队列进行简要介绍。在Linux驱动程序中,阻塞进程可以使用等待队列(Wait Queue)来实现。由于等待队列很有用,在Linux2.0的时代,就已经引入了等待队列机制。等待队列的基本数据结构是一个双向链表,这个链表存储睡眠的进程。等待队列也与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。原创 2023-07-11 16:58:41 · 535 阅读 · 0 评论 -
Linux驱动进阶(一)——设备驱动中的并发控制
中断处理、多任务处理和多处理器(SMP)。这些特性导致当多个进程、线程或者CPU同时访问一个资源时,可能会发生错误,这些错误是操作系统运行所不允许的。在操作系统中,内核需要提供并发控制机制,对公共资源进行保护。本章将对保护这些公共资源的方法进行简要的介绍。在Linux中提供了一些锁机制来避免竞争条件,最简单的一种就是自旋锁。引入锁的机制,是因为单独的原子操作不能满足复杂的内核设计需要。例如,当一个临界区域要在多个函数之间来回运行时,原子操作就显得无能为力了。原创 2023-07-10 19:52:14 · 350 阅读 · 0 评论 -
Linux驱动入门(四)——构建第一个驱动程序
开发板以STM32MP157为例进行实验。万事开头难,写驱动程序也是一样,本章将构建第一个驱动程序。驱动程序和模块的关系非常密切,所以这里将详细讲解模块的相关知识。而模块编程成败与否的先决条件是要有统一的内核版本,所以这里将讲解怎样升级内核版本。最后为了提高程序员的编程效率,这里将介绍两种集成开发环境。原创 2023-06-26 15:35:46 · 1963 阅读 · 0 评论 -
Linux驱动入门(五)——简单的字符设备驱动程序
在Linux设备驱动程序的家族中,字符设备驱动程序是较为简单的驱动程序,同时也是应用非常广泛的驱动程序。所以学习字符设备驱动程序,对构建Linux设备驱动程序的知识结构非常重要。本篇博客将带领读者编写一个完整的字符设备驱动程序。原创 2023-07-09 18:06:36 · 1325 阅读 · 0 评论 -
驱动开发(五)——驱动设计思想(面向对象/分层/分离)
上下分层,比如我们在前面所写的LED驱动程序就分为2层:如果直接修改boardA.c是不是显得非常的难受不不愿呢!实际情况是,每一款芯片它的GPIO操作都是类似的。既然引脚操作是有规律的,且与主芯片有关,那么我们就可以针对该芯片写出比较通用的硬件操作代码如下图通过查看MP157A框图可知,GPIOA与GPIOG组挂载在AHB总线上阅读芯片手册AHB4用于大多数GPIO的控制查看时钟部分,我们需要使能时钟给外设,并将GPIO资源分配给,因为我们的MP157开发板是M4核与A7核共享原创 2022-06-06 21:21:26 · 1092 阅读 · 0 评论 -
驱动开发(四)——点灯大师
文章目录原创 2022-06-05 11:32:40 · 765 阅读 · 0 评论 -
驱动开发期末复习手册
Linux使用命令创建设备节点Linux使用命令创建目录文件Linux使用命令来创建管道文件(管道的本质就是队列,先进先出)Linux设备驱动主要分为:、、(其主要的区别在于字符设备是按照来处理数据,,典型字符设备有、等;块设备顾名思义,处理数据是按块空间来处理的,,典型的设备有、等;网络设备,因其特点在于,典型设备:)Linux驱动模块的后缀名为:Linux下常用系统调用名,系统调用实际也是层提供的功能(其调用流程就是,在我们调用open函数时,调用的是函数,,使得模式,进而函数)read:读取设备原创 2022-06-01 21:43:17 · 527 阅读 · 0 评论 -
驱动开发(三)——地址空间与驱动辅助信息
文章目录物理地址与虚拟地址关系测试程序测试问题问题分析单片机内存分析Linux应用程序内存分析驱动程序的改进问题解决方法驱动程序测试应用程序Makefile测试物理地址与虚拟地址关系测试程序#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>static int a=0;int main(int argc ,char **argv){ if原创 2022-05-22 20:59:23 · 281 阅读 · 0 评论 -
驱动开发(二)——最简单的驱动程序分析
文章目录系统调用与驱动程序的流程最简单的驱动程序源码Makefile驱动测试应用程序测试系统调用与驱动程序的流程如下图通过分析源码,我们可以得出,从我们的测试程序到调用我们的驱动程序,整个过程包含如下:应用程序通过调用open函数,该函数由glibc库提供,作用是执行swi汇编指令,目的是为了产生中断异常,使得CPU进入到SVC模式,也就是我们常说的内核态。当CPU的权限提升到内核态以后,会调用内核中VFS(虚拟文件系统)提供的do_sys_open()函数,VFS也就是我们常说的system原创 2022-05-21 21:37:52 · 1540 阅读 · 0 评论 -
驱动开发(一)——(单片机程序、Linux应用程序与驱动程序分析)
文章目录前言157准备工作配置交叉编译链编译内核编译解压glibc单片机程序应用程序驱动程序三者的关系前言学习资料,跟的韦东山老师的视频,大家可以上百问网下载资料百问网。我使用的开发板是STM32MP157,关于157的开发板资料大家也可以在百问网进行下载。157准备工作配置交叉编译链将文件拷贝到虚拟机指定目录,进行解压配置交叉编译脚本, toolchain.sh#!/bin/bashARCH=armCROSS_COMPILE=arm-buildroot-linux-gnueabih原创 2022-05-21 10:24:25 · 1895 阅读 · 0 评论 -
字符设备驱动(实验一)——保姆级教程
文章目录前言环境搭建CLion 远程服务配置创建项目修改CMakeLists.txt文件应用程序与驱动的关系cdev与设备结构体的关系项目源码驱动代码应用程序Makefile开发板测试Ubuntu测试TipsGit下载前言这里采用的模拟方法是在内核空间开辟一段内存空间来模拟一个字符设备,其功能就是可以对这块内存空间实现读写的功能,和mmap的功能和原理相似,只是实现方法不同。环境搭建这里使用的工具是CLion进行编写代码,在虚拟机上进行编译身成.ko文件。因为只是一个模拟嘛,入门。不需要配置设备树原创 2022-05-12 17:23:47 · 1146 阅读 · 0 评论 -
浅析系统调用(opem,read,write),VFS,驱动三者的关系
文章目录前言遇到的问题VFS源码分析与问题解决VFS的基本概念VFS源码分析超级块对象(superblock object)索引结点对象目录项对象文件对象分析1:应用程序是如何连接到驱动程序的open函数的前言这里为什么说是浅析呢?因为我也是在遇到了一些问题后,尝试自己去寻找答案,并没有特意的去学习VFS这一块的内容!所以有说的不恰当的地方,还望大家多多包含与指针。遇到的问题我们在学习驱动的时候,常规的理解就是,我们的应用程序(APP)去调用系统调用函数open,read,write等函数,然后原创 2022-05-06 19:21:39 · 1366 阅读 · 0 评论 -
第一个驱动程序
文章目录功能源码Makefile测试挂载驱动创建设备结点测试卸载驱动程序功能通过在内存中开辟一块内存作为设备,编写一套针对这篇内存空间的驱动程序。实现对该片内存空间的系统调用(read,write,iotcl,open,lseek)基于宋宝华版 Linux设备驱动开发详解源码#include<linux/module.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/cdev.h&原创 2022-03-21 14:18:28 · 3436 阅读 · 0 评论 -
Linux设备驱动——接口与总线
文章目录串口IICSPIUSB以太网接口串口RS-232、RS-422、RS-485都是串行数据接口标准,最初是由电子工业协会(EIA)制定并发布的。如今,RS-232的修改版RS-232C是嵌入式系统中应用最广泛的串行接口,其硬件原理图如下:IICIIC(内置集成电路)总线是由Philips公司开发的两线式串行总线,用于连接微控制器机器外围设备。IIC总线简单而有效,占用PCB(印制电路板)空间很小,芯片引脚数量少,设计成本低。IIC总线支持多主控模式,任何能够进行发送和接收的设备都可以称原创 2022-03-15 21:03:44 · 2667 阅读 · 0 评论 -
Linux驱动开发(硬件基础知识)——存储器
文章目录前言非易失性存储器ROMFLASHNOR Flash公共闪存接口(CFI)NAND FlashIDE掉电丢失数据存储器静态RAM(SRAM)动态RAM(DRAM)特定RAMDPRAM:双端口RAMCAM:内容寻址RAMFIFO:先进先出队列存储器分类总图前言存储器主要可分类为只读存储器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光/磁盘介质存储器。也可按掉电后是否消失,分为掉电丢失数据存储器和非易失性存储器下面我们先是否丢失数据,再针对其特性进行分析。非易失性存储器就是说原创 2022-03-13 20:33:32 · 2872 阅读 · 0 评论 -
Linux驱动开发(硬件基础)——处理器
文章目录前言通用处理器(SOC)数字信号处理器(DSP)专用处理器和专用集成电路(ASP and ASIC)处理器分类图前言这一章,主要就是针对我们的嵌入式硬件处理器基础知识进行学习和回顾。通用处理器(SOC)目前主流的通用处理器(GPP)多采用Soc(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,然后在Soc内由电路实现的。在Soc中,每一个模块不是一个已经设计成熟的ASIC器件(专用集成电路),而是利用芯片的一部分资源去实现某种传统功能,将各种组件采用类似搭原创 2022-03-13 18:37:43 · 3582 阅读 · 0 评论 -
Linux驱动基础知识(一)
文章目录前言设备驱动的作用无操作系统时的设备驱动有操作系统时的设备驱动Linux设备驱动设备的分类及其特点Linux设备驱动与整个软硬件系统的关系前言参考资料:Linux设备驱动开发详解 宋宝华版从现在开始,就对Linux驱动进行学习。在进行学习前,肯定是要给自己定下目标,做好准备。怎么学?怎么学好?相信学习一样东西的目的,是为了解决问题,而不是为了学所学!所以,在学习前我们是抱着为了解决问题的思想去学习,这样我们的心理将会得到升华。那么学习驱动的目的是什么呢?因为驱动开发工程师工资高呀,没错原创 2022-03-13 11:10:00 · 4448 阅读 · 4 评论