【linux驱动】什么是驱动

内核简介

在谈驱动之前,我们需要先谈内核。

内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,决定着整个操作系统的性能和稳定性。

下面是微内核和宏内核的简易对照图(图片来自于网络):

在这里插入图片描述

微内核: 不包括应用层IPC、文件系统功能、设备驱动模块。微内核具有动态扩展性强的优点。Windows操作系统、华为的鸿蒙操作系统就属于这类微内核架构。

宏内核: 宏内核架构是将应用层IPC、文件系统功能、设备驱动模块都编译成一个整体。

  • 优点:执行效率高
  • 缺点:一旦我们想修改或增加内核某个功能时(如增加设备驱动程序)都需要重新编译一遍内核。

Linux操作系统正是采用了宏内核结构,但是它也区分内核空间和用户空间。

所以,我们得先有内核源码。然后编译内核,才能编译出驱动程序。

关于内核源码,我们有两种方式获取:

  • 直接下载所需版本的kernel,国内个版本的下载地址:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/。
  • 如果是有ARM开发板,下载相应的SDK,SDK内就包含kernel。

内核源码目录和编译

文件夹作用
arch这个文件夹包含了一个Kconfig文件,用于设置这个目录里的源代码编译所需的一系列设定。支持的处理器架构都在它相应的文件夹中,如arm64、x86、riscv等。/boot:内核需要的特定平台代码/boot/dts:设备树文件/configs:存放专用配置文件/include:特定体系的头文件/lib:通用函数在特定体系结构的文件/mm:特定体系结构的内存管理文件
block块设备,是一些linux存储体系中关于块设备管理的代码,譬如说SD卡、iNand、Nand、硬盘等都是块设备。
crypto这个目录下放了一些各种常见的加密算法的源代码。
drivers驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。
firmware固件目录,保存用于驱动第三方设备的固件。
Documentation存放相关说明文档,很多实用文档,包括驱动编写等
include存放内核所需、与平台无关的头文件,与平台相关的头文件已经被移动到 arch 平台的include 目录
kernel这个文件夹中的代码控制内核本身,在该文件夹下有个”power”文件夹,这里的代码可以使计算机重新启动、关机和挂起。
lib这个文件夹包含了内核需要引用的一系列内核库文件代码。
……其余的文件夹作用请自行了解。

如果我们写自己的驱动程序,需要放到drivers目录下,具体的规则后面再细讲。

内核的编译,我们使用SDK中自带脚本进行编译,那个脚本中会配置好配置文件。

在这里插入图片描述

kernel menuconfig

menuconfig是Linux里面的一个软件,可以配置uboot,kernel,rootf,这里以kernel为例来配置。

在命令行进入内核根目录,执行以下命令进入menuconfig配置主界面

# 打开menuconfig配置界面
make ARCH=arm64 menuconfig
  • 执行上述命令时,会读取内核目录下.config文件和/arch/arm64目录下的Kconfig文件

  • Kconfig文件用于决定配置界面会有哪些配置选项

  • .config文件用于决定每个配置项的值(Y、M、N)

  • 当.config文件存在时,它会根据.config文件设定默认项.

  • 若不存在.config文件,则根据各级Kconfig文件来设定菜单项

  • 使用菜单配置完成并保存后,会将配置的结果保存到.config文件

在这里插入图片描述

Kconfig 文件

分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。Kconfig是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核。

  • 文件位于:/kernel/arch/arm64/Kconfig

在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。

.config 文件

在内核编译时,主Makefile调用这个.config,用于的内核编译配置。

  • 文件位于 :kernel/.config
  • 可以通过defconfig文件进行加载/生成
  • 可以通过kernel menuconfig进行配置/生成

defconfig文件

一般由平台厂商提供,内核编译用做.config的参考。

  • 文件位于:/kernel/arch/arm64/configs/xxx_defconfig在这里插入图片描述

Makefile 文件

  • 路径:kernel/Makefile

顶层Makefile,用于内核源码编译,建议好好阅读一下此文件。

  • 路径:kernel/arch/arm64/Makefile

该文件包含在顶层makefile中,因此用户可以添加自己的特定于体系结构的标志和依赖项。

Linux驱动简介

Linux是文件型系统,所有硬件都会在对应的目录(/dev)下面用相应的文件表示。在文件系统的Linux下面,都有对应文件与键盘、鼠标和硬盘等实实在在的硬件设备关联,访问这些文件就可以访问实际硬件。按照读写存储数据的方式,我们可以把设备分为三大类:

**字符设备:**字符设备指能够像字节流串行顺序依次进行访问的设备,对他的读写是以字节为单位。

  • 一个字节一个字节读写的设备
  • 读取数据需要按照先后数据(顺序读取)
  • 每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称 设备节点)来使用驱动程序操作字符设备。
  • 常见的字符设备有鼠标、键盘、串口、SPI、I2C等

**块设备:**是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。

  • 数据以固定长度进行传输,比如512K
  • 块设备能够随机访问,而字符设备则只能顺序访问。
  • 块设备包括硬盘、磁盘、U盘和SD卡等
  • 每个块设备在/dev目录下对应一个设备文件,linux用户程序可以通过设备文件(或称设备节点)来使用驱动程序操作块设备。
  • 块设备可以容纳文件系统,所以一般都通过文件系统来访问,而不是/dev设备节点。

**网络设备:**不同于字符设备和块设备,不在/dev下以文件节点代表,而是通过单独的网络接口来代表。

  • 网络接口没有像字符设备和块设备一样的设备号和/dev设备节点,只有接口名,如eth0,eth1
    访问,而不是/dev设备节点。

**网络设备:**不同于字符设备和块设备,不在/dev下以文件节点代表,而是通过单独的网络接口来代表。

  • 网络接口没有像字符设备和块设备一样的设备号和/dev设备节点,只有接口名,如eth0,eth1
  • 对网络设备的访问只能通过socket操作,而不是open、closc、read、write

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148888.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

oracle avg、count、max、min、sum、having、any、all、nvl的用法

组函数 having的使用 any的使用 all的使用 nvl 从执行结果来看,nvl(列名,默认值),nvl的作用就是如果列名所在的这一行出现空则用默认值替换

Offer60:n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 分析:要解决这个问题,我们需要先统计出每个点数出现的次数,然后把每个点数出现的次数除以,就能求出每个点数出现的概率了。我们…

day-58 最接近的三数之和

思路 双指针&#xff1a;首先利用Arrays.sort()函数对数组进行排序&#xff0c;通过枚举中间位置的那个数&#xff0c;题目就变为了双指针 解题过程 指针边界&#xff08;right>i&&left<i&#xff09;&#xff0c;当三数之和小于等于target时&#xff0c;left,反…

电力系统中有哪些好的运维的平台?

摘要&#xff1a;介绍台商大厦&#xff0c;采用综合保护装置、多功能仪表、变压器温控仪、直流屏、烟雾传感器、门磁开关、网络摄像头等设备&#xff0c;采集配电现场的各种电参量和状态信号。系统采用现场就地组网的方式&#xff0c;组网后通过现场网关远传至阿里云平台&#…

精神分裂症、抑郁症和异常衰老的脑电信号特征:一项监督式机器学习研究

摘要 背景&#xff1a;EEG是一种非侵入性、成本效益高且稳健的工具&#xff0c;能够以高时间分辨率直接测量体内神经元的整体活动。结合先进的机器学习(ML)技术&#xff0c;EEG记录可以提供有关精神疾病的计算机模拟生物标志物。 假设&#xff1a;病理性和生理性衰老过程会影…

CMake 构建Qt程序弹出黑色控制台

CMake 构建Qt程序弹出黑色控制台

OpenBayes 一周速览|IC-Light 图片打光神器一键启动!Tecnalia 电子设备废物高光谱数据集上线,提高电子废物回收准确性

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * BTAD 工业异常数据集 * WebVid 大型短视频数据集 * bAbi 问答和文本理解的数据集 * OpenMIR 音乐收听脑电图数据集 * Tecnalia 电子设备废物高光谱数据集 2 个教程&#xff1a; * ComfyUl …

随机掉落的项目足迹:Vue3 + wangEditor5富文本编辑器——toolbar.getConfig() 查看工具栏的默认配置

问题引入 小提示&#xff1a;问题引入是一个讲故事的废话环节&#xff0c;各位小伙伴可以直接跳到第二大点&#xff1a;问题解决 我的项目不需要在富文本编辑器中引入添加代码块的功能&#xff0c;于是我寻思在工具栏上把操作代码的菜单删一删 于是我来到官网文档工具栏配置 …

vue-baidu-map的基本使用

前言 公司项目需求引入百度地图&#xff0c;由于给的时间比较短&#xff0c;所以就用了已经封装好了的vue-baidu-map 一、vue-baidu-map是什么&#xff1f; vue-baidu-map是基于vue.js封装的百度地图组件(官方文档) 二、使用步骤 1.下载插件 //我下载的版本 npm install …

CTO来分享:创业公司,如何提升MVP新产品开发速度?

创业公司的MVP新产品开发之路 对于创业公司&#xff0c;资源有限、早期项目概念模糊&#xff0c;加上人员不足&#xff08;甚至是只有创始人自己一人&#xff09;&#xff0c;如何能在短时间内、低成本、快速上线自己的MVP产品&#xff0c;验证产品和市场的匹配度&#xff0c;…

淘宝商品评论数据获取API接口响应参数列表展示(可测key)

item_review-获得淘宝商品评论 在电商领域&#xff0c;商品评论数据是商家和消费者都极为关注的重要信息。通过这些数据&#xff0c;商家可以了解产品的市场反馈&#xff0c;优化产品和服务&#xff1b;而消费者则可以参考其他用户的评价&#xff0c;做出更明智的购买决策。然…

辛普森积分公式

辛普森公式是用于数值积分的一种方法&#xff0c;其基本思想是将积分区间等分成若干小段&#xff0c;并在每一小段内用一个二次函数来近似代替被积函数&#xff0c;从而计算积分值。它是一种比较精确的数值积分方法&#xff0c;比其他常见的数值积分方法&#xff08;如梯形法和…

Nature Genetics|三代测序微量建库技术:媲美WGBS的直接甲基化检测

DNA修饰和甲基化是理解基因调控机制的关键。以往&#xff0c;我们的经验表明&#xff0c;使用三代测序从未经扩增的长DNA模板中同时读取序列信息和碱基修饰&#xff0c;需要投入大量的DNA样本来构建文库。 今天&#xff0c;小编带大家看一篇2024年发表于《Nature Genetics》的…

Web端云剪辑解决方案,素材商城提供近万种各类的特效素材

在数字内容爆炸式增长的今天&#xff0c;高质量、高效率的视频制作已成为企业传播品牌、吸引用户不可或缺的关键。美摄科技&#xff0c;作为业界领先的视频云处理与创意解决方案提供商&#xff0c;正式推出其革命性的Web端云剪辑解决方案&#xff0c;以云端之力&#xff0c;赋能…

PS教程,从零开始学PS

A01 进入PS的世界 广告设计\平面设计产品包装设计摄影后期图像美化\照片美化网页网店UI界面设计游戏美术动漫图形创意恶意创意\动态表情效果图后期调整 了解基本规律掌握操作规律开发扩展思维 A02 PS软件安装 获得PS安装程序安装PS启动PS A03 认识界面 1. PS主界面构成 …

使用 MobaXterm 远程连接 Linux 虚拟机并实现文件传输

文章目录 前言一、什么是 MobaXterm二 、MobaXterm 安装三、使用 MobaXterm 远程连接 Linux 虚拟机1. 准备工作2. 创建 SSH 连接3. 登录虚拟机 四、使用 MobaXterm 进行文件传输总结 前言 在日常开发和运维中&#xff0c;Windows 用户经常需要通过远程连接到 Linux 服务器进行…

uniapp小程序中通过uni.setClipboardData实现复制功能无效的原因和解决方案

// 复制下载链接const shareFile (filePath) > {const pdfUrl 复制内容uni.showModal({title: 下载提示,content: 请复制链接到浏览器中下载,confirmColor: #eb2444,confirmText: 复制链接,success(res) {if (res.confirm) {uni.setClipboardData({data: pdfUrl, // url地…

Python 如何处理大文件的读取

Python 如何处理大文件的读取 在日常的开发工作中&#xff0c;我们经常会遇到处理大文件的需求。无论是读取日志文件、处理数据集&#xff0c;还是分析超大文本文件&#xff0c;大文件操作都是一个非常常见的挑战。尤其是在内存有限的环境中&#xff0c;直接将整个文件加载到内…

AV1 Bitstream Decoding Process Specification--[8]: 语法结构语义-4

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf 没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码…

Python基础练习题‌100道电子版及源码文件

Python基础练习题‌&#xff0c;旨在帮助学习者巩固和提升Python编程技能。以下是一些精选的练习题目&#xff0c;包括但不限于&#xff1a; 基础语法练习‌&#xff1a;涉及变量定义、数据类型、运算符、条件语句、循环等基础语法结构的应用。例如&#xff0c;编写程序来处理数…