Linux驱动学习之点灯(一)

news2024/9/20 5:37:03

学习不同的板子我们都是从点灯开始,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个设备

字符设备传输

按字节传输

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

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

相关文章

leetcode13. 罗马数字转整数,流程图带你遍历所有情况

leetcode13. 罗马数字转整数 示例 1: 输入: s “III” 输出: 3 示例 2: 输入: s “IV” 输出: 4 示例 3: 输入: s “IX” 输出: 9 示例 4: 输入: s “LVIII” 输出: 58 解释: L 50, V 5, III 3. 示例 5: 输入: s “MCMXCIV” 输出: 1994 解释: M 1000, CM 900, XC…

一个贼好用的开源导航网站项目——pintree!【送源码】

这两天发现了一个项目,它可以快速的将收藏夹里的网址导出,然后快速生成一个在线的网站。这个项目就是 pintree。 项目简介 Pintree 是一个开源项目,旨在将浏览器书签转换为导航网站。只需几个简单的步骤,就可以将书签转变为美观…

【CAN-IDPS】汽车网关信息安全要求以及实验方法

《汽车网关信息安全技术要求及试验方法》是中国的一项国家标准,编号为GB/T 40857-2021,于2021年10月11日发布,并从2022年5月1日起开始实施 。这项标准由全国汽车标准化技术委员会(TC114)归口,智能网联汽车分会(TC114SC34)执行,主管部门为工业和信息化部。 该标准主要…

集团数字化转型方案(二)

集团数字化转型方案通过整合物联网(IoT)、大数据分析、人工智能(AI)和云计算技术,构建了一个全面智能化的业务平台,从而实现了全集团范围内的业务流程自动化、数据驱动决策优化、以及客户体验的个性化提升。…

windows11 安装 Rancher Desktop

从官网下载了最新版的 Rancher.Desktop.Setup.1.8.1.msi 安装包,安装很顺利。 但是安装完,启动时报错 The k3s cache is empty and there is no network connection. 不明所以,网上查了,原来是github访问不了的原因,具…

这些星座比你想象的还努力

TOP 3. 金牛座   金牛座对于操劳操心的忍受度本来就比较高,对于金牛座来说这些都是踏实的象征,金牛座比较不相信不劳而获这件事情,多少血汗多少付出,得到多少收获,这让金牛座比较踏实,不会觉得很不安&…

CE游戏教程第三关解密

游戏规则:雪人可以左右移动,跳跃,跳跃到红线上,红线变绿,所有红线变率时,门开启,雪人通过门后,游戏胜利。如果游戏中触碰到NPC,游戏失败! 经过研究&#xff…

DHCP的原理与配置

目录 DHCP的原理 DHCP是什么 DHCP的好处 DHCP的分配方式 DHCP的工作原理 DHCP的配置 环境设置 DHCP配置 验证配置是否成功 DHCP的原理 DHCP是什么 DHCP:Dynamic Host Configuration Protocol,动态主机配置协议。由Internet工作小组开发,专门用…

自然语言处理NLP四范式

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlNLP四范式概述 自然语言处理(NLP)的四范式是NLP领域发展历程中的重要里程碑,它们代表了NLP技术从传统方法到现代深度学习技术的转变。第一范式是非神经网络时代的完全监督学习,它依赖于人工设…

Python基础知识学习总结(五)

一. 字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割,每个对之间用逗号( , )分割,整个字典包括在花括号 {} 中 。 dict 作为 Python 的关键字和内置函数,变量名不建议命名…

CompletableFuture-应用

可以看到CompletableFuture实现了CompletionStage 和Future的两个接口。CompletionStage提供了任务之间的衔接能力,而Future则是经常用于阻塞获取结果。 CompletableFuture 的内部使用了基于 ForkJoinPool 的线程池,这种线程池可以高效地调度和执行任务…

数据结构与算法--交换排序与归并排序

文章目录 回顾提要冒泡排序冒泡排序的过程冒泡排序的实现冒泡排序算法评价 快速排序快速排序的划分方法快速排序的过程快速排序的实现快速排序算法性能分析快速排序的改进 归并排序二路归并排序合并两个有序表归并排序示例归并排序算法性能分析 各种内排序方法的比较各种内排序…

SOCKS5代理UDP转发:探秘网络世界的隐形传送带

在这个信息爆炸的时代,网络已经成为我们生活中不可或缺的一部分。然而,网络世界中也充满了各种问题和挑战,比如隐私保护、数据传输的安全性等。今天,我们就来聊聊一种神奇的网络工具——SOCKS5代理,特别是它在UDP转发中…

在撰写跨学科论文时,如何平衡不同研究领域的篇幅和深度?

在学术界,跨学科研究因其能够综合不同领域的知识和方法而受到重视。然而,如何在一篇论文中平衡不同学科的篇幅和深度,是一个常见的挑战。本文将探讨一些有效的策略,帮助你在撰写跨学科论文时,既能展现每个领域的深度&a…

数字产业生态圈如何推动产业加速升级?

在数字化浪潮的推动下,数字产业生态圈逐渐成为产业升级的重要载体。它不仅汇聚了技术创新的源头活水,更通过以下几大途径,为产业注入强劲动力: 1、资源整合:数字产业生态圈将政府、企业、科研机构和高校等多方资源整合…

一个案例讲清5Why分析法,分分钟Get!

探究问题深处的“ 5 why究竟法”,这可不是普通的连连问,而是由丰田创始人丰田佐吉精心锻造的问题挖掘秘籍。简而言之,就是当你遇到一个谜题,连环出击五个“为啥呢?”,一步步揭秘真相的核心。想象一下&#…

C++策略模式Strategy

组件协作– —策略模式strategy (运行时可以切换, 运行时多态调用, 不同于if else,(bad smell、还占用缓存) 只要有if else就应该要想strategy重构 但是如果if else绝对不变的情况,也可以用 原本…

Opencv学习-直方图比较

由于图像的直方图表示图像像素灰度值的统计特性,因此可以通过两幅图像的直方图特性比较 两幅图像的相似程度。从一定程度上来讲,虽然两幅图像的直方图分布相似不代表两幅图像相似,但是两幅图像相似则两幅图像的直方图分布一定相似。例如&…

Openlayer - vue中加载天地图(入门篇)

在vue中安装openlayers npm i --save ol这里说的vue是基于脚手架构建的。 新建个页面&#xff0c;也就是vue文件&#xff0c;配置好路由。接着 就是可以直接放入我的代码运行显示了。 vue利用openlayers加载天地图和高德地图 <template><div class"wrapper&quo…

集团数字化转型方(五)

集团数字化转型方案通过全面整合人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;等前沿技术&#xff0c;构建了一个高度智能化的业务平台&#xff0c;从而实现业务流程的自动化、数据驱动的决策支持、精准的市场预测、以及个性化的…