Message ID | tencent_267933F59FABC482631A00CC38E64BD83205@qq.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/2] configs/milkv_duo: new defconfig | expand |
Hi Hanyuan, thank for contributing, one important note is to swap Patch 1/2 and 2/2. This is because they are bisectable this way since on Patch 1/2 you enable packages appearing in Patch 2/2, also, On 02/12/23 03:57, hanyuan wrote: > Milk-V Duo is an ultra-compact embedded development platform based on the CV1800B chip. > It can run Linux and RTOS, providing a reliable, low-cost, and high-performance platform > for professionals, industrial ODMs, AIoT enthusiasts, DIY hobbyists, and creators. can you please provide the board product webpage URL here? And also some ION indications too? > Co-authored-by: Emil S <emil.soltys@outlook.com> > Co-authored-by: GP Orcullo <kinsamanka@gmail.com> > Signed-off-by: Hanyuan Zhao <hanyuan-z@qq.com> > --- > board/milkv/duo/genimage.cfg | 25 ++++++++ > board/milkv/duo/post-image.sh | 58 ++++++++++++++++++ > board/milkv/duo/readme.txt | 49 +++++++++++++++ > configs/milkv_duo_musl_riscv64_defconfig | 63 ++++++++++++++++++++ > configs/milkv_duo_musl_riscv64_ion_defconfig | 63 ++++++++++++++++++++ > 5 files changed, 258 insertions(+) > create mode 100644 board/milkv/duo/genimage.cfg > create mode 100755 board/milkv/duo/post-image.sh > create mode 100644 board/milkv/duo/readme.txt > create mode 100644 configs/milkv_duo_musl_riscv64_defconfig > create mode 100644 configs/milkv_duo_musl_riscv64_ion_defconfig > > diff --git a/board/milkv/duo/genimage.cfg b/board/milkv/duo/genimage.cfg > new file mode 100644 > index 0000000000..1fd74f845a > --- /dev/null > +++ b/board/milkv/duo/genimage.cfg > @@ -0,0 +1,25 @@ > +image boot.vfat { > + vfat { > + files = { > + "fip.bin", > + "boot.sd", > + } > + } > + size = 8M > +} > + > +image sdcard.img { > + hdimage { > + } > + > + partition boot { > + partition-type = 0xC > + bootable = "true" > + image = "boot.vfat" > + } > + > + partition rootfs { > + partition-type = 0x83 > + image = "rootfs.ext4" > + } > +} > diff --git a/board/milkv/duo/post-image.sh b/board/milkv/duo/post-image.sh > new file mode 100755 > index 0000000000..6dc6d7853b > --- /dev/null > +++ b/board/milkv/duo/post-image.sh > @@ -0,0 +1,58 @@ > +#!/bin/sh > + > +########################################################### > +# File: post-image.sh > +# Author: GP Orcullo <kinsamanka@gmail.com> > +# Hanyuan Zhao <zhaohy22@mails.tsinghua.edu.cn> > +# Description: this sh will make the fip.bin and boot.sd, > +# then pack everything to an image file. > +########################################################### > + > +if [ -f ${BINARIES_DIR}/cvirtos.bin ]; then > + ${BINARIES_DIR}/fiptool.py genfip ${BINARIES_DIR}/fip.bin \ > + --MONITOR_RUNADDR=0x80000000 \ > + --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ > + --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ > + --NAND_INFO=00000000 \ > + --BL2=${BINARIES_DIR}/bl2.bin \ > + --BLCP_IMG_RUNADDR=0x05200200 \ > + --BLCP_PARAM_LOADADDR=0 \ > + --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ > + --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ > + --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ All this if statement is redundant with the else part. Can you add a variable like: FIPTOOL_ARGUMENTS = genfip ${BINARIES_DIR}/fip.bin \ --MONITOR_RUNADDR=0x80000000 \ --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ --NAND_INFO=00000000 \ --BL2=${BINARIES_DIR}/bl2.bin \ --BLCP_IMG_RUNADDR=0x05200200 \ --BLCP_PARAM_LOADADDR=0 \ --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ and then you add or not the remaining BLCP* variables below and execute ${BINARIES_DIR}/fiptool.py ${FIPTOOL_ARGUMENTS} > + --BLCP=${BINARIES_DIR}/empty.bin \ > + --BLCP_2ND=${BINARIES_DIR}/cvirtos.bin \ > + --BLCP_2ND_RUNADDR=0x83f40000 \ > + > ${BINARIES_DIR}/fip.log 2>&1 > + if [ -f ${BINARIES_DIR}/fip.bin ]; then > + echo "[Duo Post-Image fiptool.py] FreeRTOS integrated" > + fi Then this nested if statement and.. > +else > + ${BINARIES_DIR}/fiptool.py genfip ${BINARIES_DIR}/fip.bin \ > + --MONITOR_RUNADDR=0x80000000 \ > + --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ > + --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ > + --NAND_INFO=00000000 \ > + --BL2=${BINARIES_DIR}/bl2.bin \ > + --BLCP_IMG_RUNADDR=0x05200200 \ > + --BLCP_PARAM_LOADADDR=0 \ > + --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ > + --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ > + --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ > + > ${BINARIES_DIR}/fip.log 2>&1 > + if [ -f ${BINARIES_DIR}/fip.bin ]; then > + echo "[Duo Post-Image fiptool.py] No FreeRTOS integrated" > + fi ..this are redundant too. Can you provide a single if-else-fi statement outside the main if statement... > +fi ... here? > + > +cp ${BINARIES_DIR}/u-boot.dtb ${BINARIES_DIR}/cv1800b_milkv_duo_sd.dtb > +lzma -fk ${BINARIES_DIR}/Image > +mkimage -f ${BINARIES_DIR}/multi.its ${BINARIES_DIR}/boot.sd > +if [ -f ${BINARIES_DIR}/boot.sd ]; then > + echo "[Duo Post-Image] > boot.sd generated!" > +fi > +support/scripts/genimage.sh -c $(pwd)/board/milkv/duo/genimage.cfg > +gzip -fk ${BINARIES_DIR}/sdcard.img > +if [ -f ${BINARIES_DIR}/sdcard.img ]; then > + echo "[Duo Post-Image] > sdcard.img generated!" > +fi > diff --git a/board/milkv/duo/readme.txt b/board/milkv/duo/readme.txt > new file mode 100644 > index 0000000000..a483a73a19 > --- /dev/null > +++ b/board/milkv/duo/readme.txt > @@ -0,0 +1,49 @@ > +Milk-V Duo (https://milkv.io/docs/duo/overview) > + > +Intro > +===== > + > +Milk-V Duo is an ultra-compact embedded development platform > +based on the rv64 CV1800B chip. It can run Linux and RTOS, > +providing a reliable, cost-effective, and high-performance > +platform for professionals, industrial ODMs, AIoT enthusiasts, > +DIY enthusiasts, and creators. > + > +How to build it > +=============== > + > +Configure Buildroot: > + > + $ make milkv_duo_musl_riscv64_defconfig > + > +The milkv_duo_musl_riscv64_defconfig will by default provide > +the full 64MiB free RAM. If you want to build with memory > +reserved for ION, please try: > + > + $ make milkv_duo_musl_riscv64_ion_defconfig Can you please provide more informations about ION here? Or a link to it? > + > +Modify configuration if needed, e.g. add more packages to target: > + > + $ make menuconfig > + > +Compile everything and build the SD card image: > + > + $ make > + > +To configure the linux kernel or u-boot: > + > + $ make linux-menuconfig > + > +To rebuild something (e.g. linux): > + > + $ make linux-rebuild > + > +How to write the SD card > +======================== > + > +Once the build process is finished you will have an image > +called "sdcard.img" in the output/images/ directory. > + > +Copy the bootable "sdcard.img" onto an SD card with "dd": > + > + $ sudo dd if=output/images/sdcard.img of=/dev/sdX > diff --git a/configs/milkv_duo_musl_riscv64_defconfig b/configs/milkv_duo_musl_riscv64_defconfig > new file mode 100644 > index 0000000000..4f5180891f > --- /dev/null > +++ b/configs/milkv_duo_musl_riscv64_defconfig > @@ -0,0 +1,63 @@ > +# Architecture > +BR2_riscv=y > +BR2_riscv_g=y > +BR2_RISCV_ISA_RVC=y > + > +# Linux headers same as kernel 5.10 series > +BR2_KERNEL_HEADERS_5_10=y > + > +# Using gcc13 and musl to have t-head's optimization and features > +BR2_GCC_VERSION_13_X=y > +BR2_TOOLCHAIN_BUILDROOT_CXX=y Is CXX needed by any package selected here? > +BR2_TOOLCHAIN_BUILDROOT_MUSL=y > +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" > + > +# opensbi > +BR2_TARGET_OPENSBI=y > +BR2_TARGET_OPENSBI_CUSTOM_GIT=y > +BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-opensbi.git" > +BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="ee78f99daf8ac5956c6bf95458983ead52142548" > +BR2_TARGET_OPENSBI_PLAT="generic" > +BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y > +BR2_TARGET_OPENSBI_FW_FDT_PATH=y > + > +# u-boot > +BR2_TARGET_UBOOT=y > +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y > +BR2_TARGET_UBOOT_CUSTOM_GIT=y > +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-u-boot.git" > +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v2021.10_64mb" > +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" > +BR2_TARGET_UBOOT_NEEDS_DTC=y > +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y > + > +# Kernel > +BR2_LINUX_KERNEL=y > +BR2_LINUX_KERNEL_CUSTOM_GIT=y > +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-linux.git" > +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="duo-linux-5.10.4" > +BR2_LINUX_KERNEL_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" > +BR2_LINUX_KERNEL_LZMA=y here you need: BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > + > +# SD card image generating script > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/milkv/duo/post-image.sh" > + > +# rootfs > +BR2_TARGET_ROOTFS_EXT2=y > +BR2_TARGET_ROOTFS_EXT2_4=y > + > +# Packages for the sdcard image generating > +BR2_PACKAGE_MILKV_DUO_LIBRARIES=y > +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL=y > +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL_64MB=y > +BR2_PACKAGE_MILKV_DUO_PINMUX=y > +BR2_PACKAGE_MILKV_DUO_FEATURES=y > +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y > + > +# Host packages for the sdcard image generating > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > +BR2_PACKAGE_HOST_GENIMAGE=y > +BR2_PACKAGE_HOST_LZMA_ALONE=y > +BR2_PACKAGE_HOST_MTOOLS=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y > diff --git a/configs/milkv_duo_musl_riscv64_ion_defconfig b/configs/milkv_duo_musl_riscv64_ion_defconfig > new file mode 100644 > index 0000000000..7875853711 > --- /dev/null > +++ b/configs/milkv_duo_musl_riscv64_ion_defconfig > @@ -0,0 +1,63 @@ > +# Architecture > +BR2_riscv=y > +BR2_riscv_g=y > +BR2_RISCV_ISA_RVC=y > + > +# Linux headers same as kernel 5.10 series > +BR2_KERNEL_HEADERS_5_10=y > + > +# Using gcc13 and musl to have t-head's optimization and features > +BR2_GCC_VERSION_13_X=y > +BR2_TOOLCHAIN_BUILDROOT_CXX=y > +BR2_TOOLCHAIN_BUILDROOT_MUSL=y > +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" > + > +# opensbi > +BR2_TARGET_OPENSBI=y > +BR2_TARGET_OPENSBI_CUSTOM_GIT=y > +BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-opensbi.git" > +BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="ee78f99daf8ac5956c6bf95458983ead52142548" > +BR2_TARGET_OPENSBI_PLAT="generic" > +BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y > +BR2_TARGET_OPENSBI_FW_FDT_PATH=y > + > +# u-boot > +BR2_TARGET_UBOOT=y > +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y > +BR2_TARGET_UBOOT_CUSTOM_GIT=y > +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-u-boot.git" > +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v2021.10_ion" > +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" > +BR2_TARGET_UBOOT_NEEDS_DTC=y > +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y > + > +# Kernel > +BR2_LINUX_KERNEL=y > +BR2_LINUX_KERNEL_CUSTOM_GIT=y > +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-linux.git" > +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="duo-linux-5.10.4" > +BR2_LINUX_KERNEL_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" > +BR2_LINUX_KERNEL_LZMA=y here you need: BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > + > +# SD card image generating script > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/milkv/duo/post-image.sh" > + > +# rootfs > +BR2_TARGET_ROOTFS_EXT2=y > +BR2_TARGET_ROOTFS_EXT2_4=y > + > +# Packages for the sdcard image generating > +BR2_PACKAGE_MILKV_DUO_LIBRARIES=y > +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL=y > +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y > +BR2_PACKAGE_MILKV_DUO_PINMUX=y > +BR2_PACKAGE_MILKV_DUO_FEATURES=y > +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y > + > +# Host packages for the sdcard image generating > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > +BR2_PACKAGE_HOST_GENIMAGE=y > +BR2_PACKAGE_HOST_LZMA_ALONE=y > +BR2_PACKAGE_HOST_MTOOLS=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y For the rest the patch looks good and builds fine using utils/docker-run except package htop that fails to build due to gcc ICE 109809 for which I've sent a patch: https://patchwork.ozlabs.org/project/buildroot/list/?series=393667 So this patchset depends on patchset above for htop gcc ICE. Anyway a V2 must be sent with BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y fix. Best regards
Hello Giulio, Thanks! It’s nice to get your reviews. Let me explain some of them. > 2024年2月6日 01:25,Giulio Benetti <giulio.benetti@benettiengineering.com> 写道: > > Hi Hanyuan, > > thank for contributing, > one important note is to swap Patch 1/2 and 2/2. This is because they > are bisectable this way since on Patch 1/2 you enable packages appearing > in Patch 2/2, also, Got it. Should I later sent the Patch V3 and make them look like: [v3,1/2] package/milkv-duo: add packages for milkv-duo [v3,2/2] configs/milkv_duo: new defconfig > can you please provide the board product webpage URL here? > And also some ION indications too? Got it. I would append more info to the readme.txt about what the ION means. > All this if statement is redundant with the else part. > Can you add a variable like: > FIPTOOL_ARGUMENTS = genfip ${BINARIES_DIR}/fip.bin \ > --MONITOR_RUNADDR=0x80000000 \ > --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ > --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ > --NAND_INFO=00000000 \ > --BL2=${BINARIES_DIR}/bl2.bin \ > --BLCP_IMG_RUNADDR=0x05200200 \ > --BLCP_PARAM_LOADADDR=0 \ > --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ > --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ > --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ > > and then you add or not the remaining BLCP* variables below and execute > ${BINARIES_DIR}/fiptool.py ${FIPTOOL_ARGUMENTS} > Then this nested if statement and.. > ..this are redundant too. Can you provide a single if-else-fi statement > outside the main if statement... > ... here? > Sorry for that. OK, I would make these lines look better. > Is CXX needed by any package selected here? At that time I submitted the patch I haven’t understand the buildroot’s minimal philosophy too much. Sorry for that. I would remove this line. > here you need: > BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > here you need: > BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y OK. I will add them. > For the rest the patch looks good and builds fine using utils/docker-run except package htop that fails to build due to gcc ICE 109809 for which > I've sent a patch: > https://patchwork.ozlabs.org/project/buildroot/list/?series=393667 > > So this patchset depends on patchset above for htop gcc ICE. I think I should tell you this. In fact I encountered another gcc bug when using all the t-head’s optimizations with the glibc. The gcc reported internal errors when we +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" So we have to use musl and find this bug is not reported anymore. Maybe the htop compiling bug comes from these optimizations. I would have a try what would happen if we disable all the t-head features and then compile the htop. If it is really the t-head’s problem, maybe we can let the t-head’s optimizations go. Thanks again for your careful review! Best regards, Hanyuan
Hi Hanyuan, On 06/02/24 03:40, hanyuan via buildroot wrote: > Hello Giulio, > > Thanks! It’s nice to get your reviews. Let me explain some of them. > >> 2024年2月6日 01:25,Giulio Benetti <giulio.benetti@benettiengineering.com> 写道: >> >> Hi Hanyuan, >> >> thank for contributing, >> one important note is to swap Patch 1/2 and 2/2. This is because they >> are bisectable this way since on Patch 1/2 you enable packages appearing >> in Patch 2/2, also, > > Got it. Should I later sent the Patch V3 and make them look like: > > [v3,1/2] package/milkv-duo: add packages for milkv-duo > [v3,2/2] configs/milkv_duo: new defconfig Yes > >> can you please provide the board product webpage URL here? >> And also some ION indications too? > > Got it. I would append more info to the readme.txt about what the ION means. > >> All this if statement is redundant with the else part. >> Can you add a variable like: >> FIPTOOL_ARGUMENTS = genfip ${BINARIES_DIR}/fip.bin \ >> --MONITOR_RUNADDR=0x80000000 \ >> --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ >> --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ >> --NAND_INFO=00000000 \ >> --BL2=${BINARIES_DIR}/bl2.bin \ >> --BLCP_IMG_RUNADDR=0x05200200 \ >> --BLCP_PARAM_LOADADDR=0 \ >> --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ >> --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ >> --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ >> >> and then you add or not the remaining BLCP* variables below and execute >> ${BINARIES_DIR}/fiptool.py ${FIPTOOL_ARGUMENTS} >> Then this nested if statement and.. >> ..this are redundant too. Can you provide a single if-else-fi statement >> outside the main if statement... >> ... here? >> > > Sorry for that. OK, I would make these lines look better. > >> Is CXX needed by any package selected here? > > At that time I submitted the patch I haven’t understand the buildroot’s minimal > philosophy too much. Sorry for that. I would remove this line. > >> here you need: >> BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y >> here you need: >> BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > > OK. I will add them. > >> For the rest the patch looks good and builds fine using utils/docker-run except package htop that fails to build due to gcc ICE 109809 for which >> I've sent a patch: >> https://patchwork.ozlabs.org/project/buildroot/list/?series=393667 >> >> So this patchset depends on patchset above for htop gcc ICE. > > I think I should tell you this. In fact I encountered another gcc bug > when using all the t-head’s optimizations with the glibc. The gcc reported > internal errors when we > > +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" > > So we have to use musl and find this bug is not reported anymore. I was wondering why you were using exactly musl and I suspected something like that. > Maybe the htop compiling bug comes from these optimizations. > I would have a try what would happen if we disable all the t-head > features and then compile the htop. If it is really the t-head’s problem, > maybe we can let the t-head’s optimizations go. I've worked it around with this[0], so no need to remove optimizations. [0]: https://patchwork.ozlabs.org/project/buildroot/list/?series=393667 Best regards
diff --git a/board/milkv/duo/genimage.cfg b/board/milkv/duo/genimage.cfg new file mode 100644 index 0000000000..1fd74f845a --- /dev/null +++ b/board/milkv/duo/genimage.cfg @@ -0,0 +1,25 @@ +image boot.vfat { + vfat { + files = { + "fip.bin", + "boot.sd", + } + } + size = 8M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/milkv/duo/post-image.sh b/board/milkv/duo/post-image.sh new file mode 100755 index 0000000000..6dc6d7853b --- /dev/null +++ b/board/milkv/duo/post-image.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +########################################################### +# File: post-image.sh +# Author: GP Orcullo <kinsamanka@gmail.com> +# Hanyuan Zhao <zhaohy22@mails.tsinghua.edu.cn> +# Description: this sh will make the fip.bin and boot.sd, +# then pack everything to an image file. +########################################################### + +if [ -f ${BINARIES_DIR}/cvirtos.bin ]; then + ${BINARIES_DIR}/fiptool.py genfip ${BINARIES_DIR}/fip.bin \ + --MONITOR_RUNADDR=0x80000000 \ + --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ + --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ + --NAND_INFO=00000000 \ + --BL2=${BINARIES_DIR}/bl2.bin \ + --BLCP_IMG_RUNADDR=0x05200200 \ + --BLCP_PARAM_LOADADDR=0 \ + --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ + --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ + --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ + --BLCP=${BINARIES_DIR}/empty.bin \ + --BLCP_2ND=${BINARIES_DIR}/cvirtos.bin \ + --BLCP_2ND_RUNADDR=0x83f40000 \ + > ${BINARIES_DIR}/fip.log 2>&1 + if [ -f ${BINARIES_DIR}/fip.bin ]; then + echo "[Duo Post-Image fiptool.py] FreeRTOS integrated" + fi +else + ${BINARIES_DIR}/fiptool.py genfip ${BINARIES_DIR}/fip.bin \ + --MONITOR_RUNADDR=0x80000000 \ + --CHIP_CONF=${BINARIES_DIR}/chip_conf.bin \ + --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \ + --NAND_INFO=00000000 \ + --BL2=${BINARIES_DIR}/bl2.bin \ + --BLCP_IMG_RUNADDR=0x05200200 \ + --BLCP_PARAM_LOADADDR=0 \ + --DDR_PARAM=${BINARIES_DIR}/ddr_param.bin \ + --MONITOR=${BINARIES_DIR}/fw_dynamic.bin \ + --LOADER_2ND=${BINARIES_DIR}/u-boot.bin \ + > ${BINARIES_DIR}/fip.log 2>&1 + if [ -f ${BINARIES_DIR}/fip.bin ]; then + echo "[Duo Post-Image fiptool.py] No FreeRTOS integrated" + fi +fi + +cp ${BINARIES_DIR}/u-boot.dtb ${BINARIES_DIR}/cv1800b_milkv_duo_sd.dtb +lzma -fk ${BINARIES_DIR}/Image +mkimage -f ${BINARIES_DIR}/multi.its ${BINARIES_DIR}/boot.sd +if [ -f ${BINARIES_DIR}/boot.sd ]; then + echo "[Duo Post-Image] > boot.sd generated!" +fi +support/scripts/genimage.sh -c $(pwd)/board/milkv/duo/genimage.cfg +gzip -fk ${BINARIES_DIR}/sdcard.img +if [ -f ${BINARIES_DIR}/sdcard.img ]; then + echo "[Duo Post-Image] > sdcard.img generated!" +fi diff --git a/board/milkv/duo/readme.txt b/board/milkv/duo/readme.txt new file mode 100644 index 0000000000..a483a73a19 --- /dev/null +++ b/board/milkv/duo/readme.txt @@ -0,0 +1,49 @@ +Milk-V Duo (https://milkv.io/docs/duo/overview) + +Intro +===== + +Milk-V Duo is an ultra-compact embedded development platform +based on the rv64 CV1800B chip. It can run Linux and RTOS, +providing a reliable, cost-effective, and high-performance +platform for professionals, industrial ODMs, AIoT enthusiasts, +DIY enthusiasts, and creators. + +How to build it +=============== + +Configure Buildroot: + + $ make milkv_duo_musl_riscv64_defconfig + +The milkv_duo_musl_riscv64_defconfig will by default provide +the full 64MiB free RAM. If you want to build with memory +reserved for ION, please try: + + $ make milkv_duo_musl_riscv64_ion_defconfig + +Modify configuration if needed, e.g. add more packages to target: + + $ make menuconfig + +Compile everything and build the SD card image: + + $ make + +To configure the linux kernel or u-boot: + + $ make linux-menuconfig + +To rebuild something (e.g. linux): + + $ make linux-rebuild + +How to write the SD card +======================== + +Once the build process is finished you will have an image +called "sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/configs/milkv_duo_musl_riscv64_defconfig b/configs/milkv_duo_musl_riscv64_defconfig new file mode 100644 index 0000000000..4f5180891f --- /dev/null +++ b/configs/milkv_duo_musl_riscv64_defconfig @@ -0,0 +1,63 @@ +# Architecture +BR2_riscv=y +BR2_riscv_g=y +BR2_RISCV_ISA_RVC=y + +# Linux headers same as kernel 5.10 series +BR2_KERNEL_HEADERS_5_10=y + +# Using gcc13 and musl to have t-head's optimization and features +BR2_GCC_VERSION_13_X=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" + +# opensbi +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_CUSTOM_GIT=y +BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-opensbi.git" +BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="ee78f99daf8ac5956c6bf95458983ead52142548" +BR2_TARGET_OPENSBI_PLAT="generic" +BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y +BR2_TARGET_OPENSBI_FW_FDT_PATH=y + +# u-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v2021.10_64mb" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="duo-linux-5.10.4" +BR2_LINUX_KERNEL_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" +BR2_LINUX_KERNEL_LZMA=y + +# SD card image generating script +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/milkv/duo/post-image.sh" + +# rootfs +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Packages for the sdcard image generating +BR2_PACKAGE_MILKV_DUO_LIBRARIES=y +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL=y +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL_64MB=y +BR2_PACKAGE_MILKV_DUO_PINMUX=y +BR2_PACKAGE_MILKV_DUO_FEATURES=y +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y + +# Host packages for the sdcard image generating +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_LZMA_ALONE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/milkv_duo_musl_riscv64_ion_defconfig b/configs/milkv_duo_musl_riscv64_ion_defconfig new file mode 100644 index 0000000000..7875853711 --- /dev/null +++ b/configs/milkv_duo_musl_riscv64_ion_defconfig @@ -0,0 +1,63 @@ +# Architecture +BR2_riscv=y +BR2_riscv_g=y +BR2_RISCV_ISA_RVC=y + +# Linux headers same as kernel 5.10 series +BR2_KERNEL_HEADERS_5_10=y + +# Using gcc13 and musl to have t-head's optimization and features +BR2_GCC_VERSION_13_X=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TARGET_OPTIMIZATION="-march=rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync" + +# opensbi +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_CUSTOM_GIT=y +BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-opensbi.git" +BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="ee78f99daf8ac5956c6bf95458983ead52142548" +BR2_TARGET_OPENSBI_PLAT="generic" +BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y +BR2_TARGET_OPENSBI_FW_FDT_PATH=y + +# u-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v2021.10_ion" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/milkv-duo/milkv-duo-linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="duo-linux-5.10.4" +BR2_LINUX_KERNEL_DEFCONFIG="cvitek_cv1800b_milkv_duo_sd" +BR2_LINUX_KERNEL_LZMA=y + +# SD card image generating script +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/milkv/duo/post-image.sh" + +# rootfs +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Packages for the sdcard image generating +BR2_PACKAGE_MILKV_DUO_LIBRARIES=y +BR2_PACKAGE_MILKV_DUO_FIRMWARE_FSBL=y +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y +BR2_PACKAGE_MILKV_DUO_PINMUX=y +BR2_PACKAGE_MILKV_DUO_FEATURES=y +BR2_PACKAGE_MILKV_DUO_SMALLCORE_FREERTOS=y + +# Host packages for the sdcard image generating +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_LZMA_ALONE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
Milk-V Duo is an ultra-compact embedded development platform based on the CV1800B chip. It can run Linux and RTOS, providing a reliable, low-cost, and high-performance platform for professionals, industrial ODMs, AIoT enthusiasts, DIY hobbyists, and creators. Co-authored-by: Emil S <emil.soltys@outlook.com> Co-authored-by: GP Orcullo <kinsamanka@gmail.com> Signed-off-by: Hanyuan Zhao <hanyuan-z@qq.com> --- board/milkv/duo/genimage.cfg | 25 ++++++++ board/milkv/duo/post-image.sh | 58 ++++++++++++++++++ board/milkv/duo/readme.txt | 49 +++++++++++++++ configs/milkv_duo_musl_riscv64_defconfig | 63 ++++++++++++++++++++ configs/milkv_duo_musl_riscv64_ion_defconfig | 63 ++++++++++++++++++++ 5 files changed, 258 insertions(+) create mode 100644 board/milkv/duo/genimage.cfg create mode 100755 board/milkv/duo/post-image.sh create mode 100644 board/milkv/duo/readme.txt create mode 100644 configs/milkv_duo_musl_riscv64_defconfig create mode 100644 configs/milkv_duo_musl_riscv64_ion_defconfig