基于openEuler Embedded的SDK应用开发

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

1. 安装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.09.sh
    

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

    举例如下:

    sh ./openeuler-glibc-x86_64-openeuler-image-armv7a-qemu-arm-toolchain-22.09.sh
    
    openEuler embedded(openEuler Embedded Reference Distro) SDK installer version 22.09
    ================================================================
    
    Enter target directory for SDK (default: /opt/openeuler/22.09): 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
    

2. 使用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"。

3. 使用SDK编译内核模块样例

  1. 准备代码

    以编译一个内核模块为例,运行在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键,非空格键。

  2. 编译生成内核模块

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

    make
    

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

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

  3. 插入内核模块

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

    insmod hello.ko
    

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

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

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

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

● 英文中包含中文字符;

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

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

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

易用性

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

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

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

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

正确性

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

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

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

● 代码片段错误;

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

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

风险提示

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

内容合规

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

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。