news 2026/7/15 9:21:58

如何快速上手openEuler/embedded?零基础入门到编译镜像的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何快速上手openEuler/embedded?零基础入门到编译镜像的完整指南

如何快速上手openEuler/embedded?零基础入门到编译镜像的完整指南

【免费下载链接】embeddedThe openEuler support for embedded device项目地址: https://gitcode.com/openeuler/embedded

前往项目官网免费下载:https://ar.openeuler.org/ar/

想要为嵌入式设备构建轻量级的openEuler系统吗?openEuler/embedded项目为您提供了完整的解决方案!🚀 这是一个专门为嵌入式设备优化的openEuler版本,支持aarch64和x86_64两种CPU架构,让您能够轻松构建定制化的嵌入式操作系统镜像。无论您是嵌入式开发新手还是经验丰富的开发者,本指南都将带您从零开始,快速掌握openEuler/embedded的核心功能和使用方法。

📋 准备工作与环境配置

在开始之前,我们需要确保系统满足基本要求。openEuler/embedded的编译过程需要以下依赖工具:

  • kiwi >= 9.21(镜像构建工具)
  • docker/chroot(容器化编译环境)
  • createrepo(RPM仓库创建工具)
  • xmllint(XML解析工具)
  • openssl(安全套接字层工具)

系统要求

编译过程需要至少20GB的可用磁盘空间,建议使用性能较好的机器以获得更好的编译体验。如果您使用的是远程服务器,建议使用nohup命令来运行编译脚本,避免因网络中断导致编译失败。

🚀 快速开始:克隆项目与初次编译

首先,让我们获取项目源代码:

git clone https://gitcode.com/openeuler/embedded cd embedded

项目的主要入口是build.sh脚本,它提供了完整的编译流程控制。让我们先了解一下它的基本用法:

./build.sh -a [aarch64|x86_64] -r [repo] -d [work dir] -p [live|virtual|disk|docker|devdocker] -t [rpm|image|all]

参数详解

  • -r:指定repo文件,格式为dnf/yum的配置文件格式
  • -d:指定编译工作目录,所有中间文件和结果都存放在该目录
  • -p:指定编译所得镜像类型,目前稳定支持docker镜像和devdocker(开发者镜像)
  • -t:指定编译类型,rpm是指根据源码和补丁编译得到rpm仓库;image是指根据给定repo编译指定镜像;all将会按顺序执行rpm和image指定的编译过程

🔧 配置文件详解

openEuler/embedded的配置文件位于config目录下,主要包括三个关键文件:

1. kiwiconf/ 目录

这个目录存放kiwicompat命令所需的配置文件,一般情况下无需修改。其中包含:

  • config.xml:镜像描述文件,定义了镜像的构建规则
  • images.sh:镜像构建后处理脚本,可用于裁减根目录中不必要的文件或进行系统设置

2. openeuler.repo

这是预留的repo文件,通常用在build.sh的-r参数中,定义了软件包的来源仓库。

3. package_conf.xml

这是最重要的配置文件,定义了需要编译的软件包列表。每个软件包都包含以下信息:

<package> <name>argon2</name> <!-- 软件包名 --> <url>https://gitee.com/openeuler-embedded/argon2</url> <!-- 软件包git仓库地址 --> <branch>openEuler-20.03-LTS</branch> <!-- 仓库分支或tag --> <patch>../src/patch/argon2.patch</patch> <!-- 补丁文件路径 --> <enabled>1</enabled> <!-- 是否启用编译 --> </package>

项目已经预配置了40多个常用软件包,包括:

  • 系统核心组件:glibc、systemd、openssl
  • 开发工具:gcc、make、python3
  • 数据库:sqlite
  • 压缩工具:bzip2、lz4、zstd

🏗️ 编译流程解析

openEuler/embedded的编译过程分为两个主要阶段:

第一阶段:RPM包编译

这个阶段在src/buildrpm/目录中完成,主要步骤包括:

  1. 源码下载与补丁应用:根据配置文件下载软件包源码并应用相应的补丁
  2. 基础镜像构建:使用makerootfs制作包含dnf/rpm-build/gcc等工具的基础编译环境
  3. 首次编译:在基础容器中安装软件包spec文件的编译依赖,进行第一次软件包编译
  4. RPM包存储:编译所得rpm包存放在工作目录的rpms/子目录下

第二阶段:镜像构建

这个阶段在src/buildimg/目录中完成,使用kiwi工具根据配置构建最终的系统镜像。

📦 编译实战:构建Docker镜像

让我们通过一个实际例子来学习如何编译openEuler/embedded的Docker镜像:

步骤1:准备编译环境

确保您已经安装了所有必要的依赖工具,并且有足够的磁盘空间。

步骤2:运行编译命令

./build.sh -a x86_64 -r config/openeuler.repo -d ./output -p docker -t all

这个命令将:

  • 使用x86_64架构
  • 使用config/openeuler.repo作为软件源
  • 将输出目录设置为./output
  • 构建docker类型的镜像
  • 执行完整的编译流程(rpm + image)

步骤3:监控编译过程

编译过程可能需要一些时间,您可以通过查看日志文件来监控进度:

  • output/logs_1.tar.gz:第一轮编译日志
  • output/logs_2.tar.gz:第二轮编译日志

步骤4:获取编译结果

编译完成后,您可以在output/image/目录中找到生成的镜像文件,通常命名为openEuler-embedded.xxx-xxx.docker.tar.xz

🐳 使用编译的Docker镜像

成功编译后,您可以通过以下方式使用生成的Docker镜像:

# 加载镜像 docker load -i openEuler-embedded.xxx-xxx.docker.tar.xz # 运行容器 docker run --rm --privileged --name embedded-test -v `pwd`:/data -itd openeuler-embedded init # 进入容器 docker exec -it embedded-test bash

🎯 高级功能与定制化

自定义软件包列表

如果您需要添加或移除特定的软件包,可以修改config/package_conf.xml文件。只需按照现有的格式添加新的<package>节点即可。

交叉编译支持

虽然当前版本主要支持aarch64和x86_64架构,但项目正在开发交叉编译功能,未来将支持更多嵌入式平台。

镜像类型选择

除了docker镜像,项目还计划支持更多镜像类型:

  • live镜像:可启动的Live系统
  • virtual镜像:虚拟机镜像
  • disk镜像:磁盘镜像
  • devdocker镜像:开发者专用的docker镜像

🔍 调试与问题解决

常见问题

  1. 编译失败:检查日志文件logs_1.tar.gzlogs_2.tar.gz,通常会有详细的错误信息
  2. 磁盘空间不足:确保工作目录有至少20GB可用空间
  3. 依赖工具缺失:使用系统包管理器安装缺失的工具

调试技巧

  • 使用-t rpm参数只编译RPM包,不构建镜像,可以快速测试软件包编译
  • 修改config/kiwiconf/images.sh脚本来自定义镜像的最终配置
  • 查看src/patch/目录下的补丁文件,了解对原始软件包的修改

📚 项目结构与文件说明

了解项目的目录结构有助于更好地使用和定制openEuler/embedded:

embedded/ ├── build.sh # 主编译脚本 ├── config/ # 配置文件目录 │ ├── kiwiconf/ # kiwi配置 │ ├── openeuler.repo # 软件源配置 │ └── package_conf.xml # 软件包配置 ├── src/ # 源码目录 │ ├── buildimg/ # 镜像构建脚本 │ ├── buildrpm/ # RPM包构建脚本 │ ├── devtools/ # 开发工具 │ └── patch/ # 补丁文件 └── test/ # 测试目录

🚢 使用预编译镜像

如果您不想自己编译,也可以使用openEuler-embedded-sig基于该仓库编译并托管在华为云的镜像:

# 开发者docker镜像 docker pull swr.cn-east-3.myhuaweicloud.com/openeuler-embedded/openeuler-embedded:developer-x86_64 docker pull swr.cn-east-3.myhuaweicloud.com/openeuler-embedded/openeuler-embedded:developer-aarch64 # 嵌入式docker镜像 docker pull swr.cn-east-3.myhuaweicloud.com/openeuler-embedded/openeuler-embedded:aarch64 docker pull swr.cn-east-3.myhuaweicloud.com/openeuler-embedded/openeuler-embedded:x86_64

💡 最佳实践与建议

性能优化

  1. 并行编译:如果您的机器有多个CPU核心,可以考虑修改编译脚本以支持并行编译
  2. 缓存利用:重复编译时,可以重用之前下载的源码和编译的中间文件
  3. 网络优化:确保良好的网络连接,特别是下载软件包源码时

开发建议

  1. 版本控制:对配置文件进行版本控制,便于追踪修改历史
  2. 增量编译:先使用-t rpm编译RPM包,确认无误后再构建完整镜像
  3. 日志分析:定期分析编译日志,优化编译过程

🔮 未来发展与路线图

openEuler/embedded项目正在积极发展中,未来的改进方向包括:

  1. 镜像多样化支持:增加对虚拟机镜像和嵌入式设备镜像的支持
  2. 智能构建调度:基于自动识别的依赖关系进行所有软件包的正确构建
  3. 交叉编译增强:完善对更多嵌入式平台的支持

🤝 参与贡献

如果您对openEuler/embedded项目感兴趣,欢迎参与贡献:

  1. Fork本仓库
  2. 新建Feat_xxx分支
  3. 提交代码
  4. 新建Pull Request

🎉 总结

通过本指南,您已经掌握了openEuler/embedded的基本使用方法。从环境配置到镜像编译,从基础使用到高级定制,openEuler/embedded为嵌入式开发提供了强大而灵活的工具链。无论您是构建物联网设备、边缘计算节点还是其他嵌入式系统,openEuler/embedded都能为您提供稳定可靠的系统基础。

记住,实践是最好的老师!现在就开始您的openEuler/embedded之旅吧!🌟 如果您在过程中遇到任何问题,欢迎查阅项目文档或参与社区讨论。祝您编译顺利,嵌入式开发愉快!

【免费下载链接】embeddedThe openEuler support for embedded device项目地址: https://gitcode.com/openeuler/embedded

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 9:20:51

SM320C6748-HIREL串行通信外设深度解析:I2C、UART与USB2.0 OTG寄存器级实战

1. 项目概述与核心价值在嵌入式系统开发&#xff0c;尤其是基于德州仪器&#xff08;TI&#xff09;C6000系列DSP的复杂应用中&#xff0c;深入理解芯片外设的寄存器级工作原理和电气特性&#xff0c;是驱动工程师从“能用”走向“精通”的必经之路。今天&#xff0c;我们就以T…

作者头像 李华
网站建设 2026/7/15 9:20:36

模板驱动文档自动化:从填空题到内容工业化

1. 项目概述&#xff1a;用模板把文档生产变成“填空题” 你有没有过这种体验&#xff1a;每周要交三份客户方案&#xff0c;每份结构雷同——封面、目录、痛点分析、解决方案、报价页、服务承诺——但每次都要从零新建Word、手动调格式、反复核对页眉页脚、导出PDF前还要检查一…

作者头像 李华
网站建设 2026/7/15 9:18:41

彻底解决C++运行库安装错误代码5:从原理到实战的完整指南

1. 项目概述&#xff1a;当专业软件安装遇上C运行库“拦路虎”如果你是一名设计师、建模师或工程师&#xff0c;在满怀期待地安装AutoCAD、Maya或3ds Max这类行业核心生产力工具时&#xff0c;屏幕上突然弹出一个关于“Microsoft Visual C 2010 Redistributable”或“2013 Redi…

作者头像 李华
网站建设 2026/7/15 9:18:20

CVE-2019-11043:从PATH_INFO空值到PHP-FPM内存下溢的RCE漏洞深度剖析

1. 漏洞背景与影响范围 CVE-2019-11043是一个影响PHP-FPM&#xff08;FastCGI进程管理器&#xff09;的远程代码执行漏洞。这个漏洞的核心在于Nginx与PHP-FPM交互时对 PATH_INFO 参数的处理缺陷&#xff0c;攻击者可以通过精心构造的HTTP请求触发内存下溢&#xff0c;最终实现…

作者头像 李华
网站建设 2026/7/15 9:13:42

如何迁移Intero配置到新工具?无缝过渡Haskell开发环境指南

如何迁移Intero配置到新工具&#xff1f;无缝过渡Haskell开发环境指南 【免费下载链接】intero 项目地址: https://gitcode.com/gh_mirrors/in/intero 如果你是一名Haskell开发者&#xff0c;很可能已经使用过Intero这个强大的Emacs插件来提升开发效率。然而&#xff0…

作者头像 李华