对嵌入式驱动的理解

news/2024/11/18 2:27:03/

一,裸机编程或单片机开发

裸机编程,顾名思义,就是直接在硬件上编程写代码,或者说编写直接在硬件上运行的程序,没有操作系统的支持。一般我们把没有操作系统的编程环境,称为裸机编程环境,比如在单片机上编程。通过串口直接将程序下载到单片机芯片内部的 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系统可以跑到不同的硬件上面如PC机或者arm开发板上面。如果linux操作系统跑到 PC 机上,那么驱动就要适配 PC 机; 如果 linux 操作系统跑到 arm 开发板上面,那么驱动就要适配arm开发板;所以说不同的硬件架构都可以跑linux,但是它的驱动程序是不同的,那么linux 操作系统源码都是一样的,唯一不一样的就是驱动程序了。同一个操作系统可以跑到不同的硬件上面,但是驱动程序是有差异的,因为驱动程序是操作系统和硬件连接的一个桥梁。

三 ,植系统移植linux驱动移植

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

 四,应用软件

在操作系统上面有应用软件,应用软件程序的执行是依赖于操作系统的,应用程序需要调用 linux 操作系统的库函数来实现,也就是说,应用软件的程序会调用 linux 操作系统的函数来完成对硬件的操作,那么应用程序是不能对硬件直接进行操作的。

五, linux系统架构优点

linux系统开发架构和我们裸机的架构是不同的,架构相比于裸机架构是非常复杂了,使用这个架构都有什么好处呢?

1,有了系统的架构后,开发起来就非常容易了,因为它有自己的框架,这种框架都是非常成熟的框架,我们直接按照框架开发就可以了,框架给我们提供了很多现成的功能。

2,这个框架让我们的系统变得更加安全,因为我们的应用软件不能直接对硬件进行操作,它要借助操作系统来对硬件进行操作。如果应用软件有好几个,假如其中的一个应用软件奔溃了,它不会影响我们整个系统的运行,不会造成系统的死机,这样就会让系统更加安全,出问题的概率变得更小了。

六,linux设备驱动分类及特点

        计算机系统的硬件主要由CPU、存储器和外设组成。随着IC制作工艺的发展,目前,芯片的集成度越来越高,往往在CPU内部就集成了存储器和外设适配器。譬如,相当多的ARM、PowerPC、MIPS 等处理器都集成了UART、I2C控制器、SPI控制器、USB控制器、SDRAM控制器等,有的处理器还集成了GPU(图形处理器)、视频编解码器等。驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设,而不是针对CPU内核。linux将存储器和外设分为 3 个基础大类:字符设备驱动,块设备驱动,网络设备驱动。
        其中,理解和掌握字符设备驱动的概念最重要,因为在后续工作中我们遇到的大部分是字符设备。为什么会这么说呢?比如说我们选了一个CPU,不管它是哪个厂家的,比如它是三星的或者恩智浦的或者TI (德州仪器),都会给你提供一个BSP包,在这个开发包里面,像块设备驱动和网络设备驱动已经做好了,我们要做的事情是配置一下就可以用了。平常开发的时候用的最多的就是字符设备驱动,我们掌握了字符设备的开发,那么我们开发产品基本上就没有什么问题了。
        字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。块设备可以按任意顺序进行访问,以块为单位进行操作,如硬盘、EMMC等。字符设备和块设备的驱动设计有出很大的差异,但是对于用户而言,它们都要使用文件系统的操作接口open()、close()、read()、write()等进行访问。网络设备主要有哪些呢?从字面意思可以看出,和网络相关的都是网络设备,比如 WiFi,以太网。在 linux 系统中,网络设备面向数据包的接收和发送而设计,它并不倾向于对应于文件系统的节点。内核与网络设备的通信与内核和字符设备、网络设备的通信方式完全不同,网络设备主要还是使用套接字接口。


http://www.ppmy.cn/news/998297.html

相关文章

从 DejaVu 改为 Noto,Ubuntu 23.10 发行版计划调整字体包

近日消息,代号为“Mantic Minotaur”的 Ubuntu 23.10 发行版计划调整字体包,从 DejaVu 修改为 Noto。 近日消息,代号为“Mantic Minotaur”的 Ubuntu 23.10 发行版计划调整字体包,从 DejaVu 修改为 Noto。 Ubuntu 开发团队表示为…

React Hooks 中的 useEffect(副作用)

useEffect 是什么? useEffect 是一个 React Hook,它允许你将组件与外部系统同步 当我们在 React 中使用 useEffect 这个 Hook 时,实际上是在告诉 React 在特定情况下执行我们定义的副作用函数。这种副作用函数可以处理一些与组件渲染结果无关…

新闻标题文本分类任务

目录 知识回顾使用debug调试 知识回顾 预处理内容 文本主要进行清洗、分词/分字 ID替换(不希望计算机看到文字,而是ID),通过语料表来表示,根据频率高低来分配ID号 文本的ID映射到文本的一个特征向量,进行词嵌入(Embedding)&…

如何能够高效实现表格中的分权限编辑功能

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 在表格类填报需求中,根据当前登录用户的不同等级,能填报的区域会…

企业电子招投标采购系统源码之电子招投标的组成 tbms

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&…

YOLOv8-pose姿态模型笔记1

YOLOv8-pose关键点模型输出,每个框输出51个信息,即17个关键点以及每个关键点的得分 COCO的annotation一共有17个关节点。 分别是:“nose”,“left_eye”, “right_eye”,“left_ear”, “right_ear”,“left_shoulder”, “right_shoulder”…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

lc1074.元素和为目标值的子矩阵数量

创建二维前缀和数组 两个for循环,外循环表示子矩阵的左上角(x1,y1),内循环表示子矩阵的右下角(x2,y2) 两个for循环遍历,计算子矩阵的元素总和 四个变量,暴力破解的时间复杂度为O(…