长期支持版本

    社区创新版本

      openEuler Embedded使用文档

      openEuler Embedded是基于openEuler社区面向嵌入式场景的Linux版本。由于嵌入式系统应用受到多个因素的约束,如资源、功耗、多样性等,使得面向服务器领域的Linux及相应的构建系统很难满足嵌入式场景的要求,因此业界广泛采用Yocto来定制化构建嵌入式Linux。openEuler Embedded当前也采用的Yocto构建,但实现了与openEuler其他版本代码同源,具体的构建方法请参考SIG-Yocto下相关代码仓中的内容。

      本文档主要用于介绍如何获取预先构建好的镜像,如何运行镜像,以及如何基于镜像完成基本的嵌入式Linux应用开发。

      获取镜像

      当前发布的已构建好的镜像,只支持arm和aarch64两种架构,且只支持qemu中ARM virt-4.0平台,您可以通过如下链接获得相应的镜像:

      • qemu_arm: 32位arm架构, ARM Cortex A15处理器
      • qemu_aarch64: 64位aarch64架构 ARM Cortex A57处理器

      只要相应环境支持qemu仿真器(版本5.0以上),您可以将提供的openEuler Embedded镜像部署在物理裸机、云环境、容器或虚拟机上。

      镜像内容

      所下载的镜像,由以下几部分组成:

      • 内核镜像zImage: 基于openEuler社区Linux 5.10代码构建得到。相应的内核配置可通过如下链接获取:

      • 根文件系统镜像(依据具体需求,以下二选一)

        • initrd_tiny:极简根文件系统镜像,只包含基本功能。包含 busybox 和基本的 glibc 库。该镜像功能简单,但内存消耗很小,适合探索 Linux内核相关功能。
        • initrd:标准根文件系统镜像,在极简根文件系统镜像的基础上,进行了必要安全加固,增加了audit、cracklib、OpenSSH、Linux PAM、shadow、iSula容器等软件包。该镜像适合进行更加丰富的功能探索。

      运行镜像

      通过运行镜像,一方面您可以体验openEuler Embedded的功能,一方面也可以完成基本的嵌入式Linux开发。


      注意事项

      • 建议使用QEMU5.0以上版本运行镜像,由于一些额外功能(网络、共享文件系统)需要依赖QEMU的virtio-net, virtio-fs等特性,如未在QEMU中使能,则运行时可能会产生错误,此时可能需要从源码重新编译QEMU。

      • 运行镜像时,建议把内核镜像和根文件系统镜像放在同一目录下,后续说明以标准根文件系统为例(initrd)。


      极简运行场景

      该场景下,qemu未使能网络和共享文件系统,适合快速的功能体验。

      针对arm(ARM Cortex A15),运行如下命令:

      qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd
      

      针对aarch64(ARM Cortex A57),运行如下命令:

      qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd
      

      由于标准根文件系统镜像进行了安全加固,因此第一次启动时,需要为登录用户名root设置密码,且密码强度有相应要求, 需要数字、字母、特殊字符组合最少8位,例如openEuler@2021。当使用极简根文件系统镜像时,系统会自动登录, 无需输入用户名和密码。

      qemu运行成功并登录后,将会呈现openEuler Embedded的Shell。

      使能共享文件系统场景

      通过共享文件系统,可以使得运行qemu仿真器的宿主机和openEuler Embedded共享文件,这样在宿主机上交叉编译的程序,拷贝到共享目录中,即可在openEuler Embedded上运行。

      假设将宿主机的/tmp目录作为共享目录,并事先在其中创建了名为hello_openeuler.txt的文件,使能共享文件系统功能的操作指导如下:

      1. 启动qemu

      针对arm(ARM Cortex A15),运行如下命令:

      qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd -device virtio-9p-device,fsdev=fs1,mount_tag=host -fsdev local,security_model=passthrough,id=fs1,path=/tmp
      

      针对aarch64(ARM Cortex A57),运行如下命令:

      qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd -device virtio-9p-device,fsdev=fs1,mount_tag=host -fsdev local,security_model=passthrough,id=fs1,path=/tmp
      
      1. 映射文件系统

      在openEuler Embedded启动并登录之后,需要运行如下命令,映射(mount)共享文件系统

      cd /tmp
      mkdir host
      mount -t 9p -o trans=virtio,version=9p2000.L host /tmp/host
      

      即把共享文件系统映射到openEuler Embedded的/tmp/host目录下。

      1. 检查共享是否成功

      在openEuler Embedded中,运行如下命令:

      cd /tmp/host
      ls
      

      如能发现hello_openeuler.txt,则共享成功。

      使能网络场景

      通过qemu的virtio-net和宿主机上的虚拟网卡,可以实现宿主机和openEuler embedded之间的网络通信。

      1. 启动qemu

      针对arm(ARM Cortex A15),运行如下命令:

      qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=/etc/qemu-ifup
      

      针对aarch64(ARM Cortex A57),运行如下命令:

      qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=/etc/qemu-ifup
      
      1. 宿主上建立虚拟网卡

      在宿主机上需要建立名为tap0的虚拟网卡,可以借助/etc/qemu-ifup脚本实现,其执行需要root权限,具体内容如下:

      #!/bin/bash
      ifconfig $1 192.168.10.1 up
      

      通过qemu-ifup脚本,宿主机上将创建名为tap0的虚拟网卡,地址为192.168.10.1。

      1. 配置openEuler embedded网卡

      openEuler Embedded登录后,执行如下命令:

      ifconfig eth0 192.168.10.2
      
      1. 确认网络连通

      在openEuler Embedded中,执行如下命令:

      ping 192.168.10.1
      

      如能ping通,则宿主机和openEuler Embedded之间的网络是连通的。


      注意事项

      如需openEuler embedded借助宿主机访问互联网,则需要在宿主机上建立网桥,此处不详述,如有需要,请自行查阅相关资料。


      基于openEuler embedded的用户态应用开发

      当前发布的镜像除了体验openEuler Embedded的基本功能外,还可以进行基本的用户态应用开发,也即在openEuler embedded上运行用户自己的程序。

      1. 环境准备

      由于当前镜像采用了linaro arm/aarch64 gcc 7.3.1工具链构建,因此建议应用开发也使用相同的工具链接进行,可以从如下链接中获取相应工具链:

      下载并解压到指定的目录中,例如/opt/openEuler_toolchain。

      1. 创建并编译用户态程序

      以构建一个hello openEuler程序为例,运行在aarch64的标准根文件系统镜像中。

      在宿主机中,创建一个hello.c文件,源码如下:

      #include <stdio.h>
      
      int main(void)
      {
          printf("hello openEuler\r\n");
      }
      

      然后在宿主机上使用对应的工具链编译, 相应命令如下:

      export PATH=$PATH:/opt/openEuler_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin
      aarch64-linux-gnu-gcc --sysroot=<path-to-sysroot-glibc-linaro-2.25-2018.05-aarch64-linux-gnu> hello.c -o hello
      mv hello /temp
      

      把交叉编译好的hello程序拷贝到/tmp目录下,然后参照使能共享文件系统中的描述,使得openEuler embedded可以访问宿主机的目录。

      1. 运行用户态程序

      在openEuler embedded中运行hello程序。

      cd /tmp/
      ./hello
      

      如运行成功,openEuler Embedded的shell中就会输出hello openEuler。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份