当前位置: 首页 > 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框架。…...

别再看水刊了!智能故障诊断领域投稿,这20+个SCI期刊才是你的目标(附避坑指南)

智能故障诊断领域投稿指南&#xff1a;20高价值SCI期刊与避坑策略 对于从事智能故障诊断研究的学者而言&#xff0c;选择合适的SCI期刊投稿是研究成果获得认可的关键一步。本文将系统梳理该领域的优质期刊资源&#xff0c;帮助您避开常见陷阱&#xff0c;提高投稿成功率。 1. 智…...

GooglePlay多账号管理神器推荐:5款工具帮你轻松实现合规隔离(2025亲测有效)

GooglePlay多账号管理实战指南&#xff1a;2025年高效合规工具与策略 在移动应用生态中&#xff0c;Google Play作为全球最大的应用分发平台&#xff0c;其严格的账号管理政策让许多开发者感到头疼。特别是对于那些需要运营多个账号的开发者来说&#xff0c;如何在合规前提下实…...

基于STM32F与ESP8266的智能桌面天气时钟:从网络授时到OLED显示的完整实现

1. 项目背景与核心功能 最近在工作室捣鼓了一个特别实用的小玩意儿——用STM32F和ESP8266做的智能桌面天气时钟。这可不是普通的电子钟&#xff0c;它能自动联网校准时间&#xff0c;还能实时显示当地天气&#xff0c;放在书桌上既美观又实用。很多朋友看到后都问我是怎么做的&…...

Miri最佳实践清单:构建安全Rust代码的20条黄金法则

Miri最佳实践清单&#xff1a;构建安全Rust代码的20条黄金法则 【免费下载链接】miri An interpreter for Rusts mid-level intermediate representation 项目地址: https://gitcode.com/GitHub_Trending/mi/miri Miri是Rust的中级中间表示解释器&#xff0c;它能帮助开…...

如何在React Native应用中实现Material Design动画效果:Ripple波纹与状态切换完整指南

如何在React Native应用中实现Material Design动画效果&#xff1a;Ripple波纹与状态切换完整指南 【免费下载链接】react-native-material-kit xinthink/react-native-material-kit: 该库为React Native提供了一套Material Design风格的UI组件&#xff0c;帮助开发者轻松构建遵…...

我的杭州亲子旅游线路总结(坐船版)

我的杭州亲子旅游线路总结&#xff08;坐船版&#xff09; 这是我带娃走过的线路。孩子最近迷恋坐船&#xff0c;我看到新闻说梅花碑有公交船&#xff0c;而且梅花开了很漂亮&#xff0c;就去看看。 这里记录一下行程&#xff0c;说不定以后还去&#xff0c;能做参考。 文中提及…...

万兴剧厂AI漫剧APP2025推荐,打造个性化漫剧体验

万兴剧厂AI漫剧APP2025推荐&#xff0c;打造个性化漫剧体验在当今数字化娱乐的浪潮中&#xff0c;漫剧以其独特的表现形式和丰富的内容吸引了众多用户。据《2025中国数字娱乐行业发展报告》显示&#xff0c;2025年漫剧市场规模持续增长&#xff0c;用户对于优质漫剧的需求也日益…...

CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本)

CTF实战&#xff1a;手把手教你用fastcoll工具复现MD5碰撞攻击&#xff08;附Python验证脚本&#xff09; 在网络安全竞赛和渗透测试中&#xff0c;MD5碰撞攻击是一个经典且实用的技术点。本文将带你从零开始&#xff0c;完整复现MD5碰撞攻击的全过程&#xff0c;包括工具使用、…...

【GitHub项目推荐--Godogen:一句话生成完整 Godot 游戏的 AI 流水线】⭐⭐⭐

简介 Godogen​ 是一套基于 Claude Code​ 构建的自动化游戏开发流水线。它不仅仅是一个代码生成器&#xff0c;更是一个全栈的“AI 开发团队”&#xff1a;你只需用自然语言描述游戏创意&#xff0c;它便能自动完成架构设计、美术生成、代码编写、引擎截图、视觉质检的全流程…...

如何用代码思维提升90%图表效率?揭秘Mermaid的可视化革命

如何用代码思维提升90%图表效率&#xff1f;揭秘Mermaid的可视化革命 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edi…...