基于Licheepi 4a开发板构建自己的Linux操作系统

LicheePi 3A开发板:RISC-V八核处理器与边缘AI应用解析 RISC-V作为一种开源指令集架构,正在改变处理器设计的游戏规则。其模块化设计允许开发者根据需求定制指令集,特别适合边缘计算和AI加速场景。LicheePi 3A开发板搭载SpacemiT K1八核RISC-V处理器,支持RVV 1.0向量指令集和2TOPS NPU加速,为开发者提供了强大的并行计算能力。该开发板配备双M.2插槽和丰富接口,可轻松构建边缘AI推理网关或RISC-V开发集群。随着RISC-V生态的完善,这类开发板正在成为学习新一代处理器架构的理想平台。 阅读详情

目录

1 文档介绍

2 系统镜像的构建

3 构建环境搭建

4 内核相关镜像构建

4.1 Kernel镜像

4.2 DTB镜像

4.3 内核模块(module)

4.4  initramfs镜像构建

4.5 OpenSBI固件构建

4.6 U-Boot固件构建

4.7 rootfs根文件系统构建

5 简单构建方法:从现有可运行环境复制

6 从软件包开始构建


1 文档介绍

本文档的主要内容为基于Licheepi 4a开发板,描述一种从“零”开始构建自己的操作系统并烧录到开发板上使用的流程与方法。
什么是Licheepi 4a开发板?
LicheePi 4A 是基于 Lichee Module 4A 核心板的 高性能 RISC-V Linux 开发板,以 TH1520 为主控核心(4xC910@1.85G, RV64GCV,4TOPS@int8 NPU, 50GFLOP GPU)。LicheePi 4A 可以用作典型的 RISC-V 验证平台,其强大的性能可以较快速地实现本地编译,而无需使用 QEMU 进行编译。(更多详情请参考官网资料:https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/1_intro.html)

2 系统镜像的构建

为了让自己构建的操作系统可以在开发板上运行,自构建操作系统的表现形式应该为一组可烧录到开发板的镜像文件。根据本文档所选择的硬件环境以及烧录工具,烧录镜像集主要包括以下三类:

  1. U-Boot镜像:包括了U-Boot引导加载程序,烧录到对应的存储分区;
  2. Boot镜像:主要包含了Linux内核镜像、设备树文件、临时根文件系统;
  3. rootfs镜像:主要包含了用户空间根文件系统内容;

3 构建环境搭建

我所用的构建整个OS镜像所在的环境为x86架构下的Ubuntu24.04的虚拟机环境。在进行真正的构建流程前,需要先在此构建环境下安装一些必要的软件来支持构建工作,大部分软件通过如下命令就可安装:

apt updateapt install parted zstd make bison bc flex kpartx \ xz-utils qemu-user-static libssl-dev \ gcc-riscv64-linux-gnu dnf rpm

4 内核相关镜像构建

本章节的主要内容为从内核源码编译构建出内核相关文件与镜像的操作说明,因内核负责管理硬件资源并提供对底层硬件的抽象,所以它是对CPU架构最敏感的软件之一,内核特定架构的适配是整个操作系统适配的最重要事项。

从内核源码输出的相关文件主要有:

  1. 内核镜像(Kernel Image)
  2. DTB文件(Device Tree Blob)
  3. 内核模块(module)

4.1 Kernel镜像

Linux内核是操作系统的核心部分,它负责管理硬件资源并提供对底层硬件的抽象层,使得应用程序可以无需关心具体的硬件细节就能运行。

内核镜像(Kernel Image)指的是编译后的Linux内核输出文件,通常是一个可以直接加载到计算机内存并执行的二进制文件。

基于RISC-V开发板的内核镜像的构建流程如下:

  1. 内核配置文件
    在当前的开发板系统上,内核配置文件保存在/proc/config.gz中。把它解压提取出来,即可用作编译内核时的编译配置文件。
  2. 内核源码
    此开发板芯片的生产商(THEAD)提供了主机的基于此c910芯片的OS系统(revyos)并把相关库开源,其中就包括了内核源码库(https:// http://github.com/revyos/th1520-linux-kernel/)。选择其中的”6.6.73”分支作为内核源码。
  3. 内核编译

把上文中所述的配置文件放入到内核源码目录,并重命名为”.config”(更规范的做法应该是把此配置文件放入arch/riscv/configs目录下,并重命名为一个唯一性名称,然后通过make命令选择该配置文件)。然后执行make编译命令,示范命令如下:

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j$(nproc)

make编译时会出现配置手动设置提示,一路回车即可。最后编译出的镜像在arch/riscv/boot/Image。

4.2 DTB镜像

DTB文件(Device Tree Blob):在嵌入式系统中,尤其是那些支持多种硬件配置的系统中,设备树(Device Tree)是一种描述硬件的数据结构。DTB文件是编译后的设备树,它告诉内核有关连接到系统的硬件的信息,而不需要为每种硬件配置单独编译内核。这样做的好处是可以简化内核的编译过程,并且可以在不重新编译内核的情况下更新硬件信息。


DTB构建流程:
但按照上述的步骤编译了内核时,同时也会生成所有默认启用的dtb文件,其位于arch/riscv/boot/dts/目录下:


整个dts目录可以直接拷贝到Boot镜像下,对此之后讲到Boot分区镜像时会再详述。
现阶段,可以发现dts目录下包含了多个芯片厂商的目录,因为我们使用的开发板为Licheepi 4a,它是基于C910芯片,来自THEAD公司,所以我们真正需要的dtb文件在thead目录下:


其中的” th1520-lichee-pi-4a-16g.dtb”就是真正适配我们开发板的dtb文件。

4.3 内核模块(module)

内核模块:是可以在运行时动态加载到内核中的代码片段,用于扩展内核的功能。它们通常用于驱动程序或文件系统等场景,允许在不重启系统的情况下添加或移除某些功能。


依旧是在内核源码目录下,运行以下编译命令来生成内核模块:

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- modules_install INSTALL_MOD_PATH=kmod

编译完成后,内核模块位置在kmod/lib/modules/*下。

4.4  initramfs镜像构建

initramfs(initial RAM file system)是Linux启动过程中的一个临时根文件系统,它存在于RAM中,主要用于在实际的根文件系统可用之前加载必要的驱动程序和工具,以完成内核启动后续所需的步骤。


在当前开发板系统环境下构建initrd,在根目录下执行以下命令:

find . | cpio -H newc -o | gzip > ./initrd-6.6.73.img

4.5 OpenSBI固件构建

OpenSBI(开源 Supervisor Binary Interface)是一个为RISC-V架构设计的开源固件,旨在提供一个标准化的接口,以便在硬件平台和操作系统之间进行交互。具体来说,OpenSBI实现了RISC-V SBI(Supervisor Binary Interface)规范,该规范定义了运行在机器模式(Machine Mode)下的固件与运行在监督者模式(Supervisor Mode)下的操作系统内核之间的交互接口。
使用的源码库为:http://github.com/revyos/opensbi的”th1520-v1.6”branch
编译命令:

make PLATFORM=generic FW_PIC=y CROSS_COMPILE=riscv64-buildroot-linux-gnu- -j4

编译完成后,镜像在build/platform/generic/firmware/fw_dynamic.bin。

4.6 U-Boot固件构建

U-Boot(Universal Boot Loader)是一个广泛使用的开源引导加载程序,适用于嵌入式系统。它支持多种架构,包括RISC-V等。U-Boot的主要任务是初始化硬件,并为操作系统提供一个合适的环境以进行加载和执行。
使用的开源仓库为:http://github.com/revyos/thead-u-boot的”th1520”分支。
修改编译配置文件configs/light_lpi4a_16g_defconfig:


使其与内核编译时生成的dtb文件名相匹配。
之后的编译命令为:

make ARCH=riscv CROSS_COMPILE=riscv64-buildroot-linux-gnu- light_lpi4a_16g_defconfigmake ARCH=riscv CROSS_COMPILE=riscv64-buildroot-linux-gnu- -j4

编译生成的镜像即存放在源码根目录下的”u-boot-with-spl.bin“。

4.7 rootfs根文件系统构建

rootfs(根文件系统)是Linux系统启动时挂载的第一个文件系统,它构成了Linux系统的根目录(/)。根文件系统包含了操作系统运行所需的基本文件和目录结构,包括但不限于:

  • 基本工具和库:如shell、基础命令行工具以及动态链接库。
  • 配置文件:例如网络配置、服务启动选项等,通常位于/etc目录下。
  • 设备文件:在/dev目录下,代表系统中的硬件设备。
  • 用户文件:用户的家目录通常位于/home下。
  • 临时文件:在/tmp目录下,用于存放临时数据。

根文件系统对于Linux操作系统的正常运行至关重要,因为它不仅提供了操作系统内核与用户空间之间的桥梁,还支持用户空间程序的执行。此外,根文件系统还定义了系统的行为,比如如何启动服务、如何响应用户输入等。

5 简单构建方法:从现有可运行环境复制

如果开发板上已经有了可运行的系统,可以把其根目录下的内容当作构建镜像中的根文件系统。在开发板上通过以下命令复制出内容:

rsync -aHAXq --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* ${target}

在复制出的内容中,再把本文上述生成的内核模块目录添加到${target}/lib/modules/目录下。

使用dd命令构建rootfs镜像,格式化,并挂载到构建环境下,把上述复制出来的根文件系统内容拷贝到此挂载的镜像中。至此rootfs镜像构建完成。

6 从软件包开始构建

大体思路为:现在这个时间点,一些比较流行的Linux发行版都已经有了自己的RISC-V版本,比如Fedora:

https://fedoraproject.org/wiki/Architectures/RISC-V

比如Ubuntu:

https://ubuntu.com/download/risc-v

这些发行版也提供了专门的基于RISC-V架构的软件包镜像库,可以使用此库来添加根文件系统所需的基础组件,从而构建出最基础的根文系统镜像。

在本文档中,尝试使用国内龙蜥社区推出的Anolis23 RISC-V版本的软件包库源。

在构建环境中安装所需软件包:
构建rootfs需要额外的软件支持,安装这些软件包的命令如下:

apt install parted zstd make bison bc flex kpartx \ xz-utils qemu-user-static libssl-dev \ gcc-riscv64-linux-gnu dnf rpm -y

创建根文件系统所在目录,并初始化RPM数据库:
先在构建环境下创建一个rootfs目录,里边用于填充根文件系统所需结构与内容:

mkdir rootfs

接着在其中创建rpm初始化所需目录结构:

mkdir -p rootfs/var/lib/rpm

在其中初始化rpm数据库:

rpm --root ${rootfs绝对路劲} --initdb

安装release、repos软件包;
使用rpm工具在rootfs中安装相关OS(在此即Anolis23)的release、repos这两个RPM包:

rpm -ivh --nodeps --root ${rootfs绝对路径} ${anolis_release} --ignorearchrpm -ivh --nodeps --root ${rootfs绝对路径} ${anolis_repos} --ignorearch

${anolis_release}与${anolis_repos}均为在软件包库中对应rpm的URL。

安装dnf、bash,来构建填充基础的rootfs中所需内容。
当安装了release\repos rpm包之后,已经可以通过dnf向rootfs中安装dnf、bash软件,通过安装它们所需的依赖,可以构建并安装上根文件系统最小需求目录结构和所需内容:

dnf --installroot=${rootfs绝对路径} install dnf bash --nogpgcheck --forcearch riscv64

并重新安装(reinstall)system-release软件包:

dnf --installroot=${rootfs绝对路径} reinstall system-release --nogpgcheck --forcearch riscv64

为根文件系统添加dns解析配置;
运行以下命令复制构建环境使用的dnf解析配置:

cp -b /etc/resolv.conf ${rootfs绝对路径}/etc/resolv.conf

为rootfs挂载必要的外部环境支持
因为之后的操作要使用chroot,使rootfs模拟一个可运行的riscv环境,故需要进行以下挂载操作:

mount --bind /dev ${ rootfs绝对路径}/devmount -t proc /proc ${ rootfs绝对路径}/procmount -t sysfs /sys ${ rootfs绝对路径}/sys

使用chroot安装额外软件
现节点,rootfs中已经安装了dnf工具,故通过chroot来使用rootfs的dnf完成剩下所需软件的安装,相关命令如下:

chroot ${ rootfs绝对路径} dnf makecachechroot ${ rootfs绝对路径} dnf updatechroot ${ rootfs绝对路径} dnf install passwd hostname

我这里安装的软件包只满足最小需求,如果想在构建阶段就加入更多功能,请在以上命令基础上自行添加要安装的软件包名称。

使用chroot进行基础配置

结合chroot和rootfs中的bash工具,可以进入rootfs的运行环境,执行一些根文件系统的配置操作:

cat << EOF | chroot ${ rootfs绝对路径} /bin/bash echo 'riscv' | passwd --stdin root dracut --no-kernel /boot/initrd.imgEOF

上述命令有两个作用:

  1. 为root用户添加密码并启用;
  2. 为此rootfs生成临时根文件系统。

注意:当在此生成了临时根文件系统后,之后合成Boot分区时所需的临时根文件系统镜像就使用此处生产的,而不再需要上述“内核相关镜像构建“章节中所述的方法。

挂载目录的卸载
此时rootfs中的内容已可满足作为一个基础根文件系统的要求,在把它拷贝到镜像中之前,先卸载之前挂载的目录:

umount -l ${ rootfs绝对路径}/devumount -l ${ rootfs绝对路径}/procumount -l ${ rootfs绝对路径}/sys

创建镜像并放入内容

首先需要知道上述构建的rootfs目录有多大,运行以下命令得到:

size=`du -sh --block-size=1MiB ${ rootfs绝对路径} | cut -f 1 | xargs`

扩展一些空间:

size=$(($size+720))

使用dd命令创建镜像,用于承载rootfs内容和烧录,空间大小使用上述决定:

dd if=/dev/zero of=${镜像名称与路径} bs=1MiB count=$size status=progress && sync

为该镜像初始化文件系统

mkfs.ext4 ${镜像名称与路径}

镜像本身已准备完毕,接下来放入rootfs的内容,先找个临时挂载点挂载上该镜像:

mount ${镜像名称与路径} ${临时挂载点}

接着拷贝rootfs中的内容放入镜像:

rsync -avHAXq ${ rootfs绝对路径}/* ${临时挂载点}syncsleep 10

此刻,镜像里已经有了所需内容,最后卸载挂载点即可:

umount ${临时挂载点}

Boot分区镜像构建

Boot分区镜像中要包含的内容有:

  1. 内核镜像:
    把本文所述的编译出的内核镜像Image拷贝到此分区的根目录下。
  2. 临时根文件系统
    把本文之前所述的生成的initrd.img拷贝到次分区的根目录下。
  3. extlinux配置文件

extlinux.conf文件需放在boot分区中的extlinux目录下。该配置文件内容格式如下所示:

其中:

  • linux:指定内核镜像位置;
  • initrd:指定临时根文件系统镜像位置;
  • fdtfir:指定dtb设备树文件所在目录;
  • append:指定传递给内核的启动参数。

设备树文件
uboot环境下的要加载的设备树文件的位置,由uboot环境变量(fdtfile)和extlinux.conf中的字段(fdtdir)共同决定(${fdtdir}/${fdtfile})。故需要根据上述两个值来调整存放设备树文件的位置。

其他硬件相关固件

当boot分区的内容准备完毕后,使用dd命令创建boot镜像,并把这些内容放入其中。至此,boot镜像的创建已完成。

待烧录镜像备齐

烧录与启动

开发板以及重要接口说明

执行烧录之前,让我们先观察一下实际的开发板。这款Lichee Pi 4a RISC-V开发板的正面如下图所示:

说明一下图示中标记的重要接口:

  1. USB2.0接口,用于烧录,和供电。
  2. 20Pin GPIO接口,对我们来说主要用其中的UART串口进行系统连接。
  3. USB转串口模块,可以让板子通过UART串口连接只有USB接口的主机。

开发板的背面则下图所示:

说明一下图示中的标记:

  1. 与正面20Pin GPIO相对应的各pin口标记。
  2. 串口连接说明
    当网络还不可用时,主机通过UART串口访问开发板。在开发板一端,USB转串口模块连接特定的GPIO串口,即U0-RX和U0-TX,注意交叉连接,以及GND连接,如下图所示:


图中标记即为U0-RX、U0-TX以及GND串口具体位置以及说明位置。
相对应地,转换模块USB端的接口连接就会如下图所示:


从图中可以看出,也是对应连接着U0-RX、U0-TX以及GND端点。

启动模式设置
因为是把镜像烧录到开发板的emmc中,并在此启动,故首先确保底板的拨码开关为EMMC启动模式,如下图所示:

烧录工具的驱动安装
我们使用的烧录工具为fastboot,且在windows环境下操作,首先需要打入fastboot驱动,驱动安装的具体步骤可以直接参考开发板官网教程:

https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/4_burn_image.html

与烧录主机连接

再次让开发板与烧录主机进行连接:

  1. 开发板上使用USB2.0 TypeC接口准备与主机USB端口连接。
  2. 连接之前按住开发板上的BOOT键

  1. USB先另一端再与主机进行连接。


当烧录主机驱动正常安装的情况下,开发板以烧录模式连接到主机时,主机的设备管理器中会出现”Android Bootloader Interface”设备标识,如下图所示:

烧录主机准备镜像与烧录脚本

在烧录主机上,我们已经准备好了构建出来的镜像文件:

  1. uboot镜像文件;
  2. boot镜像文件,以及
  3. rootfs根文件系统镜像。

fastboot的用法思路主要如下所示:

烧录环境连接开发板,在终端输入下面的命令,程序应当输出一行信息代表有一个设备已经连接。

.\fastboot.exe devices

输入下面的命令以刷写并重启到临时uboot:

.\fastboot.exe flash ram .\u-boot-with-spl-lpi4a-16g.bin # 替换为您的板卡规格对应的 uboot 文件的路径.\fastboot reboot

最后,把uboot、boot、root文件通过以下命令烧录进入:

.\fastboot.exe flash uboot u-boot-with-spl-lpi4a-16g.bin.\fastboot.exe flash boot boot.ext4.\fastboot.exe flash root root.ext4

具体的扫描脚本(.bat格式)如下:

执行烧录

运行此脚本来完成烧录,执行结果如下:

从图中也可以清楚了解到具体的烧录流程:

  1. 烧录u-boot镜像到”ram”分区;
  2. 重启;
  3. 烧录u-boot镜像到”uboot”分区;
  4. 烧录boot镜像到”boot”分区;
  5. 烧录root镜像到”root”分区。
    至此,镜像已经成功烧录到开发板中,可以启动来检验成果了。

启动测试

主机与开发板的连接:
就像前面提到的,我们使用开发板的UART串口与主机通信。当串口以及转换模块准备好之后,转换模块的USB端连接到主机上,此时USB2.0 TYPEC端口用来上电。


主机使用串口工具进行通信,Windows下推荐Xshell,mobaterm等。设置串口的波特率为”115200”,即可在串口终端下访问开发板。
在WindTerm终端工具中,具体的会话设置如下图所示:

上电启动:U-Boot-SPL
当会话设置完毕,开发板开始上电时,会话窗口开始能访问到启动信息。
刚上电时的启动日志如下:


可以发现上电之后首先启动的就是U-Boot SPL,SPL启动完成后会紧接着引导启动U-Boot。

U-Boot启动引导
U-Boot的启动如下图所示:


U-Boot开始识别开发板的硬件信息以及读取U-Boot的环境变量和其他初始化事务。最后,它会提示用户是否进入U-Boot环境,如果不进入就直接继续启动Kernel。

U-Boot环境
如果进入U-Boot环境,它会提供一个类shell界面,并可使用提供的工具进行一些U-Boot阶段的操作,这里使用printenv命令来打印U-Boot的环境变量:

SBI与Kernel启动
之后,U-Boot引导启动Kernel,启动信息如下图所示:


从启动信息中可以发现:U-Boot会启动OpenSBI,并由它为Kernel提供SBI接口。

挂载initramfs临时根文件系统
Kernel启动后,根据我们的启动配置(extlinux),U-Boot会先挂载Initramfs作为Kernel的临时根文件系统,这在启动信息中也有体现:

挂载真正的根文件系统
当Kernel挂载临时根文件系统完成了一些必要的驱动初始化等初步操作之后,就会挂载真正的根文件系统rootfs,就如启动信息中所示:

登录
最后,登录相关服务完成初始化,可以登录,如下图所示:

整体启动流程总结

通过上文的追踪描述,可以发现实际的OS启动流程可以用下图总结:

实战记录:在Sipeed LicheePi 4A(玄铁C910)上跑通第一个Linux程序 本文详细记录了在Sipeed LicheePi 4A开发板(搭载平头哥玄铁C910 RISC-V处理器)上运行第一个Linux程序的完整过程。从开箱配置、系统烧录到交叉编译环境搭建,再到Hello World程序部署和GPIO控制LED实战,为RISC-V开发者提供了实用指南。文章特别强调了玄铁C910处理器的性能优势及开发注意事项。 阅读详情

相关推荐

LicheePi 4A开发环境搭建与YOLOv5n模型优化实战

RISC-V架构作为开源指令集的新兴代表,其生态工具链的成熟度直接影响开发效率。以平头哥玄铁C910处理器为例,通过HHB编译器进行深度优化,可实现AI模型在边缘设备的高效部署。本文以YOLOv5n模型为实践案例,详解从环境搭建、交叉编译到内存优化的全流程技术方案,特别针对WSL2环境下的编译效率问题和量化参数敏感度进行实测分析。开发板选型、HHB编译器配置、模型量化技巧等实战经验,为RISC-V架构下的AI应用部署提供可复用的工程方法论。

weixin_29185167的博客 245

Lichee Pi 4A:RISC-V架构的开源硬件之旅

关于Lichee Pi 4A的简单操作和镜像烧录

欢迎来到“Python算法探索”,我是GT算法工程师,一名热爱计算机算法的博主。在这里,我们将一起深入探索Python世界中的各种算法,从基础到高级,从理论到实践。我参加过很多算法比赛,积累了丰富的经验,希望通过这个播客与你分享。让我们一起用Python探 1944

实践指南——【SPSS操作解析】线性混合效应模型在重复测量数据中的应用

本文详细解析了线性混合效应模型在重复测量数据分析中的应用,并提供了SPSS操作指南。文章阐述了该模型如何通过区分固定效应与随机效应,有效处理数据非独立性和缺失值问题,从而获得更可靠的统计推断。

oo7890的博客 551

最新高性能RISC-V开发板-LicheePi4A尝鲜开箱笔记

LicheePi4A是以 TH1520 主控核心,搭载 4TOPS@int8 AI 算力的 NPU,支持双屏 4K 显示输出,支持 4K 摄像头接入,双千兆 POE 网口和多个 USB 接口,音频由 C906 核心处理TH1520(曳影1520)是平台哥首款基于无剑600 SoC平台设计的多模态AI处理器SoC原型。该SoC原型基于玄铁C910内核 ,最高主频可达2.5GHz,支持全链路安全防护,具有4K视频处理能力,同时含有丰富的异构计算和高速IO资源。性能指标对标广泛的中高性能应用场景。

燕十三的物联网之旅 3095

基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计与实现(附源码、仿真与计算书)

本文详细介绍了基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计方案。该设计利用STM32的高分辨率定时器(HRTIM)实现精确PWM控制,支持Buck、Boost和Buck-Boost三种工作模式自动切换,具备双向能量流动能力。通过PSIM仿真和Mathcad计算书进行参数优化,实测效率达95.8%,适用于新能源系统和电池管理等场景。

www00的博客 528

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)1.可能是ESP STA模式未成功连接到路由器,确保 STA 成功连接到外部网络。2.检查 STA 和 AP 的网络配置是否正确,避免子网冲突。3.ESP32的NAPT功能未正确启用,确保 menuconfig 中已启用 IP_NAPT。4.DNS服务器未正确配置。

qq_34885669的博客 1539

荔枝派LicheePi 4A RISCV板子支持的好玩的AI模型

荔枝派LicheePi 4A 是基于核心板的 高性能 RISC-V Linux 开发板,以为主控核心(4xC910@1.85G, RV64GCV,4TOPS@int8 NPU, 50GFLOP GPU),板载最大 16GB 64bit LPDDR4X,128GB eMMC,支持 HDMI+MIPI 双4K 显示输出,支持 4K 摄像头接入,双千兆网口(其中一个支持POE供电)和 4 个 USB3.0 接口,多种音频输入输出(由专用 C906 核心处理)。

skywalk8163的专栏 1975

提升AI智能体回复质量:扣子平台提示词优化技巧与案例解析

本文深入探讨了在扣子平台上优化AI智能体提示词的关键技巧与实战案例。通过分析提示词设计的核心原则、业务场景适配策略以及平台高级功能应用,帮助开发者显著提升AI Agent的回复质量。文章特别强调了结构化提示词设计和A/B测试评估的重要性,并提供了电商客服场景的完整优化案例。

weixin_30897233的博客 538

基于Licheepi 4A的YOLOv5-Lite的部署

基于国产荔枝派4A的YOLOv5-Lite模型部署,希望国产的RISC-V周边越来越好

2203_75650990的博客 2618

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 372

LicheePi 4a记录

解决办法:安装最新版本加入gtk2.0的opencv whl文件,或者自行编译生成riscv64架构的whl文件,下载opencv的源码进行编译。编译 opencv 的环境中没有 gtk2.0,所以,编译完成的 opencv 不支持图形界面相关的功能。博主选择的是debian系统-日期为20230920(目前最新版本镜像)系统正常启动如图7、8、9。

wuboy19的博客 702

【agent实战教程】OpenClaw多个agent一文通

一个合格的独立agent,必须具备6个完全独立的专属组件独立组件路径规则核心要求不独立的严重后果唯一agentId配置文件中全局唯一,不能重复,建议用英文+数字,不要有特殊字符agent配置冲突,消息派单错误,会话串线独立工作区(workspace)建议每个agent一个独立文件夹,不要共用人设、记忆、规则混在一起,agent人设崩塌,对话串线独立状态目录(agentDir)固定系统自动生成,绝对禁止多个agent复用同一个agentDir。

海兰 649

LicheePi4A镜像刷写教程(linux)

系统及版本架构: x86_64板卡规格ℹ️ 其他未经官方验证但可用的环境问题请参考issue提交页工具安装文件下载工具检查是否安装 wget:wget --version若未安装,执行:sudo apt install wget文件解压工具从 eMMC 启动注意!从 eMMC 启动前应当先取出 SD Card!准备工作安装镜像刷写工具检查是否安装 fastboot:fastboot --version若未安装,执行:sudo apt install fastboot获取镜像选择并下载镜像。

2401_89665587的博客 772

手把手教你学veriolg(二十六)-- Verilog CIC 滤波器设计

目录 Verilog CIC 滤波器设计1. CIC 滤波器的基本原理2. Verilog 实现3. 说明4. 测试激励5. 总结 CIC(Cascade-Integrator-Comb)滤波器是一种特殊的数字滤波器,常用于多速率信号处理中,尤其是用于信号的上采样(插值)和下采样(抽取)。CIC 滤波器的特点在于它具有简单的硬件实现、不需要乘法器(仅使用加法器和延迟元件)、且具有线性相位特性。然而,CIC 滤波器的缺点是它会产生较大的量化误差,因此在设计时需要特别注意字长的选择以避免溢出。1. CIC 滤波

MHD0815的博客 890

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

licheepi nano BS8112A触摸按键

BS8112A是一款带有12个按键的触摸芯片。I2C接口,带中断指示,可通过I2C配置寄存器改变按键的触发门槛值。 内核版本:Linux-4.15.0 硬件:荔枝派 licheepi-nano 一、在内核中新增BS8112A的驱动代码。在内核目录drivers/input/keyboard/下新建bs8112a.c,直接上代码 /* * BS8112A - Touch keypad ...

大浪淘沙 1490

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Licheepi_nano开发板:linux内核编译

linux内核编译

weixin_38103659的博客 495

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 构建RISC-V架构OS镜像方法介绍 | KeyarchOS(浪潮信息云峦操作系统,KOS)
下一篇: 从“边拆边刷”到“批量刷新”:深入剖析 RISC-V 内核 TLB Shootdown 优化
KeyarchOS
博客等级 码龄3年 1312粉丝 339原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值