嵌入式系统是什么?Linux应用开发是开发什么的?

news2024/11/26 0:56:57

第一篇:

原文链接:https://www.zhihu.com/question/464205608/answer/3358027187
 

一、什么是嵌入式系统

  • 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
  • 嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。
  • 嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序4个部分。嵌入式领域已经有丰富的软硬件资源可以选择,涵盖了通信、网络、工业控制、消费电子、汽车电子等各种行业。

二、嵌入式系统操作

嵌入式操作系统的一个重要特性是实时性。所谓实时性,就是在确定的时间范围内响应某个事件的特性。

著名的嵌入式操作系统有:VxWorks、Linux和Windows CE等。

三、嵌入式Linux的特点

1、Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。

2、强大的网络支持功能。Linux诞生于因特网时代并具有Unix的特性,保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。

3、Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。Linux也符合IEEE POSIX1标准,使应用程序具有较好的可移植性。

传统的嵌入式开发的程序调试和调试工具是用在线仿真器(ICE)实现的。它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试。

4、Linux具有广泛的硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器Linux都能运行。这意味着嵌入式Linux将具有更广泛的应用前景

四、嵌入式系统的组成

1、硬件和软件

①硬件:嵌入式处理器、存储系统、(由IO连接)外设、时钟、复位、电源。

三大件全部集成:嵌入式微控制器(单片机);

三大件部分集成:嵌入式微处理器、IO集成在一个芯片内部,存储外置

②软件:嵌入式操作系统(可裁剪移植的、定制开发)、应用软件(专用性、固化)

嵌入式系统通常由嵌入式处理器、外围设备、嵌入式操作系统和应用软件等几大部分组成。

2、硬件层

硬件层由嵌入式处理器、存储器系统、通用设备接口和I/O接口(如A/D、D/A、I/O等)组成。在一片嵌入式微处理器基础上增加电源电路、时钟电路和存储器电路(ROM和SDRAM等),就构成了七个嵌入式核心控制模块。其中,操作系统和应用程序都可以固化在ROM中。

3、中间层

中间层也称为硬件抽象层或板极支持包,它把系统软件与底层硬件部分隔离。板极支持包对上具有操作系统相关性,对下具有硬件相关性。设计一个完整的中间层需要完成两部分工作:
① 嵌入式系统的初始化,它包括片级初始化、板级初始化和系统级初始化。
② 设计硬件相关的设备驱动

4、软件层

软件层由多任务操作系统(OS)、文件系统、图形用户接口(GUI)、网络系统及通用组件模块组成。OS是嵌入式应用软件的基础和开发平台;是一段嵌入式目标代码中的程序,系统复位后首先执行,相当于用户的主程序,用户的其他应用程序都建立在OS之上;是一个标准的内核,它将CPU时钟、中断、I/O、定时器等资源都封装起来,留给用户的是一个标准的API函数接口。

5、 功能层与执行装置

功能层由基于OS开发的应用程序组成,用来完成对被控对象的控制功能。功能层是面向被控制对象和用户的,为方便用户操作,往往需要提供一个友好的人机界面。执行装置是指那些可以接受嵌入式计算机系统发出控制命令,执行所规定的操作或任务的设备和装置。在不同应用领域中,嵌入式系统的执行装置一般是不同的,应该根据具体的应用场合和系统所要求实现的功能选择不同的设备和执行装置。

五、 Linux内核目录结构

  • arch :包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips 等。Linux 内核目前已经支持30 种左右的体系结构。在arch目录下,存放的是各个平台以及各个平台的芯片对Linux 内核进程调度、内存管理、中断等的支持,以及每个具体的SoC 和电路板的板级支持代码。
  • block:块设备驱动程序I/O 调度。
  • crypto:常用加密和散列算法(如AES、SHA 等),还有一些压缩和CRC 校验算法。
  • documentation:内核各部分的通用解释和注释。
  • drivers :设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c 等。
  • fs:所支持的各种文件系统,如EXT、FAT、NTFS、JFFS2 等。
  • include:头文件,与系统相关的头文件放置在include/linux 子目录下。
  • init:内核初始化代码。著名的start_kernel() 就位于init/main.c 文件中。
  • ipc:进程间通信的代码。
  • kernel :内核最核心的部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel 目录下。
  • lib:库文件代码。
  • mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm 目录下。
  • net:网络相关代码,实现各种常见的网络协议。
  • scripts:用于配置内核的脚本文件。
  • security:主要是一个SELinux 的模块。
  • sound:ALSA、OSS 音频设备的驱动核心代码和常用设备驱动。
  • usr:实现用于打包和压缩的cpio 等。
  • include:内核API 级别头文件。

第二篇


原文链接:https://www.zhihu.com/question/464205608/answer/2336725208
 

linux开发一般是3个部分,最底层的是PCB绘制,也就是纯硬件,往上一点是驱动开发,最上层是应用开发。

首先你需要明白,“我只能做嵌入式Linux应用开发”本身就是错误的,你可以有很多的选择,因为嵌入式涉及的面积很广阔,你没办法只了解其中一部分,正如我上面所说一样,至少这3部分你都需要明白,然后去专精某一部分。

嵌入式应用开发,应当包含两部分,底层一点是linux驱动开发,比如公司有一块板子,设计成一半ARM,一半FPGA,那么你负责ARM这一块的开发的时候大多是底层性质的,你需要根据硬件来设计相应的驱动程序。驱动开发不仅仅需要C/C++的功底(尤其是C,还要一点汇编),还要学习linux内核的知识,以及uboot等等(所以计算机原理和操作系统这两门课很重要),你需要从一块没有任何东西的开发版中引导Linux,然后把自己写好的驱动程序加载进内核,保证整个系统的稳定运行。你写的东西最终会被上层的其他开发者调用,比如公司有一块CAN通信的板子,那么你就需要根据需求让linux识别这块板子,并且按照想要的功能留出API,以供上层调用。

另一部分就是应用层开发,应用层开发大多是C++。你需要调用驱动程序开放的接口来实现整个项目的功能,比如上面的CAN驱动已经有人写好了(大多是情况下是你写的,没错,只有公司很大或者项目很大的时候这二者是分开的,大部分都是你自己来写),需要没过10s发送一次数据,那么你就需要写一个定时器,让他10s调用一次CAN发送的接口,然后把数据发送出去,更甚至基本都是UI开发,用QT写一个上位机,然后调用接口。

最后,给你举个例子,我们做过一个温度测量的系统,需要嵌入在一个控制室里边,难度不是很大,首先需要一个ARM的芯片,身为驱动开发工程师,你需要在这块芯片上装一个linux,然后写好系统引导程序,保证开机成功引导系统,接着你需要写一个SPI驱动,让这个芯片能够以SPI通信的方式读取到温度传感器的数据。然后,应用层的开发工程师要写一个QT上位机,一大堆功能,其中一个就是调用SPI接口获取数据,然后呈现出来,最后什么数据导出了,绘图什么的。但是很遗憾,这些工作都是我一个人来干,就很离谱。这里边还有一些东西,比如开机之后,是不加载比如ubuntu那个界面的,是直接打开写好的QT上位机的界面。

所以就是说,不要认为linux应用开发是分离的,大部分情况下都需要一个人干,这点我也比较能理解,两人开发就API接口的对接来说肯定不如一个人写简单。而且,嵌入式本身就大杂烩,哪一点你都不能完全不知道。

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

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

相关文章

比较 2 名无人机驾驶员:借助分析飞得更高

近年来,越来越多的政府和执法机构使用无人机从空中鸟瞰。为了高效执行任务,无人机必须能够快速机动到预定目标。快速机动使它们能够在复杂的环境中航行,并高效地完成任务。成为认证的无人机驾驶员的要求因国家/地区而异,但都要求您…

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说,将单机版软件转变…

易经智慧解码数字化转型:象数理视角下的未来探索

在数字化浪潮席卷全球的今天,我们不禁思考:国学《易经》的智慧如何与现代的数字化转型相结合,为我们提供独特的洞见和启示?今天我们从易经的象、数、理三个层面,浅析数字化转型的内在逻辑和发展趋势。 象:数…

Python打发无聊时光:14.用PyQt创建一个简易的串口调试助手

第一步:装pyqt5和pyserial库 pip install pyqt5 pyserial 第二步:完整代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QComboBox, \QGridLayout, QLineEdit, QTextEdit from P…

酷开科技以酷开系统为媒介,打造欢乐生活场景

家人相聚在一起的时光总是那么美好,在欢聚的日子里,我们也总是希望能够让时间变得慢一点,再慢一点,但是随着春节假期的结束,很多人已经开始了新一年的忙碌,大家纷纷回到工作、学习岗位,回归之前…

Java面试题【必知必会】Mybatis常见面试题(2024)

近期一直在准备面试,所以为了巩固知识,也为了梳理,整理了一些java的基础面试题!同时也希望各位英雄和女侠能够补充!不胜荣幸!!! 1.MyBatis是什么?他的优缺点?…

第八篇 - 预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

快递通cps小程序源码

源码介绍: 快递代发快递代寄寄件小程序可以对接易达云洋一级总代快递小程序,接入云洋/易达物流接口,支持选择快递公司,三通一达,极兔,德邦等,功能成熟 如何收益: 1.对接第三方平台成本大约4元…

HTML表单标签,web前端开发新技术

1、ant-design的使用总结及常用组件和他们的基本用法? ant-design为React,Angular和Vue都提供了组件,同时为PC和移动端提供了常用的基础组件。ant-design提供的demo非常的丰富并且样式能够基本的覆盖开发需求。antd的Demo因为是多人编写的,…

从零学习Linux操作系统 第三十二部分 ansible中剧本的应用

一、什么是playbook及playbook的组成 1.Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 play就是一个个模块用列表的方式体现出来 playbook的语法是用YAML的预防进行书写的 2.YAML 简介 是一种表达资料序列的格式,类似XM…

Maven对项目构建过程中的每个步骤的详细介绍

1. 概述 Maven除了管理项目的依赖以外,还能对项目的构建过程进行管理。除了使用命令行以外,我们平时经常用IDEA图形化界面进行操作,如图所示: 本文将详细描述Maven对项目构建过程中的每一个阶段。 2. 构建过程 注意&#xff1…

183基于matlab的非线性调频模态分解(VNCMD)

基于matlab的非线性调频模态分解(VNCMD),一种基于变分方法的信号分解技术,它将信号分解为多个模式。能够处理非线性调频信号,且对噪声具有较好的鲁棒性。VNCMD的基本原理是通过最小化信号与模式之间的差异来实现信号的分解。程序已调通&#…

YOLOV9论文解读

代码:https://github.com/WongKinYiu/yolov9论文:https://arxiv.org/abs/2402.1361本文提出可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN),最终铸成YOLOv9目标检测全新工作!性能表现SOTA!在各个方…

云计算 3月5号 (DNS域名解析及部署)

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。…

Flutter图片内存占用过大问题

图片(Image)加载原理: Image : 显示图⽚的Widget,通过ImageState管理ImageProvider的⽣命周期。 ImageProvider: 图⽚的抽象概念。 根据Image创建实例时调用的工厂方法的不同(Image.network或者Image.assetImage&#…

设计模式:代理模式 ⑦

一、核心思想 调用方 --> 代理 ---> 目标对象 代理是调用真实目标对象的一层中间层,如果需要进行 ①、屏蔽复杂对象的创建过程,让上层调用友好感知,并起到隐藏保护的目的。 ②、一定的方法扩展增强 ③、或者在对目标对象调用…

2024.03.05作业

select实现tcp并发服务器 #include "test.h"#define SER_IP "192.168.42.106" #define SER_PORT 8888int create_socket() {int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd -1){perror("socket error");exit(-1);}printf("sfd %d\n&q…

如何使用Python操作MySQL的各种功能?高级用法?

当今互联网时代,数据处理已经成为了一个非常重要的任务。而MySQL作为一款开源的关系型数据库,被广泛应用于各种场景。本篇博客将介绍如何使用Python操作MySQL的各种功能,以及一些高级用法。 连接MySQL 在Python中,我们可以使用p…

《操作系统真相还原》读书笔记二:环境搭建 xshell连接virtualbox

修改 sshd_config 使用 vi /etc/ssh/sshd_config命令进入sshd服务配置,键盘输入i进行编辑,将监听端口、监听地址前的 # 号去除,开启允许远程登录,开启使用用户名密码来作为连接验证。修改完成,按一下Esc,输…

汽车级瞬态抑制TVS二极管优势特性及型号大全

汽车级瞬态抑制TVS二极管是一种高性能的防浪涌过电压电路保护元器件,能够在瞬态电压过高的情况下提供可靠的保护。它能够迅速响应并吸收过电压,将其导向地线,从而保护车辆的电子设备免受损坏。东沃汽车级TVS二极管具有以下几个关键优势&#…