长期支持版本

    社区创新版本

      基于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备份