linux 设备驱动开发基本概念

2023-05-16

        任何一个计算机系统的运转都是系统中软硬件共同努力的结果, 没有硬件的软件是空中楼阁, 而没有软件的硬件则只是一堆废铁。 硬件是底层基础, 是所有软件得以运行的平台, 代码最终会落实为硬件上的组合逻辑与时序逻辑; 软件则实现了具体应用, 它按照各种不同的业务需求而设计, 并完成用户的最终诉求。 硬件较固定, 软件则很灵活, 可以适应各种复杂多变的应用。 因此, 计算机系统的软硬件相互成就了对方。 驱动程序负责硬件和应用软件之间的沟通, 而驱动工程师则负责硬件工程师和应用软件工程师之间的沟通, 那么从字面意思来看, 设备驱动最通俗的解释就是“驱使硬件设备行动” 。 在学习驱动之前, 我们先了解一些基础概念。
 

概念一 裸机编程或单片机开发
        裸机编程, 顾名思义, 就是直接在硬件上编程写代码, 或者说编写直接在硬件上运行的程序, 没有操作系统的支持。 一般我们把没有操作系统的编程环境, 称为裸机编程环境, 比如在单片机上编程。 通过串口直接将程序下载到单片机芯片内部的 Flash 中, 单片机运行时, 直接调用我们编程的程序。 这时, 我们编写的程序一般都有一个 while 1 的死循环存在, 这样程序才能一直保持运行。 裸机编程现在主要是正对低端的嵌入式系统, 如 SCM(single chip machine) 、 各式 MCU、 DSP 等。 当然, 编写 PC 的 bootloader 肯定也属于裸机编程。

         单片机是一种集成电路芯片, 是用大规模集成电路技术通过编程数据处理能力的中央处理器 CPU、 随机存储器 RAM、 只读存储器 ROM、 多种 I/O 口和中断系统、 定时器/计时器等功能,这其中还包括显示驱动电路、 脉宽调制电路、 模拟多路转换器、 A/D 转换器等功能等集成到一块小芯片上。单片机开发包括: 程序设计(PC 端软件编程) , 程序送往执行(将编程好的软件下载到单片机, 需要编程器或者下载线) , 单片机系统的设计(硬件上设计你需要的任务的执行机构, 如控制开关, 温度检测,红外传输等等, 都是根据你的所需, 然后在选择对应的硬件器件)。
 

概念二 linux 系统开发

        基于 linux 操作系统来开发我们的产品叫 linux 系统开发。此开发的编程方式和裸机开发的编程方式是截然不同的。 裸机开发的编程方式是直接运行在硬件之上, 不与任何操作系统关联。 操作系统的存在势必要求设备驱动附加更多的代码和功能, 把单一的“驱使硬件设备行动” 变成了操作系统内与硬件交互的模块,它对外呈现为操作系统的 API, 不再给应用软件工程师直接提供接口。 由此可见, 当系统中存在操作系统的时候, 驱动变成了连接硬件和内核的桥梁。
        linux 系统开发框架如下图所示, 最上层的是应用软件, 下面是操作系统, 再下面是驱动程序, 最后是我们的硬件。 如果在硬件上跑操作系统, 驱动程序是位于硬件和操作系统中间的, 是连接操作系统和硬件之间的桥梁。
        这里拿 linux 操作系统给大家举个例子, linux 系统可以跑到不同的硬件上面如 pc 机或者 arm 开发板上面。 如果 linux 操作系统跑到 PC 机上, 那么驱动就要适配 PC 机; 如果 linux 操作系统跑到 arm 开发板上面,那么驱动就要适配 arm 开发板; 所以说不同的硬件架构都可以跑 linux, 但是它的驱动程序是不同的, 那么linux 操作系统源码都是一样的, 唯一不一样的就是驱动程序了。 也就是说同一个操作系统可以跑到不同的硬件上面, 但是驱动程序是有差异的, 因为驱动程序是操作系统和硬件连接的一个桥梁。

概念三 系统移植 linux 驱动移植
        移植是说同样的一个 linux 操作系统 , 我们可以跑到不同的硬件上面, 我们把操作系统移植到不同的硬件上面, 这个过程叫做移植。 设备驱动移植步骤, 如下图所示:
 

概念四 应用软件
        在操作系统上面有应用软件, 应用软件程序的执行是依赖于操作系统的, 应用程序需要调用 linux 操作系统的库函数来实现, 也就是说, 应用软件的程序会调用 linux 操作系统的函数来完成对硬件的操作, 那么应用程序是不能对硬件直接进行操作的。
概念五 linux 系统架构优点
        linux 系统开发架构和我们裸机的架构是不同的, 架构相比于裸机架构是非常复杂了, 那么我们使用这个架构都有什么好处呢?
1 有了系统的架构后, 开发起来就非常容易了, 因为它有自己的框架, 这种框架都是非常成熟的框架,我们直接按照框架开发就可以了, 框架给我们提供了很多现成的功能。
2 这个框架让我们的系统变得更加安全, 因为我们的应用软件不能直接对硬件进行操作, 它要借助操作系统来对硬件进行操作。 如果应用软件有好几个, 假如其中的一个应用软件奔溃了, 它不会影响我们整个系统的运行, 不会造成系统的死机, 这样就会让系统更加安全, 出问题的概率变得更小了。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 设备驱动开发基本概念 的相关文章

随机推荐

  • IntelD435摄像头将深度图与摄像头进行像素对齐(并抽帧保存)

    coding 61 utf 8 import pyrealsense2 as rs import numpy as np import cv2 import os 创建一个管道 pipeline 61 rs pipeline Create
  • python3 可视化COCO格式json文件目标检测矩形框

    import os import json import argparse from PIL import Image ImageDraw ImageFont FONT SIZE 61 13 2 IMAGE FONT 61 ImageFon
  • 对比图像清晰度(模糊度)之灰度方差算法 python代码实现

    灰度方差算法 图像最清晰 xff0c 图像中的高频分量也最多 xff0c 该算法以图像所有像素的灰度平均值为参考 xff0c 对每个像素点的灰度值求差后求平方和 xff0c 然后用像素总数标准化 xff0c 它表征了图像灰度变化的平均程度
  • pytorch使用 ROIalign 代码实例

    batch size 61 x shape 0 all roi align feats 61 for i in range batch size hmap1 s 61 out hmap 1 i hmap1 s 61 hmap1 s unsq
  • python resize dicom(dcm)代码

    from glob import glob import os import pydicom import numpy as np import cv2 dcm list 61 sorted os listdir 39 xxxx 39 fo
  • 基于opencv和ffmpeg的图片转换成视频的两种方法实现,可生成H264格式

    opencv转换图片为视频 xff08 生成视频格式为MJPG xff09 encoding UTF 8 import glob as gb import cv2 图片文件夹地址 img path 61 gb glob 34 G temp
  • VGG16提取图片特征

    import os import numpy as np import torch import torch nn import torchvision models as models from torch autograd import
  • 防火墙之数据包过滤iptables

    内容简介 防火墙的概述 1 iptables简介 2 iptables基础 3 iptables语法 4 iptables实例 案例详解 xff08 一 xff09 防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合
  • Ubuntu apt-get 和 pip 更换源

    Ubuntu系统自带的源都是国外的网址 xff0c 国内用户在使用的时候网速比较慢 一个软件的下载是十分痛苦的 xff0c 这里讲解一下如何将国外源更换为国内源 xff0c 让你的网速Biu Biu Biu 更换apt get数据源 1 备
  • Linux如何解决动态库的版本控制

    xff08 换句话说 xff0c soname不是真实存在的文件 xff0c 只是在此库中和将来调用此库的文件中保存的一个名字 xff0c 在加载时去找这个名字 xff0c 使用时创建一个软连接来指向真实文件 xff0c 这样真实文件的版本
  • C语言中可变参数函数实现原理

    C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关 xff0c 正常情况下C的函数参数入栈规则为 stdcall 它是从右到左的 xff0c 即函数中的最右边的参数最先入栈 例如 xff0c 对于函数 xff1a void f
  • Linux串口测试应用程序

    1 Linux终端 串口 210开发板有4个串口 2440开发板有3个串口 在2440开发板中三个串口设备对应如下 串口名字 主设备号 次设备号 s3c2410 serial0 204 64 s3c2410 serial1 204 65 s
  • 开发板上syslog使用方法小结

    首先我们需要先确认我们的开发板上是否安装了syslog服务 xff0c 在开发板的文件系统下输入syslogd help命令查看如果不支持就是busybox的版本太低了 当确定安装了后我们根据help显示的默认配置文件来查看该配置文件是否存
  • Perl中文件读取操作

    一 打开 关闭文件 语法为open filevar filename xff0c 其中filevar为文件句柄 xff0c 或者说是程序中用来代表某文件的代号 xff0c filename为文件名 xff0c 其路径可为相对路径 xff0c
  • web服务器之mongoose:安装

    引言 Mongoose开源项目的主页是http code google com p mongoose Mongoose是一个web服务器 xff0c 通过提供一个web接口给它 xff0c 它可以嵌入到现有的应用程序中去 Mongoose
  • web服务器之mongoose:核心处理模块

    引言 前面我们介绍了Mongoose所有的几个主要的数据结构mg context mg connection mg request info xff0c 还有Mongoose的生命主线 有了这些基础就可以来看看Mongoose的核心处理工作
  • mtd-utils工具的使用

    在ubuntu 10 04上交叉编译编译 mtd utils 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 2020-12-29 DOS命令启动MySQL服务时,出现(系统错误5,拒绝访问)的错误提示

    在用DOS命令启动MySQL服务时 xff0c 出现 xff08 系统错误5 xff0c 拒绝访问 xff09 的错误提示 xff0c 这是由于我们操作的权限不足造成的 xff0c 需要以管理员身份启动 xff0c 解决问题方法如下 1 W
  • 柔性管理法则与柔性管理案例

    转载自 xff1a http www caecp cn News News 954 html 柔性管理是在研究人们心理和行为规律的基础上采用非强制方式 xff0c 在人们心目中产生一种潜在的说服力 xff0c 从而把组织意志变为人们自觉的行
  • linux 设备驱动开发基本概念

    任何一个计算机系统的运转都是系统中软硬件共同努力的结果 xff0c 没有硬件的软件是空中楼阁 xff0c 而没有软件的硬件则只是一堆废铁 硬件是底层基础 xff0c 是所有软件得以运行的平台 xff0c 代码最终会落实为硬件上的组合逻辑与时