diff --git a/rtos/meta-openeuler-rtos/README.md b/rtos/meta-openeuler-rtos/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/rtos/meta-openeuler-rtos/conf/layer.conf b/rtos/meta-openeuler-rtos/conf/layer.conf new file mode 100644 index 0000000000000000000000000000000000000000..1a3de1c871d0c3e9648d4cca136a9bee4b7aae43 --- /dev/null +++ b/rtos/meta-openeuler-rtos/conf/layer.conf @@ -0,0 +1,28 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH =. "${LAYERDIR}:" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "openeuler-rtos" +BBFILE_PATTERN_openeuler-rtos = "^${LAYERDIR}/" +BBFILE_PRIORITY_openeuler-rtos = "25" + +LAYERSERIES_COMPAT_openeuler-rtos = "hardknott" +#no bb file under meta-openeuler-rtos, set it to 1 to ignore "No bb files" warning +BBFILE_PATTERN_IGNORE_EMPTY_openeuler-rtos = "1" + + +#enable RTOS specific .bb +BBFILES_DYNAMIC += " \ +rtthread:${LAYERDIR}/rtthread/*.bb \ +rtthread:${LAYERDIR}/rtthread/*.bbappend \ +" +# Most rtos can't be built directly with xxx-linux-gcc toolchain, because of C library +# A baremetal gcc toolchain is needed. The following variables are used to +# describe the baremetal gcc toolchain. By default, Zephyr Project's toolchain +# is used and can be downloaded from Zephyr Project's github repo. +OPENEULER_RTOS_TOOLCHAIN_DIR_aarch64 ?= "/opt/zephyr-sdk/aarch64-zephyr-elf/bin" +OPENEULER_RTOS_TOOLCHAIN_PREFIX_aarch64 ?= "aarch64-zephyr-elf-" + diff --git a/rtos/meta-rtthread/README.md b/rtos/meta-rtthread/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c9f2232e51daa4cb9380555c7339685eda165e79 --- /dev/null +++ b/rtos/meta-rtthread/README.md @@ -0,0 +1,31 @@ +# RT-Thread 构建支持 + +本元构建层(meta-layer)包含了在openEuler Yocto构建环境下集成构建RT-Thread的相关配置和配方。 + +## 使用 + +1. RT-Thread代码包的准备: 应事先将RT-Thread的[代码包](https://github.com/RT-Thread/rt-thread/archive/refs/tags/v4.0.5.tar.gz)下载放于OPENEULER_SP_DIR中,目录和文件名格式为rtthread/rtthread-${PV}.tar.gz.当前支持的最新版本是4.0.5 + +2. 在Yocto构建目录的bblayers.conf中添加相应的元构建层 + +``` + BBLAYERS ?= "\ + ...... + xxxxx/yocto-meta-openeuler/rtos/meta-openeuler-rtos \ + xxxxx/yocto-meta-openeuler/rtos/meta-rtthread \ + " +``` + +3. 构建rt-thread所需工具。构建rt-thread需要在构建主机上安装好scons构建工具,并在meta-openeuler-rtos/conf/layer.conf中填好构建RT-Thread所需工具链的路径和前缀。目前构建RT-Thread不能使用构建Linux的GCC工具链,例如xxx-linux-glibc-gcc,需要集成newlibc的工具链。一个例子如下所示: + +``` +OPENEULER_RTOS_TOOLCHAIN_DIR_aarch64 ?= "/opt/zephyr-sdk/aarch64-zephyr-elf/bin" +OPENEULER_RTOS_TOOLCHAIN_PREFIX_aarch64 +``` + +4. 构建rt-thread. +``` + bitbake rtthread +``` + +rtthread构建的结果文件会安装在/lib/rtthread目录,并打包成rpm文件。 \ No newline at end of file diff --git a/rtos/meta-rtthread/conf/layer.conf b/rtos/meta-rtthread/conf/layer.conf new file mode 100644 index 0000000000000000000000000000000000000000..b2b64650fd42cafae4b3e98fad7583381f044173 --- /dev/null +++ b/rtos/meta-rtthread/conf/layer.conf @@ -0,0 +1,19 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*.bb \ + ${LAYERDIR}/recipes-*/*.bbappend" + +BBFILE_COLLECTIONS += "rtthread" +BBFILE_PATTERN_rtthread = "^${LAYERDIR}/" +BBFILE_PRIORITY_rtthread = "24" + +LAYERVERSION_rtthread = "1" + +LAYERDEPENDS_rtthread = "core" + +LAYERSERIES_COMPAT_rtthread = "hardknott" + +# rtthread is built with scons +HOSTTOOLS_append = " scons" diff --git a/rtos/meta-rtthread/recipes-kernel/files/0001-bsp-modify-the-rtconfig.py-for-openeuler.patch b/rtos/meta-rtthread/recipes-kernel/files/0001-bsp-modify-the-rtconfig.py-for-openeuler.patch new file mode 100644 index 0000000000000000000000000000000000000000..c0ff5d7c91f1c923539f6051fb629f946886e618 --- /dev/null +++ b/rtos/meta-rtthread/recipes-kernel/files/0001-bsp-modify-the-rtconfig.py-for-openeuler.patch @@ -0,0 +1,44 @@ +From 9a2252f77d2beadc68ba6cdc03b3019f48db8220 Mon Sep 17 00:00:00 2001 +From: Wayne Ren +Date: Fri, 18 Feb 2022 21:32:59 +0800 +Subject: [PATCH] bsp: modify the rtconfig.py for openeuler + +- change toolchain prefix +- openeuler supports cortex-a57 + +Signed-off-by: Wayne Ren +--- + bsp/qemu-virt64-aarch64/rtconfig.py | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/bsp/qemu-virt64-aarch64/rtconfig.py b/bsp/qemu-virt64-aarch64/rtconfig.py +index e46a4374a..ebcc4b03e 100644 +--- a/bsp/qemu-virt64-aarch64/rtconfig.py ++++ b/bsp/qemu-virt64-aarch64/rtconfig.py +@@ -27,7 +27,13 @@ BUILD = 'debug' + + if PLATFORM == 'gcc': + # toolchains +- PREFIX = 'aarch64-elf-' ++ if os.getenv('OPENEULER_RTT_GCC_PREFIX'): ++ PREFIX = os.getenv('OPENEULER_RTT_GCC_PREFIX') ++ TARGET_TUNE = ' -g -march=armv8-a -mtune=cortex-a57' ++ else: ++ PREFIX = 'aarch64-elf-' ++ TARGET_TUNE = ' -g -march=armv8-a -mtune=cortex-a53' ++ + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' +@@ -38,7 +44,7 @@ if PLATFORM == 'gcc': + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + +- DEVICE = ' -g -march=armv8-a -mtune=cortex-a53' ++ DEVICE = TARGET_TUNE + CFLAGS = DEVICE + ' -Wall' + AFLAGS = ' -c' + ' -x assembler-with-cpp -D__ASSEMBLY__' + LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors -T link.lds' +-- +2.30.2 + diff --git a/rtos/meta-rtthread/recipes-kernel/rtthread.inc b/rtos/meta-rtthread/recipes-kernel/rtthread.inc new file mode 100644 index 0000000000000000000000000000000000000000..dbcf499f332a007a2d1329a133f36eead7591540 --- /dev/null +++ b/rtos/meta-rtthread/recipes-kernel/rtthread.inc @@ -0,0 +1,98 @@ +### Descriptive metadata: SUMMARY,DESCRITPION, HOMEPAGE, AUTHOR, BUGTRACKER +SUMMARY = "RT-Thread " +DESCRITPION = "A well-known open source RTOS from China" +AUTHOR = "" +HOMEPAGE = "https://github.com/RT-Thread/rt-thread" +BUGTRACKER = "https://gitee.com/openeuler/yocto-meta-openeuler" +### Package manager metadata: SECTION, PRIOIRTY(only for deb, opkg) +SECTION = "RTOS" + +### License metadata +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +### Inheritance and includes if needed +## rtthread is built by scons, so we need to inherit scons.bbclass +#inherit scons + +### Build metadata: SRC_URI, SRCDATA, S, B, FILESEXTRAPATHS.... +SRC_URI = "file://rtthread/rtthread-${PV}.tar.gz \ + file://0001-bsp-modify-the-rtconfig.py-for-openeuler.patch" + +S = "${WORKDIR}/${BPN}-${PV}" + +# the software packages required in build +# rtthread needs to be built with gcc toolchain with newlibc +# it's better to use pre-built toolchain, e.g. aarch64-elf-xxx +# DEPENDS = + +# according to yocto's parameters, e.g., MACHINE, ARCH, to get +# rtthread's parameters + +export RTT_EXEC_PATH = "${OPENEULER_RTOS_TOOLCHAIN_DIR}" +export RTT_CC = "gcc" +export OPENEULER_RTT_GCC_PREFIX = "${OPENEULER_RTOS_TOOLCHAIN_PREFIX}" + + +def get_rtthread_bsp(d): + + supported_machine = { + "qemu_aarch64": "qemu-virt64-aarch64", + } + + machine = d.getVar("MACHINE_ARCH",True) + + if not machine in supported_machine: + bb.error("unsupported target arch:%s" % machine) + return "" + + return "bsp/" + supported_machine[machine] + +RTTHREAD_BSPDIR = "${@get_rtthread_bsp(d)}" + +# alias package name +PROVIDES += "rtthread" + +### Runtime metadata +#HOSTOOLS += "scons" +PACKAGES = "${PN}" +### Package metadata +FILES_${PN} = " \ + ${libdir}/rtthread/rtthread.elf \ + ${libdir}/rtthread/rtthread.bin \ + ${libdir}/rtthread/rtthread.map \ +" +### Tasks for package +python () { + d.delVar('CFLAGS') + d.delVar('CXXFLAGS') + d.delVar('LDFLAGS') + d.delVar('CC') + d.delVar('AR') + d.delVar('LD') + d.delVar('NM') + d.delVar('OBJCOPY') +} + +#bypass package_qa as the deleted LDFLAGS will cause error +do_package_qa() { + echo "do package qa" +} + +#bypass configure as RTT has no configure phase +do_configure() { + : +} + +#call host's scons to compile rtt. You need to install the +#host tools required by rtt +do_compile() { + pushd ${S}/${RTTHREAD_BSPDIR} + scons + popd +} + +do_install() { + install -d ${D}${libdir}/rtthread + install -m 644 -D ${S}/${RTTHREAD_BSPDIR}/rtthread.* ${D}${libdir}/rtthread/ +} diff --git a/rtos/meta-rtthread/recipes-kernel/rtthread_4.0.5.bb b/rtos/meta-rtthread/recipes-kernel/rtthread_4.0.5.bb new file mode 100644 index 0000000000000000000000000000000000000000..9c474d820e61183c4e7b988c903b2d1e66cbafde --- /dev/null +++ b/rtos/meta-rtthread/recipes-kernel/rtthread_4.0.5.bb @@ -0,0 +1 @@ +require rtthread.inc \ No newline at end of file