diff --git a/.oebuild/features/minimal.yaml b/.oebuild/features/minimal.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e071f8b0322761d5472242904ff85ce8c7965495 --- /dev/null +++ b/.oebuild/features/minimal.yaml @@ -0,0 +1,21 @@ +type: feature + +support: hipico + +local_conf: | + EXTERNAL_TOOLCHAIN_LLVM = "/usr1/openeuler/llvm-musl-arm" + DISTRO_FEATURES:append = " clang ld-is-lld" + DISTRO_FEATURES_NATIVE:append = " clang " + EXTERNAL_TOOLCHAIN_CLANG_BIN = "${EXTERNAL_TOOLCHAIN_LLVM}/bin" + EXTERNAL_TOOLCHAIN_GCC:arm = "/usr1/openeuler/gcc/openeuler_gcc_arm32le-musl" + EXTERNAL_TARGET_SYS:arm = "arm-openeuler-linux-musleabi" + TCLIBC = "musl" + TCMODE-LIBC = "musl" + TCMODE-CRYPT = "musl" + MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "musl" + + DISTRO_FEATURES:append = " mini-img" + +layers: +- yocto-meta-openeuler/meta-clang +- yocto-meta-openeuler/meta-musl diff --git a/bsp/meta-hisilicon/recipes-kernel/linux/files/config/hipico/hipico_mini_defconfig b/bsp/meta-hisilicon/recipes-kernel/linux/files/config/hipico/hipico_mini_defconfig new file mode 100644 index 0000000000000000000000000000000000000000..cd1a1fbabf45cfbe304bf926293f157c284c17ab --- /dev/null +++ b/bsp/meta-hisilicon/recipes-kernel/linux/files/config/hipico/hipico_mini_defconfig @@ -0,0 +1,121 @@ +CONFIG_LOCALVERSION="-openeuler" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_XZ=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_MULTIUSER is not set +# CONFIG_SYSFS_SYSCALL is not set +# CONFIG_FHANDLE is not set +# CONFIG_POSIX_TIMERS is not set +# CONFIG_BUG is not set +# CONFIG_ELF_CORE is not set +# CONFIG_BASE_FULL is not set +# CONFIG_FUTEX is not set +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_TIMERFD is not set +# CONFIG_EVENTFD is not set +# CONFIG_SHMEM is not set +# CONFIG_AIO is not set +# CONFIG_IO_URING is not set +# CONFIG_ADVISE_SYSCALLS is not set +# CONFIG_MEMBARRIER is not set +# CONFIG_KALLSYMS is not set +# CONFIG_RSEQ is not set +CONFIG_EMBEDDED=y +# CONFIG_SLUB_DEBUG is not set +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB_MERGE_DEFAULT is not set +# CONFIG_SLUB_CPU_PARTIAL is not set +# CONFIG_KABI_RESERVE is not set +CONFIG_ARCH_BSP=y +CONFIG_ARCH_HI3516CV610=y +# CONFIG_CACHE_L2X0 is not set +# CONFIG_DEBUG_ALIGN_RODATA is not set +CONFIG_SMP=y +# CONFIG_ARM_CPU_TOPOLOGY is not set +CONFIG_VMSPLIT_3G_OPT=y +# CONFIG_ARM_PATCH_IDIV is not set +# CONFIG_CPU_SW_DOMAIN_PAN is not set +# CONFIG_ARM_MODULE_PLTS is not set +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_VFP=y +CONFIG_NEON=y +# CONFIG_SUSPEND is not set +# CONFIG_SECCOMP is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_CMDLINE_PARTITION=y +# CONFIG_MQ_IOSCHED_DEADLINE is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +# CONFIG_ENABLE_IPREC_DEBUG is not set +CONFIG_PAGE_REPORTING=y +CONFIG_KSM=y +CONFIG_ZBUD=y +CONFIG_ZSMALLOC=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_SPI_NAND_BSP=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_SPI_NAND_FMC100=y +CONFIG_MTD_SPI_NAND=y +CONFIG_MTD_UBI=y +CONFIG_INPUT_EVDEV=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_BSP=y +CONFIG_SPI=y +CONFIG_SPI_PL022=y +CONFIG_SPI_SPIDEV=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_GPIO_PL061=y +CONFIG_POWER_RESET_BSP=y +# CONFIG_HWMON is not set +CONFIG_MFD_BSP_FMC=y +CONFIG_MFD_SYSCON=y +# CONFIG_USB_SUPPORT is not set +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VHOST_MENU is not set +# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_PM_DEVFREQ=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +# CONFIG_NVMEM is not set +# CONFIG_DNOTIFY is not set +# CONFIG_INOTIFY_USER is not set +CONFIG_CONFIGFS_FS=y +CONFIG_UBIFS_FS=y +CONFIG_NLS=y +CONFIG_CRYPTO_MANAGER=y +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_HW is not set +CONFIG_XZ_DEC=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_ARM is not set +# CONFIG_XZ_DEC_ARMTHUMB is not set +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_MISC is not set +CONFIG_PANIC_ON_OOPS=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_FTRACE is not set diff --git a/bsp/meta-hisilicon/recipes-kernel/linux/linux-hipico.inc b/bsp/meta-hisilicon/recipes-kernel/linux/linux-hipico.inc index ae843c78311f07a00b079cd54de4499fceab49ae..020abfca689f7b67c1a14ddd2f758ecddef9cafb 100644 --- a/bsp/meta-hisilicon/recipes-kernel/linux/linux-hipico.inc +++ b/bsp/meta-hisilicon/recipes-kernel/linux/linux-hipico.inc @@ -6,13 +6,13 @@ DEPENDS += "u-boot-tools-native dtc-native" OPENEULER_REPO_NAMES = "kernel-5.10-tag626 src-kernel-5.10-tag626" -OPENEULER_KERNEL_CONFIG = "file://config/hipico/hipico_debug_defconfig" +OPENEULER_KERNEL_CONFIG = "file://config/hipico/${@bb.utils.contains('DISTRO_FEATURES', 'mini-img', 'hipico_mini_defconfig', 'hipico_debug_defconfig', d)}" PV = "5.10-tag626" SRC_URI:append = " \ file://patch/0001-hipico-kernel-510-patch-d8e3bcbbe.patch \ - file://config/hipico/hipico_debug_defconfig \ + file://config/hipico/${@bb.utils.contains('DISTRO_FEATURES', 'mini-img', 'hipico_mini_defconfig', 'hipico_debug_defconfig', d)} \ file://dtbs/hipico.dts \ file://its/linux_image.its \ " diff --git a/meta-musl/recipes-external/musl/musl_%.bbappend b/meta-musl/recipes-external/musl/musl_%.bbappend index fa3de277817fea467c68d27f397888b0f8bc73e9..716f54a41c312f1cb6f5cde1bc961729096fadce 100644 --- a/meta-musl/recipes-external/musl/musl_%.bbappend +++ b/meta-musl/recipes-external/musl/musl_%.bbappend @@ -20,3 +20,7 @@ FILES:${PN}:append:riscv64 = " \ ${base_libdir}/../lib64/lp64d/ld-musl-riscv64.so.1 \ ${sysconfdir}/ld-musl-riscv64.path \ " + +FILES:${PN}:append:arm = " \ + ${base_libdir}/ld-musl-arm.so.1 \ +" diff --git a/meta-musl/recipes-external/musl/musl_1.2.3.bb b/meta-musl/recipes-external/musl/musl_1.2.3.bb index cf766a08048c19f76d83303ab9a86cfe9730fd9b..a0467d41bb34c441a1c12a486c5c91047ef051d8 100644 --- a/meta-musl/recipes-external/musl/musl_1.2.3.bb +++ b/meta-musl/recipes-external/musl/musl_1.2.3.bb @@ -21,6 +21,10 @@ PROVIDES += "virtual/libc \ DEPENDS = "bsd-headers \ libssp-nonshared \ " + +DEPENDS:arm = " \ + libssp-nonshared \ + " INHIBIT_DEFAULT_DEPS = "1" PR = "r1" @@ -54,9 +58,13 @@ musl_external_do_install_extra(){ # Support perf compile # Due to musl missing __always_inline definition - sed -i '/#include /a\#include ' ${D}${includedir}/linux/swab.h - sed -i '/#include /a\#include ' ${D}${includedir}/linux/byteorder/little_endian.h - + if ${@bb.utils.contains('DISTRO_FEATURES', 'mini-img', 'false', 'true', d)}; then + # 支持 perf 编译 + # 由于 musl 缺少 __always_inline 定义 + sed -i '/#include /a\#include ' ${D}${includedir}/linux/swab.h + sed -i '/#include /a\#include ' ${D}${includedir}/linux/byteorder/little_endian.h + fi + # Delete conflict file rm -f ${D}${base_libdir}/libgcc_s.so rm -f ${D}${base_libdir}/libgcc_s.so.1 @@ -80,6 +88,7 @@ FILES:${PN}-staticdev = " \ " # Add depend package RDEPENDS:${PN} += " bsd-headers gcompat gcompat-dev" +RDEPENDS:${PN}:remove:arm = "gcompat gcompat-dev" INSANE_SKIP:${PN} += "installed-vs-shipped" INSANE_SKIP += "dev-elf dev-so" diff --git a/meta-openeuler/classes/openeuler.bbclass b/meta-openeuler/classes/openeuler.bbclass index 9e918dec6759b12c13ed5c1be39182ee0ae40cf5..888377f415656d03529b6449ba7862db8d48d138 100644 --- a/meta-openeuler/classes/openeuler.bbclass +++ b/meta-openeuler/classes/openeuler.bbclass @@ -3,6 +3,28 @@ ## openeuler.bbclass is inherited after base.bbclass, ## some definitions in it can be overridden here +# When using the Clang compiler to build the target, we still employ +# GCC to compile native packages. The following settings reconfigure +# the toolchain-related parameters to enforce the use of the x86 GCC +# compiler for compilation +CC:toolchain-clang:class-native = "${BUILD_CC}" +CXX:toolchain-clang:class-native = "${BUILD_CXX}" +CPP:toolchain-clang:class-native = "${BUILD_CPP}" +CCLD:toolchain-clang:class-native = "${BUILD_CCLD}" +RANLIB:toolchain-clang:class-native = "${BUILD_RANLIB}" +AR:toolchain-clang:class-native = "${BUILD_AR}" +NM:toolchain-clang:class-native = "${BUILD_NM}" +OBJDUMP:toolchain-clang:class-native = "objdump" +OBJCOPY:toolchain-clang:class-native = "objcopy" +STRIP:toolchain-clang:class-native = "${BUILD_STRIP}" +STRINGS:toolchain-clang:class-native = "strings" +READELF:toolchain-clang:class-native = "readelf" +CPPFLAGS:toolchain-clang:class-native = "${BUILD_CPPFLAGS}" +CFLAGS:toolchain-clang:class-native = "${BUILD_CFLAGS}" +CXXFLAGS:toolchain-clang:class-native = "${BUILD_CXXFLAGS}" +LDFLAGS:toolchain-clang:class-native = "${BUILD_LDFLAGS}" +TOOLCHAIN:class-native = "gcc" + # for openeuler embedded it is no need to create DL_DIR, here we use # ${OPENEULER_SP_DIR}/${OPENEULER_LOCAL_NAME} to represent download # directory for each software package. OPENEULER_SP_DIR diff --git a/meta-openeuler/dynamic-layers/clang-layer/recipes-core/busybox/busybox_%.bbappend b/meta-openeuler/dynamic-layers/clang-layer/recipes-core/busybox/busybox_%.bbappend index 066bc0548e5213fe37be9ebe1ad1e3aab6bbad3e..fdc02956616e02516179c7d90ba3dbf99cf52d6b 100644 --- a/meta-openeuler/dynamic-layers/clang-layer/recipes-core/busybox/busybox_%.bbappend +++ b/meta-openeuler/dynamic-layers/clang-layer/recipes-core/busybox/busybox_%.bbappend @@ -1,2 +1,2 @@ CFLAGS:append:raspberrypi4-64 = " -DBB_GLOBAL_CONST='' " -CC:append:toolchain-clang = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}" +CC:append:toolchain-clang = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}" \ No newline at end of file diff --git a/meta-openeuler/recipes-core/busybox/busybox_%.bbappend b/meta-openeuler/recipes-core/busybox/busybox_%.bbappend index 70f2afb8873f331acc918fe10aa3e10d9d22aed6..3ba7d180a0a2c7c7b354b84aba5f42a89d3e21be 100644 --- a/meta-openeuler/recipes-core/busybox/busybox_%.bbappend +++ b/meta-openeuler/recipes-core/busybox/busybox_%.bbappend @@ -34,17 +34,21 @@ SRC_URI:append = " \ # support NFS, which depends on libtirpc DEPENDS += "libtirpc" +DEPENDS:remove = "${@bb.utils.contains('TCLIBC', 'musl', 'libtirpc', '', d)}" CFLAGS += "${@bb.utils.contains('DEPENDS', 'libtirpc', '-I${STAGING_INCDIR}/tirpc', '', d)}" + do_prepare_config:append () { set +e - grep -E '^CONFIG_FEATURE_MOUNT_NFS=y|^CONFIG_FEATURE_INETD_RPC=y' ${S}/.config - ret=$? - if [ $ret -eq 0 ]; then - grep -E '^CONFIG_EXTRA_CFLAGS=".*-I/usr/include/tirpc|^CONFIG_EXTRA_LDLIBS=".*tirpc' ${S}/.config + if ! ${@bb.utils.contains('DISTRO_FEATURES', 'mini-img', 'true', 'false', d)}; then + grep -E '^CONFIG_FEATURE_MOUNT_NFS=y|^CONFIG_FEATURE_INETD_RPC=y' ${S}/.config ret=$? - if [ $ret -ne 0 ]; then - sed -i 's/^CONFIG_EXTRA_LDLIBS="/CONFIG_EXTRA_LDLIBS="tirpc /g' ${S}/.config + if [ $ret -eq 0 ]; then + grep -E '^CONFIG_EXTRA_CFLAGS=".*-I/usr/include/tirpc|^CONFIG_EXTRA_LDLIBS=".*tirpc' ${S}/.config + ret=$? + if [ $ret -ne 0 ]; then + sed -i 's/^CONFIG_EXTRA_LDLIBS="/CONFIG_EXTRA_LDLIBS="tirpc /g' ${S}/.config + fi fi fi set -e diff --git a/meta-openeuler/recipes-core/images/openeuler-image-minimal.bb b/meta-openeuler/recipes-core/images/openeuler-image-minimal.bb new file mode 100644 index 0000000000000000000000000000000000000000..a0ebb4ace0fd786d9927652d324fd932ea7f34b9 --- /dev/null +++ b/meta-openeuler/recipes-core/images/openeuler-image-minimal.bb @@ -0,0 +1,57 @@ +include recipes-core/images/image-early-config-${MACHINE}.inc +require openeuler-image-common.inc + +# not build sdk +deltask populate_sdk + +DEPENDS = "linux-openeuler busybox run-postinsts" +RDEPENDS = "" +PACKAGE_INTALL = "kernel-img busybox musl" +# origin set is packagegroup-core-ssh-openssh +FEATURE_INSTALL = "" +# we don't need extra users +EXTRA_USERS_PARAMS = "" + +IMAGE_INSTALL = " \ + kernel-img \ + busybox \ + musl \ +" + +create_other_directory() { + cd "${IMAGE_ROOTFS}" + mv linuxrc init + mkdir -p {dev,proc,sys,tmp,run} + # delete etc + rm -rf etc/* + mkdir -p etc/init.d + cat > etc/init.d/rcS < etc/fstab < etc/profile <