嵌入式底层系统了解

news2024/12/23 21:29:17

当裸机功能不复杂的时候,即类似与点亮一个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.coloradmin.cn/o/1894134.html

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

相关文章

代码随想录算法训练营第2天|LeetCode977,209,59

977.有序数组平方 题目链接: 977. 有序数组的平方 - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解: 双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili 第一想法 暴力算法肯定是先将元素…

docker的安装与基本使用

一.docker的安装卸载 1.先安装所需软件包 yum install -y yum-utils2.设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.安装DOCKER CE yum -y install docker-ce docker-ce-cli containerd.io 4.验…

【unity实战】使用Unity实现动作游戏的攻击 连击 轻重攻击和打击感

最终效果 文章目录 最终效果前言素材下载:玩家移动跳跃控制攻击动画配置轻攻击重攻击 攻击时禁止移动和攻击移动补偿敌人击退和播放受击动画受击特效攻击停顿和屏幕震动局部顿帧(补充)参考源码完结 前言 注意本文为自己的学习记录笔记&#…

微机原理 选择题

D C MOV、PUSH、POP、XLAT(查表)、IN、OUT不影响标志位 D B D C D C D B 1. (单选题, 5分)8位无符号数(字节)表示的数值范围是( ), 16位无符号数(字)表示的数值范围是( )。 A. 0~128 0~32768B. 0~255 0~655…

Websocket通信实战项目(js)(图片互传应用)(下)客户端H5+css+js实现

Rqtz : 个人主页 ​ 共享IT之美,共创机器未来 Sharing the Beauty of IT and Creating the Future of Machines Together 目录 起始 客户端GUI Javascripts连接websocket 使用localStorage保存用户输入的IP Websocket连接成功 Websocket接收数据 解析…

51-5 权限维持2 - 影子账号(隐藏用户)

权限维持技术 权限维持技术(Persistence,也称为权限持久化)是一种能够在系统重启、用户更改密码或其他可能导致访问中断的情况下保持对系统访问的技术。例如,它包括创建系统服务、利用计划任务、修改系统启动项或注册表、以及映像劫持等方法。 创建影子账户 影子账户是指隐…

Labview_Workers5.0 学习笔记

1.Local Request 个人理解该类型的请求针对自身的,由EHL或者MHL到该vi的MHL中。 使用快速放置快捷键"Ctrl9"创建方法如下: 创建后的API接口命名均为rql开头,并且在所选main.vi中的MHL创建对应的条件分支。 此时使用该API函数就…

【计算机毕业设计】026基于微信小程序的原创音乐

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

行业模板|DataEase旅游行业大屏模板推荐

DataEase开源数据可视化分析工具于2022年6月发布模板市场(https://templates-de.fit2cloud.com),并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板,方便用户根据…

SpringBoot 启动流程二

SpringBoot启动流程二 我们首先查看构造方法 SpringApplication 我们发现这个构造方法还是在SpringApplication类里面 这个构造方法还是调用了自身的构造方法 传入了两个参数 第一个参数叫resourceLoader 传入的是一个资源加载器 要从外部读入东西 这个方法通过this关键字…

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

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

【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)

文章目录 一、网络时间协议(NTP)二、使用网络时间协议(NTP)2.1 使用系统提供的 NTP 服务器2.2 使用TrueTime2.2.1 引入TrueTime库2.2.2 初始化 TrueTime2.2.3 用法2.2.4 使用 TrueTime 获取时间2.2.4 自动更新时间2.2.5 注意事项二. 使用 HTTP 请求获取服务器时间2.1. 发送…

技术探索:利用Python库wxauto实现Windows微信客户端的全面自动化管理

项目地址:github-wxauto 点击即可访问 项目官网:wxauto 点击即可访问 😂什么是wxauto? wxauto 是作者在2020年开发的一个基于 UIAutomation 的开源 Python 微信自动化库,最初只是一个简单的脚本,只能获取消息和发送…

同方威视受邀盛装亮相2024长三角快递物流展(杭州)助力行业物畅其流

同方威视技术股份有限公司携安全检测产品和综合解决方案,盛装亮相2024长三角快递物流展(杭州) 展位号:3C馆A07-1 时间:2024年7月8-10日 地址:杭州国际博览中心(浙江省杭州市萧山区奔竞大道35…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合,这是针对交换机的技术 前言 不知道大家有没有注意到,我们之前的实验在交换机与交换机之间只用一条线连接,像这样 通过今天的学习,我们要用两条线来连接交换机,就像这样(为了能…

球形气膜:现代娱乐场馆的最佳选择—轻空间

随着科技的发展和人们对高品质生活的追求,娱乐场馆的建设迎来了新的变革。球形气膜结构凭借其独特的优势,逐渐成为现代娱乐场馆建设的最佳选择。轻空间将介绍球形气膜的优势,并探讨其在不同应用场景中的广泛应用。 球形气膜的优势 1. 独特的建…

Kotlin和Java的一些不同点

1.Kotlin 的变量是没有默认值的(因此要求初始化),Java的成员变量是有默认值的 Java的成员变量: String name; // 默认值是 null int count; // 默认值是 0不过其实 Java 也只是成员变量有默认值,局部变量也是没有默…

以品质为初心,以创新为驱动,光明乳业闪耀第十五届中国奶业大会

2024年7月3日,以“数智赋能引领产业发展增长点,科技创新驱动奶业新质生产力”为主题的中国奶业协会第十五届奶业大会奶业20强(D20)论坛暨2024中国奶业展览会隆重召开,光明乳业党委书记、董事长黄黎明受邀出席会议&…

Linux 压测工具---ab

安装 yum -y install httpd-tools 本文用于压测k8s集群内pod,k8s集群master可直接测试pod ip 命令: ab -n 10000 -c 100 http://10.42.8.212/ 其中,-n表示请求数,-c表示并发数,ip必须有”/“,表示此目录…

如何清理电脑内存?让电脑运行如飞!

电脑内存(RAM)的清理对于维持系统的流畅运行至关重要。随着使用时间的增加,系统内存会被各种应用程序和后台进程占用,导致系统响应变慢,甚至出现卡顿现象。通过有效地清理内存,可以提升电脑的性能&#xff…