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

Linux设备驱动_概述

前言

在理解"链接"的基础上,有了跃跃欲试的感觉,好像啥都能做了---设计数据类型表达数据,设计函数(算法)表达逻辑,再把数据映射到硬件上,完整的程序就出来了.举个例子,有个叫"Robot"的硬件,他的硬件端口有8个位.那么用一段代码把Robot和程序连接起来,如下:

//伪代码 Port=端口在内存中的地址; char *Robot=Port; //指向Port *Robot=0x25; //将25写入Robot的硬件寄存器中,实现某些控制或数据传输功能

还有一种更简洁的写法跟别人学的如下所示:

char Robot = * (char *)Port; Robot=0x25;

通过赋值Robot,对照硬件Robot寄存器,就可以实现对硬件的控制---这是一种朴素的设计

用程序直接控制硬件,是单片机的做法.单片机适用的场景是一些功能单一,计算量小的硬件数字设备.例如家用电器---洗衣机,抽油烟机,冰箱等.在多任务计算量大的场景中,需要操作系统做支持.而操作系统就要用到Linux了---Linux的书多.

Linux的学习内容有内核和设备驱动两块.操作系统会封装设备驱动,提供操作硬件的库文件接口给软件开发者.除了硬件,操作系统还要对内存,进程,文件等内容进行管理,这些属于Linux内核的内容.以一本书<Linux设备驱动开发详解>(以下称"本书")为基础学习Linux.虽然归于嵌入式Linux,但有些内容是相通的.

程序的一些思路

编程有一些思路是通用的,时不时做个概括

函数是分层的

前面的帖子中提到了函数的几层抽象.最后一点写得不完整在这里补上.函数是分层次的,下一层函数是上一层函数的实现,上一层函数是下一层函数的封装,最底层的函数实现是由芯片电路完成.

笔者在这里提一个概念:基础函数.如果程序员只调用某个函数,无法写出函数定义,那么该函数称为基础函数.这个概念是相对的,写Java和写Java虚拟机的人面对的基础函数是不同的.笔者默认C语言做基础,那么像printf和scanf这类函数,以及if else / switch这些关键字都看作基础函数.基础函数和内核函数的含义差不多.

基础(内核)函数的特点是需要访问内核资源(数据或函数).操作系统一般不会放开访问权限,让应用程序员访问内存绝对地址,所以也不要把内核编程看得很神秘,本质上也是"数据"+"算法".不是不能写是没有权限和内核资源.程序员着眼于操作系统以上的函数,例如框架也可以嵌套其他框架.

软件也是分层的

每层函数组合在一起,就是一个软件层.软件的架构设计简单地说就是软件层的设计.一个软件分若干个软件层,每层承担什么任务,再具体到每层包含哪些函数.架构师分析需求,并给出各个层级的函数,具体函数定义由程序员编写.

以面向对象的思想来设计程序,会简单一些.架构师给出类定义---数据类,功能类,普通类---对应着数据对象(无动作),动作,数据对象(有动作).动作要表达一种逻辑,一种因果关系,否则没有意义.具体类设计交由程序员编写.这样考虑的就不是软件层,而是类与接口之间的关系.

面向对象是一种"横向"的设计,着眼于内容的完善;软件层级是一种"纵向"的设计,着眼于从代码到硬件的实现.面向对象也不是完全横向的,例如接口和对象的关系是"纵向"的.

不求甚解

1>不求甚解不是"差不多"就行了,而是在学习遇到某些不熟悉的内容时可以暂时略过.程序是一种绝对理性的存在,但程序员不是机器,可以有一些感觉在里面.

2>不求甚解是需要一定技术基础的.在编程中,就是对程序语言的熟练度.在Linux中,对C语言的结构体,函数指针等内容比较熟练.

综合来讲,建立在扎实技术基础上,一种自信从容的学习心态.

Linux设备驱动

嵌入式Linux设备驱动的内容比较多,和Linux内核有一定联系,但用起来有很多固定格式,没那么复杂.另外本书有许多代码,多读学习别人的代码思路也是可以的.

http://www.jsqmd.com/news/642734/

相关文章:

  • [STM32] 散列文件与链接地址配置实战解析
  • 【无标题】第二章 Hadoop3安装
  • 对称式目镜设计中的光扇图分析与像差校正
  • VisionTransformer(二)—— 多头注意力机制:从理论到PyTorch实战解析
  • 收藏!小白/程序员入行AI应用开发必看,别被招聘要求吓退(附实操资源)
  • 常州装修设计领域评测与推荐——聚焦实力标杆,认准鸿鹄领跑优势
  • YOLOFuse效果展示:实测RGB+红外融合检测,复杂环境下精度显著提升
  • Dify低代码平台实战:5步搞定企业级AI应用开发(附避坑指南)
  • Redis 常用数据类型
  • day02统计师考试(初级)统计法的特点
  • 从理论到实践:信息量、码元与比特的深度解析及通信系统中的应用
  • 基于CNN卷积神经网络的锂电池SOC估计,MATLAB代码,二维图+三维图!
  • 人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索
  • 当AI搜索引擎开始替用户做消费决策,品牌的媒介宣发逻辑也正在被彻底改写
  • 外汇流动性和市场情绪指标MT4、MT5
  • 深入大模型-37-learn-claude-code之第十二课学习claude code编程思想的体会
  • pgRouting安装及使用示例
  • 马尔可夫性、极小性和忠实性的关系:因果图与数据的深层逻辑
  • ZR.Admin.NET + Vue3实战:从本地开发到Nginx部署的完整避坑指南
  • 使用腾讯QClaw来拯救一个重度脂肪肝患者
  • 100G SFP光模块全解读:核心定义、关键特性与主流应用场景
  • L1-044 稳赢(15分)
  • RTA-OS Alarm配置避坑指南:从绝对/相对时间到自启动,这些细节别踩雷
  • FanControl完全指南:告别风扇噪音,5分钟打造完美静音电脑
  • Kylin-Desktop-V10-SP1-海光版(Hygon C86)安装与配置全指南
  • 5月19日起Roblox更新游戏发布要求,创作者反响不一!
  • 从云端到边缘:拆解Capsule Update如何成为现代设备(IoT/服务器)固件管理的基石
  • 2025年终极指南:R3nzSkin国服特供版——一键解锁LOL全皮肤的完整解决方案
  • 手把手教你用Qwen3.5-2B:免费商用、一键部署,打造个人AI助手
  • 表格布局中的Flexbox应用