嵌入式底层系统了解

当裸机功能不复杂的时候,即类似与点亮一个LED灯,驱动LCD和OLED这样的模块,以及各位大学生的搭积木式的毕业设计(狗头保命),此时可以简单地分为硬件和软件层(应用层),以及以中间层作为中间联系。

当需要实现更复杂的功能式,操作系统(OS)就显得非常必要了 。

没有操作系统:

  1. 功能有限:通常只能执行特定的、单一的任务,无法同时运行多个程序。例如,一个简单的单片机系统可能只用于控制一个特定的设备,如电子钟。
  2. 资源利用效率低:对硬件资源的管理较为简单粗糙,可能导致资源浪费或冲突。没有有效的内存管理机制,可能会出现内存泄漏等问题。
  3. 用户交互性差:缺乏友好的用户交互方式,操作相对复杂和困难。可能需要通过复杂的硬件开关或特定的编程指令来控制。
  4. 软件开发困难:没有统一的开发标准和接口,软件开发需要针对特定的硬件进行,难度较大。每次开发新的功能都需要从底层开始考虑硬件特性。
  5. 安全性和稳定性差:难以保障系统的安全性和稳定性,容易受到外部干扰和错误的影响。缺乏对病毒、恶意软件的防护机制。

有操作系统:

  1. 资源管理:能够有效地管理计算机的硬件资源,如内存、CPU 时间、磁盘空间、输入输出设备等,使得多个程序可以同时运行而不会相互干扰,资源分配更加合理和高效。例如,在多任务操作系统中,可以同时运行多个应用程序,如一边播放音乐一边编辑文档。
  2. 用户接口:提供了友好的用户界面,包括图形用户界面(GUI)和命令行界面(CLI),使用户能够方便地与计算机进行交互。像 Windows 和 macOS 这样的操作系统具有直观的图形界面,用户可以通过点击图标和菜单来执行操作。
  3. 软件支持:为各种应用软件提供了统一的运行环境和接口标准,使得软件的开发和安装更加便捷。大多数软件都是针对特定操作系统进行开发和优化的,如 Windows 上的 Office 套件。
  4. 安全性和稳定性:具备一定的安全机制来保护系统和用户数据,同时能够处理错误和异常情况,提高系统的稳定性。操作系统可以进行用户认证、权限管理,并自动处理一些软件崩溃的情况。
  5. 网络支持:集成了网络功能,方便计算机之间的通信和资源共享。可以轻松地连接到网络,进行文件共享、远程访问等操作。

步骤:

在 Linux 系统移植过程中,交叉编译环境是指在一个平台(通常是主机,如 x86 架构的 PC)上生成能够在另一个不同架构的平台(目标平台,如 ARM、MIPS 等)上运行的代码的编译环境。

交叉编译环境主要由以下几个部分组成:

  1. 交叉编译器:这是交叉编译环境的核心组件。它能够将针对一种架构编写的源代码编译为另一种架构的可执行代码。例如,将在 x86 架构上编写的 C 或 C++ 代码编译为 ARM 架构可执行的二进制文件。
  2. 相关的库和头文件:目标平台所需的各种库文件和头文件,以便在编译过程中正确链接和引用。
  3. 工具链:除了编译器,还可能包括链接器、汇编器、调试器等一系列工具,共同构成完整的工具链,支持整个编译、链接和调试过程。

使用交叉编译环境的主要原因是目标平台的资源有限(如计算能力、存储等),或者目标平台可能还不具备完整的开发环境,无法直接在上面进行编译。

例如,如果要将 Linux 系统移植到一个基于 ARM 架构的嵌入式设备上,就需要在 x86 架构的 PC 上建立一个交叉编译环境,将 Linux 内核及相关应用程序编译为适合 ARM 架构运行的代码。

在实际操作中,搭建交叉编译环境可能需要下载和安装特定的工具包,并进行一些配置,以确保编译器和工具链能够正确地针对目标平台进行工作。

bootloader的选择和移植:

  • 初始化硬件:Bootloader 是在操作系统内核运行之前运行的一段小程序,可以初始化硬件设备,为内核的运行准备好软硬件环境。
  • 建立内存空间映射图:Bootloader 可以建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。内存空间映射图是一种描述内存物理地址与逻辑地址之间对应关系的图表或数据结构。通过建立这个映射图,Bootloader 能够清晰地了解系统内存的布局和可用空间情况。 Bootloader 可以根据硬件的特性和需求,对内存进行初始化和配置,例如设置内存的读写权限、缓存策略等,从而为后续操作系统内核的运行提供一个稳定和可靠的内存环境。
  • 加载内核:Bootloader 可以将内核加载到内存 RAM 中去运行,没有 Bootloader,系统无法运行。
  • 支持多种处理器架构:不同的处理器架构需要不同的 Bootloader,选择和移植适合目标平台的 Bootloader 可以确保系统能够正常启动和运行。
  • 提供调试接口:Bootloader 通常提供一些调试接口,方便开发人员进行调试和测试。例如单片机学习中熟悉的串口、JTAG,还有网络接口(TCP/IP)等。

Kernel:

配置(Configuration)
这一步是根据目标硬件平台的特性和需求,对 Linux 内核进行定制化设置。例如,选择支持的硬件设备驱动、文件系统类型、内核模块、网络协议等。配置过程通常通过修改内核的配置文件(如 .config)或使用图形化的配置工具来完成。

编译(Compilation)
在完成配置后,使用相应的交叉编译工具链将内核源代码编译成可在目标平台上运行的二进制文件。编译过程会将选择的内核模块和功能编译到最终的内核映像中。

移植(Porting)
将编译生成的内核映像和相关的模块文件部署到目标硬件平台上。这可能涉及将内核映像烧录到存储设备(如闪存)中,或者通过其他方式加载到目标系统的内存中。

调试(Debugging)
在移植后,对内核在目标平台上的运行情况进行监测和调试,以确保其正常工作。调试可能包括查看内核的启动日志、处理内核崩溃或异常、优化性能、解决设备驱动的兼容性问题等。可以使用调试工具(如 JTAG 调试器、串口输出等)来获取调试信息。

例如,假设要将 Linux 内核移植到一个基于特定型号 ARM 处理器的开发板上。首先,根据开发板的硬件配置,如处理器型号、内存大小、存储设备、网络芯片等,进行内核配置,选择对应的驱动和功能。然后,使用针对 ARM 架构的交叉编译工具链进行编译。接着,将生成的内核映像通过烧写工具烧录到开发板的闪存中。最后,在开发板上电启动后,通过串口查看内核的启动信息,检查是否能正确识别硬件设备,处理可能出现的错误,如驱动加载失败、内存分配异常等,以完成整个调试过程。

根文件系统的制作:

在 Linux 移植中,根文件系统的制作指的是创建一个包含了 Linux 系统启动和运行所需的基本文件和目录结构的文件系统。

根文件系统是 Linux 系统的基础,它包含了系统启动时必需的文件和目录,例如:

  1. 基本的命令和工具,如 bash 外壳程序、lscat 等命令。
  2. 系统配置文件,如 /etc/passwd(用户信息)、/etc/fstab(文件系统挂载配置)等。
  3. 设备文件,例如 /dev 目录下的各种设备节点。
  4. 初始化脚本和服务配置文件,用于系统启动时的初始化和服务管理。
  5. 库文件,为应用程序提供必要的函数库支持。

制作根文件系统通常包括以下步骤:

  1. 选择一个基础的文件系统格式,如 ext4jffs2 等。
  2. 创建必要的目录结构,如 /bin/etc/dev/lib 等。
  3. 移植或安装所需的命令和工具。
  4. 配置系统的初始化脚本,如 init 或 systemd 的相关配置。
  5. 可能需要根据目标硬件和应用需求,添加特定的驱动模块或配置文件。

例如,如果要将 Linux 移植到一个嵌入式设备上,可能会制作一个精简的根文件系统,只包含该设备运行所需的最基本的命令和配置,以节省存储空间和提高系统启动速度。

一种电子产品的不同型号可能就需要不同大小的系统,这也是这一行的需求所在。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

【SpringCloud】Ribbon源码解析

ribbon是一个负载均衡组件,它可以将请求分散到多个服务提供者实例中,提高系统的性能和可用性。本章分析ribbon是如何实现负载均衡的 1、LoadBalanced 消费者在引入ribbon组件后,给http客户端添加LoadBalanced注解就可以启用负载均衡功能。Lo…

MATLAB贝叶斯线性回归模型案例

采用辛烷值数据集“spectra_data.mat”(任意数据集均可),介绍贝叶斯线性回归模型的构建和使用流程。 运行结果如下: 训练集预测精度指标如下: 训练集数据的R2为: 1 训练集数据的MAE为: 0.00067884 训练集数据的RMSE为: 0.00088939 测试集预测精度指标如下: 测试集数据的R2…

Python学习之小游戏--坦克大作战

今天跟视频学习了Python实现坦克大作战小游戏,挺有意思的,一起来玩吧~ 按空格发射子弹,上下左右键实现移动,ESC键无限复活。 import pygame,time,random from pygame.sprite import Sprite SCREEN_WIDTH800 SCREEN_HEIGHT500 BG…

如何改善提示词,让 GPT-4 更高效准确地把视频内容整体转换成文章?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 让我们来讨论一下大语言模型应用中的一个重要原则 ——「欲速则不达」。 作为一个自认为懒惰的人,我一直有一个愿望:完成视频制作…

typescript2-类的类型

/* 输出 吃饭 游泳 */ []( )继承与多态------------------------------------------------------------------------1. 子类继承父类特征子类 extends 父类2. 当需要父类参数传递时,用子类也可以,这就是多态/* 继承:子类继承父类 多态…

集团型企业组织架构复杂,业务线多,如何进行高效费用管控?

企业管理中流行这样一句话:“企业转型,财务先行”。对集团型企业而言,当今的发展形势下,通过财务战略全面转型、最终撬动企业价值提升,是一件难而正确的事情。 集团企业具有经营规模大、产业链多、分支机构多、地域跨度…

容器部署rabbitmq集群迁移

1、场景: 因业务需要,要求把rabbitmq-A集群上的数据迁移到rabbitmq-B集群上,rabbitmq的数据包括元数据(RabbitMQ用户、vhost、队列、交换和绑定)和消息数据,而消息数据存储在单独的消息存储库中。 2、迁移要…

中国算力网络市场发展分析

中国算力网络市场发展现状 算力涵盖计算、内存、存储等全方位能力,广泛分布于网络边缘、云计算中心、联网设备及转发节点。随着数字化技术革新,算力与网络正深度融合,推动“算网一体化”的演进。这一新型基础设施日渐凸显其重要性&#xff0c…

番外篇 | YOLOv8改进之即插即用全维度动态卷积ODConv + 更换Neck网络为GFPN

前言:Hello大家好,我是小哥谈。本文所做出的改进是在YOLOv8中引入即插即用全维度动态卷积ODConv和更换Neck网络为GFPN,希望大家学习之后能够有所收获~!🌈 目录 🚀1.基础概念 🚀2.网络结构 🚀3.添加步骤 🚀4.改进方法 🍀🍀步骤1:block.py文件修改…

Kamailio-Web管理页面Siremis的安装与部署

siremis 是针对于 Kamailio 的web管理接口,使用PHP书写,更新至2020年,相对不是太新但是是官方友链的 以下就采用 Ubuntu 22.04Siremis 5.8.0apache http server 2.4php7.0 如有疑问请参看官方指南 以下开始介绍操作步骤 安装apache2.4 we…

一文读懂什么是“GPU算力”

在数字化转型的浪潮中,各行业对算力的需求日益激增,GPU(图形处理单元)算力作为推动科技进步的重要力量,正逐步从传统的图形渲染领域扩展到人工智能、大数据分析、高性能计算等多个前沿领域。通过本文,深入剖…

亮相2024世界人工智能大会,扫描全能王AIGC“黑科技”助力敦煌遗书数字化修复

7月4日,2024年世界人工智能大会(简称“大会”)在上海举行。这次这场科技与创新的盛会上,一张古朴、典雅的卷轴吸引了众人的目光。这张被修复的卷轴脱胎于敦煌遗书系列古籍,在被机器拍摄扫描后,卷轴上脏污、…

Airflow: 大数据调度工具详解

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

SalesForce集成案例-获取联系人信息

SalesForce本身比较复杂,涉及的东西比较多,下面以使用REST API接口为例,介绍与SalesForce集成的过程,集成案例:获取联系人信息。 首先需要注册一个免费的开发者帐号,具有完全操作SalesForce的权限。 1、注…

Echarts中的热力图和漏斗图(在Vue中使用热力图和漏斗图)

热力图 (Heatmap) Echarts的热力图用于展示两个维度数据矩阵中的值分布情况。它通过在平面上划分成多个矩形区域,并用不同的颜色填充这些区域来表示数据的大小或强度。颜色渐变从浅到深通常映射着数值从小到大,从而直观展示数据的集中程度和分布模式。热…

STM32工业自动化控制系统教程

目录 引言环境准备工业自动化控制系统基础代码实现:实现工业自动化控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 控制系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业自动化控制系统利用…

INFINI Console 使用介绍

上次在《INFINI Easysearch尝鲜Hands on》中我们部署了两个节点的Easysearch,并且也设置了Console对集群进行监控。那么今天我们再来介绍下INFINI Console的使用。 INFINI Console 仪表盘功能介绍 INFINI Console 是一个功能强大的数据管理和分析平台,…

JBoss JMXInvokerServlet 反序列化漏洞

漏洞原理: 这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。 影响版本: JBoss Enterprise Application Platform 6…

实时数仓Hologres OLAP场景核心能力介绍

作者:赵红梅 Hologres PD OLAP典型应用场景与痛点 首先介绍典型的OLAP场景以及在这些场景上的核心痛点,OLAP典型应用场景很多,总结有四类:第一类是BI报表分析类,例如BI报表,实时大屏,数据中台等…