当前位置: 首页 > news >正文

Linux驱动学习之点灯(一)

学习不同的板子我们都是从点灯开始,linux驱动也不例外

驱动开发基础知识

何为驱动?

驱使硬件正常工作的代码就叫做驱动。

在一些mcu里:

        无非就是直接操作寄存器,或者用库函数初始化外设,使外设正常工作如初始化iic,spi等,这样的代码就叫驱动。

在linux里:

        不像在mcu里,拿一个led灯举例子,

         mcu:

                操作寄存器初始化gpio(库函数),在main里开灯关灯。

         linux下:

                     也可以像mcu一样在内核层直接开灯,内核不断加载卸载很浪费资源,效率极 低,linux下的内核模块代码,是独立运行的单元,很难像mcu一样一个代码一个工程代表整个单片机运行程序。

                      就算在内核层把代码写死,系统开发工程师不懂驱动怎么操作led灯。

我写了一个驱动

你作为你个智能家居软件开发工程师想用我写的驱动控制led灯

真正的linux驱动:

        不像mcu一样,把代码写死,

        首先linux下的驱动符合linux驱动的原则:驱使硬件正常工作的代码,在内核层把led设备抽象一个一个文件,写驱动就是完成这件事,把设备变成文件。软甲就可以直接操作文件,执行一系列操作。

以led灯位列:

        led灯->led驱动->文件  /dev/led

        应用层开发者->打开/dev/led->灯亮

        应用层开发者->关闭/dev/led->灯灭

linux分层思想

直接操作寄存器,高效,便捷,但不利于移植,不通用,换个芯片就得重构代码。

而linux系统其他所有系统都在做软硬件分离

分离就靠中间层

linux不管换什么平台,因为中间层都一样,驱动框架代码都一样

从这方面来讲驱动比mcu简单多了

linux分层处处可见,不仅把驱动做了分层,底层的外设驱动也做了分层,如spi,分为厂家驱动和可供用户操作的API接口。

                        

厂商的驱动也做了分层,分为硬件信息和底层驱动 

linux下学的所有API都是通用的。

驱动开发的框架

1.写驱动框架

2.驱动框架,把设备抽象为文件

                设备的设备号->设备ID->让内核管理
                (设备内核操作接口->文件操作接口(内核你驱动开发者要单独实现一套)
                你写的内核层的打开关闭读写跟上层(系统层--对应)
                这是也是你留给上层的操作接口!

3.编译成.ko->insmod Xxx.ko->生成设备文件(/dev/xxxx)
4:调用加载/入口函数->内核框架->生成设备文件
5:上层/你自己调用文件操作->操作设备

 设备驱动文件的特点

系统的特殊文件

管道,套接字,块设备,字符设备

用非缓存io操作。

linu驱动设备文件分为三类

字符设备(char)

一般指的是除了存储网络设备之外的所有的其他设备鼠标按键触摸屛LED灯蜂鸣器键盘摄像头液晶屏

网络设备

wifi 4g

块设备(储存)

正常储存设备,厂商一般完成了初始化

小型储存设备 ,spi_flash eeprom

设备号

设备号是一个无符号的32位的整形,理论上设备最多挂在2^32个设备 

设备号分为主设备号和次设备号

主设备号

占32位设备号的高12位,但是他最大255

次设备号

占32位设备号的低20位,最大255

按设备号算最多挂载255^2个设备

字符设备传输

按字节传输

相关文章:

Linux驱动学习之点灯(一)

学习不同的板子我们都是从点灯开始,linux驱动也不例外 驱动开发基础知识 何为驱动? 驱使硬件正常工作的代码就叫做驱动。 在一些mcu里: 无非就是直接操作寄存器,或者用库函数初始化外设,使外设正常工作如初始化iic&…...

从HTTP到HTTPS:SSL加密如何重塑互联网安全格局

从HTTP到HTTPS:SSL加密如何重塑互联网安全格局 随着互联网技术的飞速发展,网络安全问题日益凸显,保护用户数据的安全性和隐私性成为了不可忽视的重要议题。从HTTP(超文本传输协议)到HTTPS(超文本传输安全协…...

QT网络编程: 实现UDP通讯设置

目录 一.widget.ui界面设计 二.创建UDP通信 1.pro文件添加network模块。 2.添加对应头文件 3.定义槽函数,即与 UI 中的按钮点击事件相关联的函数 4.定义类的私有成员 5.关闭按钮 6.信息处理 7.绑定端口 8.发送信息 9.效果图 三.代码演示 1.widget.h 2.…...

机器学习第十一章--特征选择与稀疏学习

一、子集搜索与评价 我们将属性称为 “特征”(feature),对当前学习任务有用的属性称为 “相关特征”(relevant feature)、没什么用的属性称为 “无关特征”(irrelevant feature).从给定的特征集合中选择出相关特征子集的过程&…...

dm 到 dm 的 HS 同步部署

一、数据库部署 完成两节点数据库部署并初始化,配置参数如下: 节点 192.168.2.132 192.168.2.133 数据库版本 DM8 DM8 实例名 DM1 DM2 端口号 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmdata 二、 dmhs 部署 1. 部署…...

ShardingSphere、雪花算法、分布式id生成器CosID概述

ShardingSphere 用处:sharding是分片的意思,sphere是球(生态的意思)。用来做分库分表的生态的。一个订单表太大,查询会很慢,要分表,分为3个表,这样查询会快一点,所以有了…...

hive学习(四)

一、分区表的数据导入 1.静态分区(需要手动指定分区字段的值) 直接将文件数据导入到分区表 语法:load data [local] inpath filepath into table tablename partition(分区字段1分区值1, 分区字段2分区值2...); load data [local] inpat…...

UniAD_面向规划的自动驾驶

Planning-oriented Autonomous Driving 面向规划的自动驾驶 https://github.com/OpenDriveLab/UniAD Abstract Modern autonomous driving system is characterized as modular tasks in sequential order, i.e., perception, prediction, and planning. In order to perfor…...

《现代情报》

《现代情报》简介 《现代情报》(原名《情报知识》)杂志是由吉林省科学技术厅主管,吉林省科学技术信息研究所、中国科学技术情报学会联合主办的信息资源管理领域综合性学术期刊。该刊于1980年创刊,每年12期。重点报道服务于国家战略…...

2024年最新上榜的文件加密管理软件

文件加密市场风起云涌,后辈迭出,2024年安企神软件在文件加密管理软件市场中备受瞩目,凭借其强大的功能和全面的保护策略,成功上榜并受到广泛认可。以下是对它的详细介绍: 一、产品概述 安企神软件不仅是一款电脑监控…...

Matplotlib库学习之scatter(模块)

Matplotlib库学习之scatter(模块) 一、简介 Matplotlib 是 Python 中一个强大的绘图库,其中 matplotlib.pyplot.scatter 用于创建散点图。散点图在数据可视化中广泛用于展示两个变量之间的关系。 二、语法和参数 语法 matplotlib.pyplot.scatter(x, y, sNone, c…...

脑网络相似性:方法与应用

摘要 图论方法已被证明是理解、表征和量化复杂大脑网络的有效工具。然而,定量比较两个图形的方法却较少受到关注。在一些网络神经科学应用中,比较大脑网络确实是必不可少的。在这里,本研究讨论了近年来用于比较大脑网络的技术现状、挑战以及…...

【JavaEE】深入MyBatis:动态SQL操作与实战项目实现指南

目录 MyBatis的进阶操作动态SQL<if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 练习表白墙数据准备引⼊MyBatis 和 MySQL驱动依赖配置MySQL账号密码编写后端代码测试 图书管理系统数据库表设计引⼊MyBatis 和MySQL 驱…...

Linux 实操-权限管理:深入了解rwx的作用

&#x1f600;前言 本篇博文是关于Linux文件权限管理的基本知识和实际操作&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是…...

Linux 系统编程 --- day3

目录 1. fileno 2.fdopen 3. 目录操作 3.1 opendir 3.2 readdir 3.3 closedir 3.4 实现 ls 命令的功能 4. chdir &#xff08;相当于cd命令&#xff09; 5. getcwd &#xff08;相当于pwd命令&#xff09; 6. mkdir 7. rmdir &#xff08;相当于rm命令&a…...

centos从home分区分配空间到根分区

在安装centos系统时如果采用默认自动分区&#xff0c;则会默认只给根分区分配50G空间&#xff0c;其余多余的会被分配到home分区&#xff0c;而作为家用服务器或仅个人使用的话&#xff0c;为了方便往往根分区会不够用而home分区几乎没使用。 先看下现在的磁盘结构和容量(xfs文…...

设计模式实战:即时通讯应用的设计与实现

系统功能需求 用户管理:支持用户注册、登录、注销、个人信息更新等功能。消息传递:支持即时消息发送、接收、存储和显示,支持文本、图片、语音等多种消息类型。在线状态管理:实时跟踪和显示用户的在线状态。消息通知:在消息到达时发送推送通知给用户。聊天记录管理:支持聊…...

白骑士的C#教学实战项目篇 4.3 Web开发

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.2 图形用户界面&#xff08;GUI&#xff09;应用 在这一部分&#xff0c;我们将从桌面应用程序扩展到 Web 开发。Web 开发是现代软件开发的重要领域&#xff0c;涵盖了从前端用户界面到后端服务器逻辑的完整堆栈。在这…...

【数据分析】(交互) 延迟互信息(熵、概率密度、高斯核、带宽估计)

文章目录 一、互信息基础二、延迟互信息2.1 交互延迟互信息三、时间序列互信息中的概率计算(高斯核密度估计)四、python 示例补充 1:熵熵的定义熵的性质熵的单位和对数底数熵的最大值高熵、低熵的分辨补充 2:概率密度 和 高斯核概率密度高斯核拓展3 :核密度函数带宽估计在…...

html转vue项目

HTML是一种用于构建网页的标记语言&#xff0c;而Vue是一种用于构建用户界面的JavaScript框架。在HTML中使用Vue可以提供更加灵活和动态的用户界面功能。本文将介绍如何将HTML代码转换为Vue&#xff0c;并提供具体的代码示例。 首先&#xff0c;我们需要在项目中引入Vue框架。…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...