长期支持版本

    基于openEuler Embedded的SDK应用开发

    当前发布的镜像除了体验openEuler Embedded的基本功能外,还可以进行基本的应用开发,也即在openEuler Embedded上运行用户自己的程序。本章主要介绍如何基于openEuler Embedded的SDK进行应用开发。

    安装SDK

    1. 安装依赖软件包

      使用SDK开发内核模块需要安装一些必要的软件包,运行如下命令:

      在 openEuler 上安装:
      yum install make gcc g++ flex bison gmp-devel libmpc-devel openssl-devel
      
      在 Ubuntu 上安装:
      apt-get install make gcc g++ flex bison libgmp3-dev libmpc-dev libssl-dev
      
    2. 执行SDK自解压安装脚本

      运行如下命令:

      sh openeuler-glibc-x86_64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.sh
      

      根据提示输入工具链的安装路径,默认路径是/opt/openeuler/<openeuler embedded version>/。若不设置,则按默认路径安装,也可以配置相对路径或绝对路径。

      举例如下:

      sh ./openeuler-glibc-x86_64-openeuler-image-armv7a-qemu-arm-toolchain-22.03.sh
      
      openEuler embedded(openEuler Embedded Reference Distro) SDK installer version 22.03
      ================================================================
      
      Enter target directory for SDK (default: /opt/openeuler/22.03): sdk
      You are about to install the SDK to "/usr1/openeuler/sdk". Proceed [Y/n]? y
      Extracting SDK...............................................done
      Setting it up...SDK has been successfully set up and is ready to be used.
      Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
      $ . /usr1/openeuler/sdk/environment-setup-armv7a-openeuler-linux-gnueabi
      
    3. 设置SDK环境变量

      运行source命令。第2步执行结束后已打印source命令,直接运行即可。

      . /usr1/openeuler/myfiles/sdk/environment-setup-armv7a-openeuler-linux-gnueabi
      
    4. 查看是否安装成功

      运行如下命令,查看是否安装成功、环境设置成功。

      arm-openeuler-linux-gnueabi-gcc -v
      

    使用SDK编译hello world样例

    1. 准备代码

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

      创建一个hello.c文件,源码如下:

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

      编写CMakeLists.txt,和hello.c文件放在同一个目录。

      project(hello C)
      
      add_executable(hello hello.c)
      
    2. 编译生成二进制

      进入hello.c文件所在目录,使用工具链编译,命令如下:

      cmake ..
      make
      

      把编译好的hello程序拷贝到openEuler Embedded系统的/tmp/某个目录下(例如/tmp/myfiles/)。如何拷贝可以参考前文所述使能共享文件系统场景

    3. 运行用户态程序

      在openEuler Embedded系统中运行hello程序。

      cd /tmp/myfiles/
      ./hello
      

      如运行成功,则会输出"hello world"。

    使用SDK编译内核模块样例

    1. 准备环境

      在设置好SDK环境的基础之上,编译内核模块还需准备相应环境,但只需要准备一次即可。运行如下命令会创建相应的内核模块编译环境:

      cd <SDK_PATH>/sysroots/<target>-openeuler-linux/usr/src/kernel
      make  modules_prepare
      
    2. 准备代码

      以编译一个内核模块为例,运行在openEuler Embedded内核中。

      创建一个hello.c文件,源码如下:

      #include <linux/init.h>
      #include <linux/module.h>
      
      static int hello_init(void)
      {
          printk("Hello, openEuler Embedded!\r\n");
          return 0;
      }
      
      static void hello_exit(void)
      {
          printk("Byebye!");
      }
      
      module_init(hello_init);
      module_exit(hello_exit);
      
      MODULE_LICENSE("GPL");
      

      编写Makefile,和hello.c文件放在同一个目录:

       KERNELDIR := ${KERNEL_SRC_DIR}
       CURRENT_PATH := $(shell pwd)
      
       target := hello
       obj-m := $(target).o
      
       build := kernel_modules
      
       kernel_modules:
       		$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
       clean:
       		$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
      

      说明:

      • KERNEL_SRC_DIR 为SDK中内核源码树的目录,该变量在安装SDK后会被自动设置。

      • $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean代码前均为Tab键,非空格键。

    3. 编译生成内核模块

      进入hello.c文件所在目录,使用工具链编译,命令如下:

      make
      

      将编译好的hello.ko拷贝到openEuler Embedded系统的目录下。

      如何拷贝可以参考前文所述使能共享文件系统场景

    4. 插入内核模块

      在openEuler Embedded系统中插入内核模块:

      insmod hello.ko
      

      如运行成功,则会在内核日志中出现"Hello, openEuler Embedded!"。

    文档捉虫

    “有虫”文档片段

    问题描述

    提交类型 issue

    有点复杂...

    找人问问吧。

    PR

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

    一键搞定!

    问题类型
    规范和低错类

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

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

    ● 英文中包含中文字符;

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

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

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

    易用性

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

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

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

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

    正确性

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

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

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

    ● 代码片段错误;

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

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

    风险提示

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

    内容合规

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

    ● 内容侵权;

    您对文档的总体满意度

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