基于openEuler Embedded的SDK应用开发

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

安装SDK

  1. 执行SDK自解压安装脚本

运行如下命令:

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

根据提示输入工具链的安装路径,默认路径是/opt/openeuler/\<openeuler 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
  1. 设置SDK环境变量

运行source命令。上例中前一步执行结束最后已打印source命令,运行即可。

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

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

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");
}

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

project(hello C)

add_executable(hello hello.c)
  1. 编译生成二进制

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

cmake ..
make

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

  1. 运行用户态程序

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

cd /tmp/myfiles/
./hello

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

使用SDK编译内核模块样例

  1. 准备环境

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

cd <SDK_PATH>/sysroots/<target>-openeuler-linux/usr/src/kernel
make  module_prepare
  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后会被自动设置。

  1. 编译生成内核模块

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

make

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

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

  1. 插入内核模块

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

insmod hello.ko

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

有奖捉虫 help

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

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

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

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

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

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

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

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

内容获取有困难

● 很难通过搜索引擎,openEuler官网,相关博客找到所需内容;

示例代码错误

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

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

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

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

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。

一共有个关于的结果