尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Zephyr native_sim 交叉编译实战:在 x86_64 主机上构建并运行 ARM 目标可执行文件
Zephyr native_sim 交叉编译实战在 x86_64 主机上构建并运行 ARM 目标可执行文件【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr导读本指南围绕 Zephyr RTOS 中native_sim板卡基于 POSIX 架构的原生模拟目标的交叉编译能力展开当你在 x86_64 开发机上完成代码调试后若需将同一份应用构建为可在其他处理器架构如 32/64 位 ARM机器上直接运行的可执行文件就需要掌握这套交叉编译流程。阅读本文后你将学会如何准备 Ubuntu 交叉编译工具链、正确传递ZEPHYR_TOOLCHAIN_VARIANT、NATIVE_TARGET_HOST、CROSS_COMPILE三个关键 CMake 参数并借助 QEMU 用户态模拟在开发机上快速验证产物。本文依据 boards/native/native_sim/doc/cross_compile.rst 编写并结合仓库内 POSIX 架构与交叉编译工具链源码进行深化。为什么需要对 native_sim 做交叉编译native_sim是 Zephyr 的 POSIX 架构板卡Zephyr 应用与内核、库一起编译最终产出一个普通 Linux 可执行文件zephyr.exe。它的主要用途是在工作站上调试、插桩和测试应用代码并不模拟任何具体硬件而是借助宿主机的 PTY/TTY、TAP 网络、SDL 显示等资源提供少量外设支持。在这种开发模式下常规用法是“本机构建、本机运行”。但在某些场景下你需要在一台机器上构建、在另一台机器上执行——当两台机器处理器架构不同时例如 x86_64 开发机与 ARM 目标机就必须交叉编译。⚠️安全警告来自原文档native_sim是面向开发与调试的辅助手段设计目标是可复现、便于插桩和访问执行状态。出于安全原因绝不应将运行在native_sim上的生产代码作为最终产品交付。交叉编译出的可执行文件同样仅适用于开发、测试与验证。准备你的构建主机原文档以Ubuntu 24.04 x86_64开发机为例演示如何交叉编译 32 位arm/armhf与 64 位aarch64ARM 目标。需要注意交叉编译环境的搭建方式不止一种你的主机与目标架构可能不同因此请将本节视为思路参考而非唯一方案。安装交叉编译工具链第一步是在开发机上安装交叉编译工具链。在 Ubuntu 24.04 x86_64 上64 位 ARMaarch64构建安装gcc-aarch64-linux-gnu包。该包将工具链二进制安装为/usr/bin/aarch64-linux-gnu-*库与头文件位于/usr/aarch64-linux-gnu/。32 位 ARMarmhf构建安装gcc-arm-linux-gnueabihf包。该包将工具链二进制安装为/usr/bin/arm-linux-gnueabihf-*库与头文件位于/usr/arm-linux-gnueabihf/。$ sudo apt-get install gcc-aarch64-linux-gnu # 64 位 ARM $ sudo apt-get install gcc-arm-linux-gnueabihf # 32 位 ARMarmhf关于 gcc-multilib 的冲突说明原文档特别提醒在 Ubuntu 24.04 中gcc-multilib包与gcc-aarch64-linux-gnu存在冲突。而为了让 x86_64 主机支持 32 位构建很多教程会引导你安装gcc-multilib。这并非严格的问题——gcc-multilib本质上是一个元包meta-packagex86_64 上做 32 位构建真正需要的是它的依赖。因此可以在安装gcc-multilib、g-multilib后将其卸载同时保留其依赖也可以直接安装这些依赖关键是安装后不要再移除这些依赖否则 32 位构建会失败。三个核心构建参数交叉编译native_sim时需要向 CMake 传递以下选项参数含义本示例取值ZEPHYR_TOOLCHAIN_VARIANTcross-compile选择 Zephyr 的“交叉编译”通用工具链变体cross-compileNATIVE_TARGET_HOST指定目标机器架构64 位 ARM 用aarch6432 位 ARM 用armCROSS_COMPILE交叉编译工具链前缀含路径/usr/bin/aarch64-linux-gnu-或/usr/bin/arm-linux-gnueabihf-此外视编译器而定可能还需要设置SYSROOT_DIR指向编译器的 sysroot 路径。参数背后的源码机制理解这三个参数如何被消费有助于你在非标准环境下正确排错NATIVE_TARGET_HOST→TARGET_HOST在 arch/posix/CMakeLists.txt 中如果定义了NATIVE_TARGET_HOST会将其直接作为TARGET_HOST否则根据宿主机处理器自动推断arm*→arm*86*→x86_64。随后 CMake 会尝试包含${CMAKE_CURRENT_LIST_DIR}/${TARGET_HOST}.cmake即 arch/posix/arm.cmake 或 arch/posix/aarch64.cmake来应用该目标架构特有的编译/链接选项若文件不存在且显式指定了NATIVE_TARGET_HOST会打印警告并继续。架构一致性校验arch/posix/aarch64.cmake 会调用scripts/build/user_wordsize.py检查用户态字长当CONFIG_64BIT与宿主机用户态字长不符时直接FATAL_ERROR并提示改选native_sim/native/64或修正CONFIG_64BIT。arch/posix/arm.cmake 则直接拒绝CONFIG_64BITy的 32 位 ARM 目标组合。CROSS_COMPILE前缀在 cmake/toolchain/cross-compile/generic.cmake 中CROSS_COMPILE是传统 KBuild 机制的外置工具链前缀可通过环境变量或 CMake 变量设置并支持按板卡覆盖CROSS_COMPILE_${NORMALIZED_BOARD_TARGET}。该文件还会在CROSS_COMPILE_TOOLCHAIN_PATH下探测_newlib_version.h与picolibc.h据此自动决定工具链是否支持 newlib / Picolibc。注意POSIX 架构仅支持 Linux见 arch/posix/CMakeLists.txt 顶部的FATAL_ERROR判断。Windows 或 macOS 用户应考虑使用虚拟机运行 Linux 客户机。完整构建命令示例为 64 位 ARMaarch64构建 hello_world使用west build等价于原文档中的 cmake 构建命令$ west build -b native_sim//64 -p always samples/hello_world \ -DNATIVE_TARGET_HOSTaarch64 \ -DZEPHYR_TOOLCHAIN_VARIANTcross-compile \ -DCROSS_COMPILE/usr/bin/aarch64-linux-gnu-其中native_sim//64是native_sim/native/64目标的 west 板卡写法64 位版本面向 LP64 ABI指针与 long 为 64 位。为 32 位 ARMarmhf构建 hello_world$ west build -b native_sim -p always samples/hello_world \ -DNATIVE_TARGET_HOSTarm \ -DZEPHYR_TOOLCHAIN_VARIANTcross-compile \ -DCROSS_COMPILE/usr/bin/arm-linux-gnueabihf-这里使用默认的native_sim目标32 位版本面向 ILP32 ABI指针与 long 为 32 位更贴近大多数嵌入式目标的 ABI也更适合暴露指针/长整型宽度相关的缺陷详见 boards/native/native_sim/doc/index.rst 中“32 and 64bit versions”一节。构建完成后你会得到一个可执行文件zephyr/zephyr.exe位于build目录下可以将其拷贝到目标机器上运行。板卡元数据boards/native/native_sim/native_sim.yaml显示native_sim的arch为posix、type为native工具链支持host与llvm——交叉编译时则通过上述参数切换到cross-compile变体。快速验证在开发机上运行交叉编译产物交叉编译出的可执行文件也可以在开发机上直接运行前提是安装 QEMU 的用户态模拟器User space emulator。在 Ubuntu 24.04 上安装qemu-user包$ sudo apt-get install qemu-user然后分别执行64 位 ARM 版本$ qemu-aarch64 -L /usr/aarch64-linux-gnu/ build/zephyr/zephyr.exe # Press CtrlC to exit32 位 ARM 版本$ qemu-armhf -L /usr/arm-linux-gnueabihf/ build/zephyr/zephyr.exe # Press CtrlC to exit其中-L指定交叉工具链 sysroot 路径让 QEMU 能加载目标架构的动态库与系统文件。Zephyr 内核在应用结束后并不会真正退出而是永远进入空闲循环因此需要手动CtrlC终止。交叉编译与原生构建的差异要点C 库选择native_sim默认使用宿主 C 库CONFIG_EXTERNAL_LIBC也可选择CONFIG_MINIMAL_LIBC或CONFIG_PICOLIBC。交叉编译时 C 库由工具链携带cross-compile工具链是否支持 newlib/Picolibc 取决于安装内容构建系统会按上文所述的探测逻辑自动判定。若选用与宿主 C 库不兼容的特性系统会默认回退到 Picolibc见 boards/native/native_sim/doc/index.rst。受限外设部分驱动与后端对 C 库兼容性有限制——例如蓝牙 Userchan 仅支持宿主与 PicolibcUSB native posix 仅支持宿主 C 库。交叉编译到目标机时这些依赖宿主资源的驱动行为需要结合目标环境重新评估。时间模型native_sim的模拟时间默认与真实主机时间解耦全速运行只有时钟/定时器模型才把两者关联起来。交叉编译产物运行在目标机时--rt/--no-rt、--rt-ratio/--rt-drift等命令行选项依然有效可用于将模拟时间锁到真实时间或调整速率。总结交叉编译native_sim只需三个参数ZEPHYR_TOOLCHAIN_VARIANTcross-compile、NATIVE_TARGET_HOST目标架构、CROSS_COMPILE工具链前缀必要时补充SYSROOT_DIR。64 位 ARM 使用native_sim//64板卡与aarch64目标32 位 ARMarmhf使用默认native_sim板卡与arm目标。产物zephyr.exe可通过qemu-aarch64/qemu-armhf加-L指定 sysroot 在开发机上先行验证。生产代码严禁运行于native_sim本流程仅服务于开发、测试与调试场景。如需进一步阅读构建系统对NATIVE_TARGET_HOST的消费逻辑见 arch/posix/CMakeLists.txtcross-compile工具链变体见 cmake/toolchain/cross-compile/generic.cmakenative_sim板卡整体文档见 boards/native/native_sim/doc/index.rst。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

RealSense深度后处理一文看懂:5个滤镜+参数调优实践

RealSense深度后处理一文看懂:5个滤镜+参数调优实践

RealSense深度后处理一文看懂:5个滤镜参数调优实践 【免费下载链接】librealsense RealSense SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense librealsense(RealSense SDK)为 RealSense 深度相机提供了一组独立可…

📅 2026/9/19 6:08:11
PiXYZ Plugin实战:工业CAD模型导入Unity与轻量化处理指南

PiXYZ Plugin实战:工业CAD模型导入Unity与轻量化处理指南

1. 工业模型进Unity,为什么PiXYZ是绕不开的一环做过数字孪生项目的人都有一个共同体会:真正花时间的往往不是写Shader、搭UI、调灯光,而是把甲方丢过来的那一堆CAD模型弄进引擎里。一个中等规模的工厂场景,原始STEP或JT文件动辄几…

📅 2026/9/19 6:03:10
WebGPU 端侧推理实战:浏览器本地运行 DeepSeek-R1 蒸馏模型

WebGPU 端侧推理实战:浏览器本地运行 DeepSeek-R1 蒸馏模型

1. 为什么要在浏览器里跑 DeepSeek-R1把大模型塞进浏览器这件事,两年前还属于"能跑但没法用"的阶段。模型量化到 4bit 之后动辄几个 G,加载慢、推理卡、内存爆,用户体验基本为零。但 2024 年下半年开始,情况变了&#x…

📅 2026/9/19 6:03:10
MORE NEWS

更多资讯

📰

PMSM无位置传感器控制实战:STM32G431平台设计与调试

永磁同步电机(PMSM)的控制,绕不开一个核心矛盾:要精准控制转矩,就得知道转子磁极的实时位置;可一旦装上机械式位置传感器,成本、体积、接线复杂度、高温高湿环境下的可靠性问题就全来了。我最早…

📰

用Python和规则引擎实现古诗词生成器:91行代码的创意实践

前阵子参加了一个“91行代码创意赛”,规则特别简单:用不超过91行代码实现一个有意思的项目,语言不限。当时我翻了不少往届作品,有做贪吃蛇的,有做网页爬虫的,还有做聊天机器人的。我琢磨着能不能做一个跟传…

📰

昇思 MindSpore 大模型自动优化实战:从配置到踩坑全记录

昇思 MindSpore 这套名字刚出现的时候,很多人以为它只是一个要“国产替代”的深度学习框架,直到我自己动手在 MindSpore 上跑大模型微调和训练,才意识到它真正值钱的地方在于:把大模型训练和推理里那些又脏又累的优化工作&#xf…

📰

BDUSS Cookie安全吗?pan-baidu-download的~/.baidu.cookies存储机制与5个防护要点完整解析

BDUSS Cookie安全吗?pan-baidu-download的~/.baidu.cookies存储机制与5个防护要点完整解析 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download pan-baidu-download 是一款常用的百度网盘…

📰

硅基光电子芯片:从原理到流片的完整技术解析

1. 从“电”到“光”的范式转移:为什么芯片行业突然盯上了光子学过去半个多世纪,芯片行业一直沿着摩尔定律的轨迹狂奔,靠的是把晶体管越做越小、把电子跑得越来越快。但到了最近几年,稍微关注半导体动态的人都能感觉到&#xff0c…

📰

MPU6050运动中断唤醒STM32低功耗STOP模式全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬