当前位置: 首页 > news >正文

【嵌入式Linux系统开发】——系统移植概述

 

在这里插入图片描述

目录

🍉🍉一、什么是嵌入式系统

🍉🍉二、嵌入式系统操作

🍉🍉三、嵌入式Linux的特点

🍉🍉四、嵌入式系统的组成

1、硬件和软件

 2、硬件层

3、中间层

4、软件层

5、 功能层与执行装置

🍉🍉五、 Linux内核目录结构


一、什么是嵌入式系统

  •  嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
  • 嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。
  • 嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序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 级别头文件。

 

相关文章:

【嵌入式Linux系统开发】——系统移植概述

目录 🍉🍉一、什么是嵌入式系统 🍉🍉二、嵌入式系统操作 🍉🍉三、嵌入式Linux的特点 🍉🍉四、嵌入式系统的组成 1、硬件和软件 2、硬件层 3、中间层 4、软件层 5、 功能层与执…...

升讯威在线客服系统是如何实现对 IE8 完全完美支持的(怎样从 WebSocket 降级到 Http)【干货】

简介 升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。 完整私有化包下载地址 💾 https://kf.shengxunwei.com/freesite.zip 当前版本信息 发布…...

用VMware给运行在VMware上的CentOS7生成一个以SSH方式连接VMware上的CentOS7的运行在Windows上的命令行窗口

2023年7月27日,周四早上 目录 一个发现生成方法如果上面的方法连接失败,就采取这个方法 一个发现 今天早上无意间发现VMware可以生成一个以SSH方式连接着CentOS7的Windows命令行窗口, 这样做可以带来一定的便利性 : 方便复制、…...

C语言基础-3

1、函数 函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成。这就是程序设计的基本分化方法。 main:C语言中所谓的主函数,主函数就是一种特别的函数。特别之处在于…...

Python 编程规范进阶(1) | 命名规范

养成良好的开发、编程习惯 跟着google开源项目走 https://github.com/google/styleguide 近期Target: 命名规范; Pythonic 积累 按照需求写需要的API; 写前先动脑子,比如画流程图,测试接口; Google 推荐的P…...

算法----二叉搜索树中第K小的元素

题目 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出&#xff…...

阿里Java开发手册~安全规约

1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明: 防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。 2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进…...

消息中间件RabbitMQ——学习笔记

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

爬虫005_python类型转换_其他类型转换为整型_转换为Float类型_转换为字符串_转换为布尔值---python工作笔记023

首先来看,字符串转换成int 很简单 float转换成int 会把小数点后面的内容丢掉 boolean转换为int true是1 false 是0 然后字符串转换为int,要注意 不能有特殊字符比如1.23 中有点 就报错 上面字符串12ab,有ab也报错 看上面...

SpringBoot复习:(5)使用PropertySource注解

一、自定义的一个配置文件 age33 nameliu二、实体类 package com.example.demo.domain;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {retur…...

webrtc 支持H265(三) 总结

文章目录 web端的解码及渲染的实现应用场景单向视频流的场景datachannel通道的稳定性解码性能 双向视频流的场景有音频流的场景 web端的解码及渲染的实现 在前面的文章中介绍了ZLMediaKit的修改方法,在web端的播放器可以参照这个实现,基于wasm H265播放…...

Windows使用Notepad++编辑Linux服务器的文件

🚀 Windows使用Notepad编辑Linux服务器的文件 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介…...

升级你的数据采集引擎 使用多线程与代理池提升HTTP代理爬虫性能

在信息爆炸的时代,海量数据的采集和分析成为了企业发展和决策的关键。本文将分享如何通过多线程和代理池的应用,助您升级数据采集引擎,提高数据获取效率和稳定性。 HTTP代理爬虫作为数据采集的重要工具,其性能直接影响着数据采集…...

flask实现一个登录界面

flask实现一个登录界面 基础的Flask项目结构 forms.py:定义登录表单和表单字段的文件。templates/login.html:用于渲染登录表单的 HTML 模板文件。routes.py:定义应用的路由和视图函数的文件。__init__.py:创建并初始化 Flask 应…...

redis的四种模式优缺点

redis简介 Redis是一个完全开源的内存数据结构存储工具,它支持多种数据结构,以及多种功能。Redis还提供了持久化功能,可以将数据存储到磁盘上,以便在重启后恢复数据。由于其高性能、可靠性和灵活性,Redis被广泛应用于…...

maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法

1,maven本地仓库地址修改 maven在使用过程中,本地项目仓库其空间占用会越来越大,但是其默认仓库位置往往是以C盘为主,C盘作为系统盘常常会遇到所在盘空间占满的情况,所以我们将其改至其他硬盘空间位置为适合做法&#…...

Jenkins集成SonarQube保姆级教程

Jenkins是自动化部署平台,一个粗眉大眼的糙汉子! SonarQube是代码扫描平台,一个眉目清秀的小女子! 有一天,上天交给我一个任务,去撮合撮合他们! 我抬头看了看天, 不,…...

Git的安装以及本地仓库的创建和配置

文章目录 1.Git简介2.安装Git2.1在Centos上安装git2.2 在ubuntu上安装git 3.创建本地仓库4.配置本地仓库 1.Git简介 Git是一个分布式版本控制系统,用于跟踪和管理文件的更改。它可以记录和存储代码的所有历史版本,并可以方便地进行分支管理、合并代码和协…...

现在运动耳机什么牌子的好用、最好的运动耳机推荐

对于注重身体健康的小伙伴来说,每周必然都少不了有规律的运动,而运动的时候耳边没有音乐的陪伴总是稍显枯燥无味,很难让人提起干劲来。有些小伙伴觉得运动的时候戴着耳机,稍微跳动几下耳机就开始松动,随时都要分心提防…...

监控指标与监控类型

监控体系中最基础的是监控指标,监控系统就是围绕指标的采集、传输、存储、分析、可视化的一个系统。 监控指标是指数值类型的监控数据,比如某个机器的内存利用率,某个 MySQL 实例的当前连接数,某个 Redis 的最大内存上限等等。不…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...