Windows 体系对比 + 嵌入式开发全流程拆解

一、操作系统层级对比:Windows 家族 vs Linux 家族

角色Windows 体系Linux 体系本质
核心内核Windows NT KernelLinux Kernel操作系统引擎(管理CPU/内存/硬件)
完整操作系统Windows 11 Home/ProUbuntu / Debian / CentOS内核 + 界面 + 软件 + 驱动
定制化版本Windows IoT Core(用于树莓派)Raspberry Pi OS(原Raspbian)为嵌入式设备裁剪的操作系统

✅ 关键结论

  • Windows/Linux = 内核(如汽车发动机)
  • Windows 11/Ubuntu = 完整操作系统(如整车:发动机+车身+内饰)
  • Windows IoT Core/Raspberry Pi OS = 嵌入式定制系统(如拆掉座椅的赛车)

二、嵌入式Linux开发全流程详解(以树莓派ROS小车为例)

阶段1:开发环境搭建(在你的笔记本电脑上)
  • 为什么用虚拟机?
    你的电脑可能是Windows,但ROS仅支持Linux → 在Windows中运行虚拟机软件(如VirtualBox) → 虚拟机上安装Ubuntu → 获得纯净的Linux开发环境。
  • 操作
     

    BASH

    # 在虚拟机Ubuntu中安装ROS sudo apt install ros-noetic-desktop-full

阶段2:交叉编译(Cross-Compiling)
  • 问题
    你的笔记本是x86 CPU,树莓派是ARM CPU → 编译出的程序不能通用!
  • 解决方案
    在x86电脑上模拟ARM环境,生成ARM可执行文件(这就是交叉编译)。
  • 操作
     

    BASH

    # 在虚拟机中安装ARM交叉编译器 sudo apt install gcc-arm-linux-gnueabihf # 编译ROS节点(示例) catkin_make -DCMAKE_TOOLCHAIN_FILE=/path/to/arm-toolchain.cmake

阶段3:内核裁剪(Kernel Customization)
  • 为什么裁剪?
    树莓派资源有限(内存1-8GB),需移除无用的内核模块(如服务器功能)。
  • 操作(在虚拟机中完成):
     

    BASH

    # 下载树莓派Linux内核源码 git clone --depth=1 https://github.com/raspberrypi/linux # 图形化配置裁剪 make menuconfig # 去掉蓝牙/摄像头等未用模块 # 编译内核 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

阶段4:部署与移植(Deployment & Porting)
  • 部署程序:将交叉编译好的ROS节点复制到树莓派
     

    BASH

    scp ./ros_ws root@raspberrypi:/home/pi

  • 移植内核:将裁剪后的内核刷入树莓派
     

    BASH

    # 将编译的kernel7.img写入树莓派SD卡 cp linux/arch/arm/boot/zImage /boot/sdcard/kernel7.img

阶段5:运行调试(在树莓派上)
  • 树莓派启动裁剪后的Linux内核 → 加载Ubuntu系统 → 运行ROS节点
     

    BASH

    # 在树莓派Ubuntu中启动ROS节点 roslaunch my_robot navigation.launch

  • ROS节点通过Linux内核驱动GPIO → 控制STM32 → 驱动电机

三、关键概念解析

术语本质类比为何需要
交叉编译在A平台编译B平台可执行程序在中国工厂生产销往美国的电器开发机(x86) ≠ 目标机(ARM)
内核裁剪删除Linux内核中无用的功能模块拆掉汽车的后座和空调以减重赛车节省嵌入式设备内存/存储资源
移植让软件适应新硬件平台把iPhone充电口改成USB-C使Linux支持树莓派专用硬件(如博通GPU)

四、完整案例:树莓派ROS小车开发日记

  1. Day1-开发机(Windows笔记本):
    → 打开VirtualBox → 启动Ubuntu虚拟机 → 用VSCode写ROS避障算法
  2. Day2-交叉编译
    → 在虚拟机中调用arm-gcc编译算法 → 生成avoid_obstacle_node(ARM版)
  3. Day3-内核裁剪
    → 移除Linux内核的蓝牙模块 → 编译专属kernel7.img
  4. Day4-部署
    → 将ROS节点和内核镜像拷入树莓派SD卡 → 上电启动
  5. Day5-实机运行
    → 树莓派运行裁剪后的Ubuntu → 执行avoid_obstacle_node → 通过GPIO发送指令给STM32
    → 小车成功避开障碍物!

五、终极总结

  1. 开发机(你的电脑):战场指挥部

    • 运行虚拟机Ubuntu:安全开发环境
    • 执行交叉编译:生产ARM武器
    • 完成内核裁剪:定制轻量级系统
  2. 目标机(树莓派):前线士兵

    • 运行裁剪后的Ubuntu:穿戴精简装备
    • 执行交叉编译的程序:使用指挥部提供的武器
    • 通过Linux内核直接操控硬件:冲锋陷阵
  3. 核心原则

    💡 开发机强⼤且通用(x86),目标机专精且节省(ARM)—— 通过交叉编译和内核裁剪架起桥梁!

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

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

相关文章

C# 实现 gRPC高级通信框架简单实现

1. 前言 gRPC(Google Remote Procedure Call)是一个高性能、开源和通用的RPC框架,由Google主导开发。它支持多种编程语言,并广泛用于构建分布式应用程序和服务。gRPC基于HTTP/2协议,支持双向流、请求-响应和多请求-多…

将项目推到Github

前提条件 需要安装GIT需要注册GitHub账号 步骤 首先我们需要登录我们的GITHUB账号,然后点击新建存储库 然后起一个名字,设置一些私有公开即可 创建完成之后,这里有可以远程推送的命令 后面就直接输出命令即可 之后推送即可 git push orig…

K8S 专栏 —— namespace和Label篇

文章目录 namespace创建namespacenamespace使用默认namespaceLabel添加Label查询Labelnamespace 命名空间是一种用于在 kubernetes 集群中划分资源的虚拟化手段,每个资源都属于一个命名空间,使得多个团队或应用可以在同一个集群中独立运行,避免资源冲突。 创建namespace y…

44.第二阶段x64游戏实战-封包-分析掉落物列表id存放位置

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:43.第二阶段x64游戏实战-封包-代码实现获取包裹物品 之前的内容找到了掉落物的…

汇编语言期末快速过手笔记

一、计算机系统组成 计算机系统组成:由硬件系统和软件系统组成 硬件系统:CPU、存储器、输入/输出设备等物理部件软件系统:操作系统、各种语言、系统软件和应用软件 汇编语言分类 属于低级语言(直接面向硬件)与高级语言…

C++相比于C语言增加了哪些概念?

C相比于C语言增加了哪些概念? 作者将狼才鲸创建日期2025-06-17 CSDN阅读地址:C相比于C语言增加了哪些概念?Gitee源码目录:qemu/demo_代码示例/02_C_Class 目标受众:熟悉C语言,对C完全不了解,但…

HarmonyOS5 分布式测试:断网情况支付场景异常恢复验证

以下是针对HarmonyOS 5分布式事务在断网支付场景下的异常恢复验证全流程方案,综合关键技术与测试策略: 一、核心事务机制验证 ‌两阶段提交(2PC)协议‌ 模拟支付流程中网络中断,验证事务协调者能否正确处理预提交与回滚…

【狂飙AGI】第5课:前沿技术-文生图(系列1)

目录 (一)绘画本质(二)国内外AI转绘展(三)创作思路(四)美学理论(1)不可能美学(2)趋无限美学(3)反物理美学&…

发那科A06B-6290-H124 伺服驱动器

‌FANUC A06B-6290-H124 伺服驱动器核心性能解析‌ ‌一、核心控制能力‌ ‌多模式精密控制‌ 位置控制‌:支持高精度旋转角度/直线位移调节(分辨率达脉冲级),适用于数控机床定位(误差0.01mm级)和机器人轨…

Spring Boot 项目启动优化

Spring Boot 项目启动优化是一个非常重要的话题,尤其是在微服务和云原生环境下,快速启动意味着更快的部署、更高效的弹性伸缩和更好的开发体验。 下面我将从分析诊断、优化策略和终极方案三个层面,为你提供一个全面、可操作的优化指南。 一、…

「爬取豆瓣Top250电影的中文名称」数据采集、网络爬虫

- 第 108 篇 - Date: 2025 - 06 - 16 Author: 郑龙浩(仟墨) 文章目录 **任务:爬取豆瓣Tap250电影的中文名称****代码****实现效果** 任务:爬取豆瓣Tap250电影的中文名称 代码 # 豆瓣前Tap 250 import requests from bs4 import…

MySQL 多表查询、事务

1.多表查询的分类 1.1 内连接 在 MySQL 中,内连接(INNER JOIN)返回的是两个表中满足连接条件的记录的交集。这个“交集”不是指整个表,而是指符合连接条件的行组合,也就是A表和B表中满足我们使用on指定条件的记录。图…

CSP-J 2020 入门级 第一轮(初赛) 答案及解析

CSP-J 2020 入门级 第一轮(初赛) 答案及解析 在内存储器中每个存储单元都被赋予一个唯一的序号,称为()。 A. 地址 B. 序号 C. 下标 D. 编号 答: A 计算机中每个存储单元都是1字节,都有唯一的地址。 编译器…

Flutter包管理与插件开发完全指南

Flutter作为Google推出的跨平台移动应用开发框架,其强大的生态系统离不开完善的包管理机制和丰富的插件支持。本文将全面介绍Flutter中的包管理体系和插件开发实践,帮助开发者高效管理项目依赖并扩展应用功能。 一、Flutter包管理基础 1.1 包管理概述 …

【视频直播出海】阿里云ApsaraVideo Live:从零搭建全球直播平台的“星际航行”指南!

【视频直播出海】阿里云ApsaraVideo Live:从零搭建全球直播平台的“星际航行”指南! 在全球化浪潮的推动下,视频直播行业正以前所未有的速度跨越国界,成为连接世界的“数字新桥梁”。对于渴望拓展海外市场的企业而言,…

OAuth2中的Token

两个不同的Token OAuth2 中主要有两个不同的Token, 其中的区别为是否与用户相关联, 即与用户相关的用户Token, 和与客户端相关的客户端Token, 可以通过用户Token, 查询到用户的相关信息, 客户端Token与用户无关, 一般只用于客户端认证 用户Token 获取用户Token一般有两个方式…

使用 FastMCP 实现 Word 文档与 JSON 数据互转的 Python 服务

一、项目背景 本文分享一个基于 FastMCP 框架实现的文档处理服务,可实现 Word 文档(.docx)与 JSON 数据格式的双向转换。通过此服务,开发者可以轻松实现文档内容提取、结构化数据填充、样式模板复用等功能,适用于自动…

Vue3轮播图组件,当前轮播区域有当前图和左右两边图,两边图各显示一半,支持点击跳转和手动滑动切换

功能: 自动循环播放(到达末尾后回到第一张)、可设置切换间隔时间(interval属性) 左右导航按钮(可自定义显示/隐藏) 点击底部指示器跳转到指定幻灯片、且位置可调(轮播图内部/外部&…

350+交付案例,高质量低成本构建智慧园区数字孪生交付新范式

在智慧园区建设领域,数字孪生技术正成为推动园区智能化转型的核心引擎。山东融谷信息凭借其全要素、全周期、全方位的数字孪生交付能力,已成功交付350余个项目,覆盖产业园区、智慧楼宇、智慧社区等多元场景,低成本高质量交付&…

OpenCV 图像像素类型转换与归一化

一、知识点 1、OpenCV支持多种数据类型,每种类型都对应着不同的取值范围。 (1)、CV_8U取值范围[0, 255]。 (2)、CV_16U取值范围[0, 65535]。 (3)、CV_32F取值范围[0, 1]。 2、OpenCV提供convertTo()函数来转换数据类型,提供normalize()函数来改…