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

告别远程服务器:在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境(保姆级教程)

告别远程服务器在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境保姆级教程嵌入式开发者常面临一个尴尬困境每次修改代码后都需要将代码上传到远程ARM服务器或开发板进行编译测试不仅耗时耗力网络延迟和资源争夺更让开发效率大打折扣。今天我将分享如何在x64主机上构建完整的ARM64 sysroot环境让你像开发本地程序一样高效完成嵌入式项目。1. 为什么需要本地sysroot环境想象一下这样的场景你正在调试一个树莓派上的GPIO控制程序每次修改几行代码后都需要通过scp上传到远程ARM服务器登录服务器执行编译将生成的可执行文件下载回本地再上传到目标开发板测试这个过程中90%的时间都浪费在文件传输和等待上。而sysroot方案能让你完全本地化编译所有ARM架构的库和头文件都在本地即时编译测试无需网络传输编译速度提升5-10倍环境隔离不影响主机原有开发环境可移植性整个环境可以打包带走或共享给团队提示sysroot不是虚拟机或容器它只是为目标架构提供必要的头文件和库编译过程仍在主机完成2. 环境搭建从零构建ARM64根文件系统2.1 基础工具安装首先确保你的Ubuntu 22.04系统已更新sudo apt update sudo apt upgrade -y安装核心工具链sudo apt install -y \ debootstrap \ qemu-user-static \ gcc-aarch64-linux-gnu \ g-aarch64-linux-gnu \ cmake \ build-essential关键组件说明工具作用必备性debootstrap创建最小化Linux系统必需qemu-user-staticARM指令集模拟必需gcc-aarch64-linux-gnu交叉编译器必需cmake构建系统推荐2.2 创建sysroot目录结构选择一个合适的目录建议至少预留2GB空间export SYSROOT$HOME/arm64_sysroot mkdir -p $SYSROOT使用debootstrap构建基础系统这里选择Ubuntu 22.04 Jammysudo debootstrap --archarm64 --foreign jammy $SYSROOT注意--foreign参数表示只完成第一阶段解包因为架构不同无法直接配置复制QEMU模拟器到sysrootsudo cp /usr/bin/qemu-aarch64-static $SYSROOT/usr/bin/完成第二阶段配置sudo chroot $SYSROOT /debootstrap/debootstrap --second-stage3. 定制化开发环境3.1 安装常用开发工具进入chroot环境sudo chroot $SYSROOT在ARM64环境中安装基础开发包apt update apt install -y \ vim \ git \ gdb-multiarch \ libgpiod-dev \ wiringpi \ python3-dev退出chroot环境exit3.2 配置开发库搜索路径为了让交叉编译器能找到sysroot中的库需要设置环境变量cat ~/.bashrc EOF export ARM64_SYSROOT$SYSROOT export PKG_CONFIG_SYSROOT_DIR$SYSROOT export PKG_CONFIG_PATH$SYSROOT/usr/lib/aarch64-linux-gnu/pkgconfig EOF source ~/.bashrc4. CMake交叉编译实战4.1 创建工具链文件新建arm64-toolchain.cmake# 基础系统配置 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # 工具链路径 set(TOOLCHAIN_PREFIX /usr/bin/aarch64-linux-gnu-) set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g) # sysroot配置 set(CMAKE_SYSROOT $ENV{ARM64_SYSROOT}) set(CMAKE_FIND_ROOT_PATH $ENV{ARM64_SYSROOT}) # 搜索规则 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)4.2 示例项目GPIO控制程序创建简单项目结构gpio_demo/ ├── CMakeLists.txt └── src/ └── main.cmain.c内容#include gpiod.h #include stdio.h int main() { struct gpiod_chip *chip gpiod_chip_open(/dev/gpiochip0); if (!chip) { perror(Open chip failed); return 1; } struct gpiod_line *line gpiod_chip_get_line(chip, 17); if (!line) { perror(Get line failed); return 1; } if (gpiod_line_request_output(line, gpio-demo, 0) 0) { perror(Request output failed); return 1; } gpiod_line_set_value(line, 1); printf(GPIO 17 set to HIGH\n); gpiod_line_release(line); gpiod_chip_close(chip); return 0; }CMakeLists.txt配置cmake_minimum_required(VERSION 3.10) project(gpio_demo) set(CMAKE_C_STANDARD 11) find_package(PkgConfig REQUIRED) pkg_check_modules(GPIOD REQUIRED libgpiod) add_executable(gpio_demo src/main.c) target_include_directories(gpio_demo PRIVATE ${GPIOD_INCLUDE_DIRS}) target_link_libraries(gpio_demo ${GPIOD_LIBRARIES})4.3 编译与测试使用工具链文件编译mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE../arm64-toolchain.cmake .. make将生成的gpio_demo复制到ARM设备上运行即可。5. 高级技巧与问题排查5.1 常见依赖问题解决当遇到库缺失时在chroot环境中安装对应包sudo chroot $SYSROOT apt install -y libname-dev exit5.2 多版本库管理如果需要不同版本的库可以创建多个sysroot目录使用符号链接切换版本在CMake中动态指定路径例如创建Python3.8环境sudo chroot $SYSROOT apt install -y python3.8 libpython3.8-dev exit5.3 性能优化技巧使用ccache加速编译sudo apt install ccache echo export PATH/usr/lib/ccache:$PATH ~/.bashrc内存文件系统将频繁访问的目录挂载到tmpfssudo mount -t tmpfs tmpfs $SYSROOT/var/cache/apt并行编译在CMake中使用-j参数make -j$(nproc)6. 环境维护与扩展6.1 备份与恢复打包整个sysrootsudo tar -czvf arm64_sysroot.tar.gz -C $SYSROOT .恢复时sudo mkdir -p $SYSROOT sudo tar -xzvf arm64_sysroot.tar.gz -C $SYSROOT6.2 添加新架构支持同样的方法可以支持其他架构只需修改debootstrap参数# 例如添加armhf支持 sudo debootstrap --archarmhf --foreign jammy $HOME/armhf_sysroot6.3 与IDE集成在VS Code中配置{ cmake.configureArgs: [ -DCMAKE_TOOLCHAIN_FILEarm64-toolchain.cmake ], cmake.buildDirectory: ${workspaceFolder}/build-arm64 }在CLion中进入设置 → Build, Execution, Deployment → Toolchains添加新的交叉编译工具链指定CMake工具链文件路径

相关文章:

告别远程服务器:在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境(保姆级教程)

告别远程服务器:在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境(保姆级教程) 嵌入式开发者常面临一个尴尬困境:每次修改代码后,都需要将代码上传到远程ARM服务器或开发板进行编译测试,不仅耗时耗力…...

从3天到30分钟:OpCore-Simplify如何重构黑苹果配置的技术民主化之路

从3天到30分钟:OpCore-Simplify如何重构黑苹果配置的技术民主化之路 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在黑苹果技术领域&…...

CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验

CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验 在国产数据库技术快速发展的今天,越来越多的企业开始关注从传统数据库向国产化解决方案的迁移。作为国产数据库中的佼佼者,KingbaseES V9凭借其出色的MySQL兼容性和…...

软件测试之压力测试总结

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是压力测试软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件…...

intv_ai_mk11实测效果:在24GB显存限制下保持128~512 token长文本生成质量

intv_ai_mk11实测效果:在24GB显存限制下保持128~512 token长文本生成质量 1. 模型效果惊艳展示 intv_ai_mk11作为一款基于Llama架构的中等规模文本生成模型,在24GB显存环境下展现出了令人印象深刻的长文本生成能力。不同于常规模型在显存限制下容易出现…...

终极空洞骑士模组管理器:用Scarab实现10倍效率提升的完整指南

终极空洞骑士模组管理器:用Scarab实现10倍效率提升的完整指南 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经为《空洞骑士》安装模组时感到头疼&#x…...

Jmeter接口测试项目实战

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么是jmeter?JMeter是100%完全由Java语言编写的,免费的开源软件,是非常优秀的性能测试和接口测试工具,支持主流…...

Ostrakon-VL终端惊艳效果:终端打印支持ANSI颜色码高亮关键信息

Ostrakon-VL终端惊艳效果:终端打印支持ANSI颜色码高亮关键信息 1. 像素特工终端概览 Ostrakon-VL终端是一款专为零售与餐饮场景设计的智能扫描工具,基于Ostrakon-VL-8B多模态大模型开发。与传统工业级UI不同,它采用了独特的8-bit像素艺术风…...

专业级foobar2000个性化配置方案:提升音乐管理效率的foobox-cn

专业级foobar2000个性化配置方案:提升音乐管理效率的foobox-cn 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是一套针对foobar2000音乐播放器的专业级DUI(DirectUI…...

Linux文件搜索工具FSearch:从卡顿到闪电的搜索体验革新

Linux文件搜索工具FSearch:从卡顿到闪电的搜索体验革新 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 在Linux系统中,文件搜索往往是一场与时…...

终极窗口置顶指南:如何让重要窗口永远不被遮挡

终极窗口置顶指南:如何让重要窗口永远不被遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop AlwaysOnTop 是一个轻量级的 Windows 应用程序,它能够将任…...

万象视界灵坛代码实例:使用Gradio快速搭建像素风Web UI,零前端开发经验可用

万象视界灵坛代码实例:使用Gradio快速搭建像素风Web UI,零前端开发经验可用 1. 项目概述 万象视界灵坛是一款基于OpenAI CLIP模型的多模态智能感知平台,它将复杂的语义对齐功能包装在充满游戏感的像素风界面中。这个项目最大的特点是完全不…...

intv_ai_mk11效果展示:中文古诗英译+文化注释+押韵风格选择(Shakespearean/Modern)

intv_ai_mk11效果展示:中文古诗英译文化注释押韵风格选择(Shakespearean/Modern) 1. 惊艳的中英古诗翻译能力 intv_ai_mk11在中文古诗翻译领域展现出令人惊叹的能力,不仅能准确传达原诗的意境,还能根据需求选择不同的…...

终极指南:如何使用Harepacker-resurrected打造个性化MapleStory游戏体验

终极指南:如何使用Harepacker-resurrected打造个性化MapleStory游戏体验 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 你是否曾…...

2026最权威的降重复率工具解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网AI检测系统会去对文本的语义连贯性展开多维分析,会对文本的句式结构进行多维…...

G-Helper终极指南:如何用轻量工具延长华硕笔记本电池寿命50%

G-Helper终极指南:如何用轻量工具延长华硕笔记本电池寿命50% 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...

春联生成模型-中文-base:5分钟快速部署,小白也能轻松定制专属春联

春联生成模型-中文-base:5分钟快速部署,小白也能轻松定制专属春联 春节快到了,家家户户都要贴春联。可每年都写“福星高照”、“万事如意”,是不是有点腻了?想写点有新意的,又怕自己文采不够。别担心&…...

丹青幻境保姆级教程:LoRA卷轴版本管理与热更新机制在生产环境落地

丹青幻境保姆级教程:LoRA卷轴版本管理与热更新机制在生产环境落地 1. 项目背景与核心价值 丹青幻境是一款专为数字艺术创作者设计的AI绘画工具,它巧妙地将现代AI技术与传统东方美学相结合。与传统的技术工具不同,丹青幻境采用了宣纸质感界面…...

DocRes:统一文档图像修复任务的通用模型技术解析

DocRes:统一文档图像修复任务的通用模型技术解析 【免费下载链接】DocRes [CVPR 2024] DocRes: A Generalist Model Toward Unifying Document Image Restoration Tasks 项目地址: https://gitcode.com/gh_mirrors/do/DocRes 文档图像修复不再需要多个专用模…...

Mermaid Live Editor:重新定义图表创作的开源利器

Mermaid Live Editor:重新定义图表创作的开源利器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...

文华财经与博易大师双轨期货多空变色线指标实战解析

1. 双轨期货多空变色线指标是什么? 如果你经常使用文华财经或博易大师进行期货交易,一定对主图上的各种技术指标不陌生。今天要介绍的这个双轨期货多空变色线指标,可以说是趋势交易者的"秘密武器"。简单来说,它就像给K线…...

开源 ESP32 网络收音机:OLED 界面与编码器交互全解析

1. ESP32网络收音机项目概述 第一次接触ESP32网络收音机项目时,我被这个小小的开发板展现出的强大功能震撼到了。想象一下,一个火柴盒大小的设备,不仅能连接WiFi播放全球各地的网络电台,还能通过OLED屏幕和编码器实现媲美商业产品…...

ConvNeXt 改进 :ConvNeXt添加可变形卷积(DCNv2,CVPR 2018),实现高效涨点,二次创新CNBlock结构 ,独家首发

本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗,一文带你改进自己模型,科研路上少走弯路。 前言 DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的Co…...

C++ 自动微分引擎:基于模板元编程的静态反向传播梯度流构建

C 自动微分引擎:基于模板元编程的静态反向传播梯度流构建尊敬的各位专家、同行,大家好。今天,我们将深入探讨一个兼具理论深度与工程实践价值的主题:如何利用 C 的模板元编程(Template Metaprogramming)技术…...

ROS实战:UZH-FPV数据集下PL-EVIO与主流VIO算法的性能对比

1. UZH-FPV数据集与无人机视觉里程计的挑战 UZH-FPV数据集是苏黎世联邦理工学院发布的专门针对高速无人机场景的多模态数据集。这个数据集最大的特点在于它完整记录了无人机在高速机动飞行(最高速度超过10m/s)时的多传感器数据,包括双目事件相…...

考研数学二高数公式太多记不住?我用Python+Anki做了一个自动出题复习工具

用PythonAnki打造考研数学二高数公式智能复习系统 备考考研数学二的同学,最头疼的莫过于海量高数公式的记忆。泰勒展开、微分方程解法、伽玛函数...这些公式不仅抽象难懂,还容易混淆。传统死记硬背效率低下,而市面上的公式手册又缺乏互动性。…...

C++ 安全子集:探讨在关键任务系统中限制部分 C++ 特性(如 RTTI)的必要性

尊敬的各位专家、各位同仁,大家好。今天,我们齐聚一堂,共同探讨一个在软件工程领域,尤其是在关键任务系统(Critical Mission Systems)开发中至关重要的话题:C 安全子集——在严苛环境下限制部分…...

电商评论分析利器:GTE文本向量实战情感分析与产品问题挖掘

电商评论分析利器:GTE文本向量实战情感分析与产品问题挖掘 1. 电商评论分析的痛点与解决方案 电商平台每天产生海量用户评论,这些评论蕴含着消费者真实的产品体验和市场反馈。传统的人工分析方法面临三大挑战: 处理效率低:人工…...

intv_ai_mk11实际作品:面向管理层的OKR撰写建议与周报优化样例

intv_ai_mk11实际作品:面向管理层的OKR撰写建议与周报优化样例 1. 为什么管理者需要AI辅助撰写OKR和周报 在快节奏的商业环境中,管理者常常面临一个共同挑战:如何高效地制定清晰可衡量的目标(OKR),同时保…...

Winhance中文版:图形界面驱动的Windows系统优化解决方案

Winhance中文版:图形界面驱动的Windows系统优化解决方案 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-…...