在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

香山CPU(国产开源)的 SoC SDK底层程序编写,以及其它开源SoC芯片介绍

香山CPU(国产开源)的 SoC SDK底层程序编写,以及其它开源SoC芯片介绍 香山CPU国产开源的 SoC SDK底层程序编写以及如意开源操作系统介绍目的是用C语言在以香山开源CPU核为基础的开源SoC芯片的硬件平台上编写完整的裸机SDK、RTOS驱动、Linux驱动。限于当前香山CPU还没有完整的开源SoC没有外设模块前期会借鉴蜂鸟E203、玄铁CH2601、OpenTitan、SiFive Freedom E310等带外设的开源SoC的模块寄存器来编写程序。因为没有香山CPU的开发板程序都会运行在NEMU或QEMU模拟器上。香山开源CPU核的开发商是北京开源芯片研究院 目标是打造开源RISC-V产业生态但现在才初步开始并没有一款带所有外设的开源SoC也没有开发板出售当前的主线项目还只有香山CPU核作者将狼才鲸创建时间2025-12-18修改时间2026-08-11源码仓库才鲸嵌入式/香山CPUSoCSDKCSDN阅读网址香山CPU国产开源的 SoC SDK底层程序编写以及其它开源SoC芯片介绍一、前言困扰换过几家公司用过几种芯片它们有着不同的CPU核不同的外设寄存器不同的协议栈代码例如8051、ARM Cortex-M、ARM Cortex-A、Xtensa、TI C66x、AVR总是做一些重复性工作。既然芯片总是换来换去代码没有延续性反正都是要换的为何不干脆针对一款普及最广的开源CPU IP核以及开源SoC芯片写一些底层代码呢这样利用空余时间还能不断迭代代码学习一些新思路。这些底层SDK代码原本是会由芯片厂商提供的也就是由芯片厂商里的嵌入式软件工程师编写。但是当前并没有专门提供可商用开源SoC芯片的公司所以我准备选一个CPU核写一点。因此这个学习型仓库的受众是芯片厂商的嵌入式软件工程师SDK、中间件、操作系统移植、驱动一般公司的嵌入式驱动软件工程师以及对底层工作内容感兴趣的嵌入式应用软件工程师。基于上述目的搜索了一下可用的硬件平台开源的CPU指令集RISC‑V使用最多、OpenRISC、SPARC V8/V9、MIPS开源版本、OpenSPARC、OpenPOWER、MIPS Open、LatticeMico32、WARP‑V、MOR1KX开源的CPU核IP香山国产、玄铁C906/C910国产、wujian100_open/玄铁CH2601国产、VexRiscv、PicoRV32、Rocket、BlackParrot、OpenRio、CV32E40P、NEORV32、Ibex、CVA6、Ariane、BOOM、CV32E40P、darkriscv、Hummingbirdv2 E203、木心处理器、Sodor、YARVI、Pulpino、GRVI Phalanx、SweRV EH1、PicoRio、RISCY里面有很多是用在FPGA上或者仅供研究无法商用或者不再更新迭代的开源的MCU/SoCCPU总线外设蜂鸟Hummingbird E203国产偏教学、LiteX适配多种CPU核SoC生成器、Freedom E310、OpenTitan、X-HEEP、Sodor SoC、OpenPiton、NEORV32、IOb-SoC、PicoRV32 PicoSoC、VexRiscv Murax、Rocket Chip、PULPino基本上都是用在FPGA上或者仅供研究无法商用或者不是通用MCU的最终选定香山CPU核再融合其它开源SoC里的模块在QEMU模拟器上运行代码。香山CPU核资料代码仓库XiangShan/XiangShanCPU使用文档香山开源处理器用户手册官网北京开源芯片研究院服务公司北京开芯红科技有限公司国内RISC-V CPU设计公司汇总竟有四十多家挑战香山是高性能CPU本意是为服务器芯片、AI芯片、GPU、DPU、工业控制、能源、医疗、汽车、通信和机器人应用场景设计而不是为嵌入式场景设计的所以为了在SoC上集成USB、网络、串口、SPI、I2C、SD、2D等开源IP核还要想些办法主要是把开源外设模块的寄存器实现移植到QEMU的模拟器中去创新“产学研”协同模式 开芯院发布第二代“香山”南湖 开源高性能RISC-V处理器核已商用的产品首款香山笔记本——如意香山本全球首款香山笔记本“如意香山本”发布2.5GHz 第二代“南湖”处理器、RX 550 独显RuyiBookMilk-V群星闪耀科技某国产量产GPGPU芯片正式亮相基于该芯片的智能加速卡出货量已上万一家国产GPU芯片头部企业展示的自研智算加速卡中成功集成了“香山”南湖IP核“香山”实现业界首个高性能开源芯片的产品级交付与规模化应用进迭时空正基于“香山”昆明湖自研X200核进迭时空RISC-V服务器芯片平台使用了“香山”昆明湖核已在FPGA平台上稳定地运行Linux操作系统及虚拟机spacemit-x200-core芯动科技高性能全功能GPGPU芯片“风华3号风华3号阿里达摩院平头哥玄铁开源了E902、E906、C906、C9104四款量产处理器IP核其中E系列为MCU级别的玄铁处理器其它CPU核型号有C906-C930E901-E907R908-R910大部分都是闭源的提交次数都很少都是四年前更新的XUANTIE-RV/opene902XUANTIE-RV/opene906XUANTIE-RV/openc906XUANTIE-RV/openc910XUANTIE-RV/wujian100_open无剑100芯片设计平台玄铁·CH2601芯片SoC 含有DMA、RTC、PWM、USB1.1、GPIO、I2S、WDT、ADC、Timer、SPI、I2C、UART但外设并不开源蜂鸟E203 SoC资料RISCV-MCU/e203_hbirdv2SI-RISCV/e200_opensourceNuclei-Software/e603_hbirdRVMCU RV-STAR芯来科技 官网上找不到E203的资料E203只是他们开源用作教学的LiteX SoC资料icesugar使用litex定制SOC系统一HomeAdmin/litex欢迎来到 LiteX Hub香山CPU核源码XiangShan/XiangShan当前稳定版本为v3.2.2-alpha里面没有C语言测试代码rootfs、Linux在别的仓库其中Linux仓库只存放在Github上Gitee上没有芯片运行平台XiangShan/ready-to-run 编译好的二进制程序XiangShan/NEMU 模拟器NJU-ProjectN/nemu 平行发展的南京大学的一个教学模拟器作者是同一个人NEMU 使用指南网上其它的资源很少二、资料阅读芯片用户手册香山开源处理器用户手册Kunminghu-V2R2-alpha3xiangshan-user-guide-zh.pdf 对软件开发来说有用的内容不多没有描述指令集只描述了些基础的寄存器xiangshan-user-guide-twoside-zh.pdf 只是双面打印版本内容和前面一样可执行文件介绍工作负载指运行在香山CPU上的程序工作负载概述适用于 NEMU、XS-GEM5 等模拟器环境香山仿真环境仅支持纯二进制Flat binary格式的工作负载文件香山仿真环境仅支持传递 1 个工作负载文件香山仿真环境不支持 ELF 格式的可执行文件依赖库例如将C源码编译成可执行二进制文件时调用的C语言标准库AM 是一个裸机运行时环境用户可以使用 AM 来编译在香山裸机上运行的程序使用 AM 生成自定义 workloadXiangShan/nexus-am生成的可执行文件在emu模拟器运行交叉编译工具链交叉编译工具链说明riscv64-linux-gnu- 用于Linuxriscv64-unknown-linux-gnu- 用于Linuxriscv64-unknown-elf- 用于嵌入式裸机指令集架构香山的三代CPU名字分别为第一代“雁栖湖”、第二代“南湖”、第三代“昆明湖”所有三代处理器均基于开源的RISC-V指令集第一代RV64GC第二代RV64GCBK RVV第三代RV64GC RVV 自定义扩展香山处理器欢迎访问香山官方文档EMU模拟器与Linux移植工作负载概述Linux Kernel for XiangShan in EMU另一个方法 构建一个可在香山或者 NEMU 上运行的使用 OpenSBI 的最简 Linux Kernel当前香山CPU的可执行文件还只能在NEMU模拟器上运行而无法在QEMU模拟器上运行NEMU模拟器NEMU 使用指南在源码的resource文件夹里阅读相关的文档使用 NEMU 生成 Simpoint CheckpointOracleBP分支预测器简介XiangShan/NEMU 模拟器源码NJU-ProjectN/nemu 平行发展的另一个南京大学的教学模拟器作者是同一个人网上其它的资源很少RISC-V指令集文档TODO待搜索三、NEMU模拟器运行实践我使用的平台是VMware17.5.2虚拟机 Ubuntu20.04系统记住以下所有export注册环境变量都是临时的命令行终端关闭后就失效了如果要永久生效请手动添加到~/.bashrc中并source ~/.bashrc1. NEMU模拟器的安装与香山CPU裸机程序运行参考NEMU 使用指南下载源码git clone https://gitee.com/OpenXiangShan/NEMU.git进入NEMU仓库所在位置执行export NEMU_HOME$(pwd)make riscv64-xs_defconfig期间会从GitHub下载子模块需要先安装SDL2sudo apt install libsdl2-2.0-0 libsdl2-dev如果有冲突则使用sudo aptitude install libsdl2-2.0-0 libsdl2-dev第一步输入N后续一路输入Y解决冲突需要先安装readline库sudo apt install libreadline8 libreadline-dev需要先安装zstd 库sudo apt install libzstd1 libzstd-devmake -j4jimvirtual-pc:~/nemu$make-j4 CC src/nemu-main.c. CXX src/memory/store_queue_wrapper.cpp g /home/jim/nemu/build/riscv64-nemu-interpreter jimvirtual-pc:~/nemu$用NEMU运行裸机程序的命令注意运行后还要手动敲一下c才能真正执行~/nemu/build/riscv64-nemu-interpreter ~/nexus-am/apps/hello/build/hello-riscv64-xs.bin其中hello-riscv64-xs.bin程序已经上传到https://gitee.com/langcai1943/XiangShanSocSDK/tree/develop/bin/hello-riscv64-xs.binjimvirtual-pc:~/nexus-am/apps/hello$ ~/nemu/build/riscv64-nemu-interpreter ~/nexus-am/apps/hello/build/hello-riscv64-xs.bin[src/isa/riscv64/init.c:234,init_isa]NEMU will start from pc 0x80000000[src/device/io/port-io.c:35,add_pio_map_with_diff]Add port-io mapuartliteat[0x00000000000003f8, 0x0000000000000404][src/device/io/port-io.c:35,add_pio_map_with_diff]Add port-io mapscreenat[0x0000000000000100, 0x0000000000000107][src/device/io/port-io.c:35,add_pio_map_with_diff]Add port-io mapkeyboardat[0x0000000000000060, 0x0000000000000063][src/device/sdcard.c:137,init_sdcard]Can notfindsdcard image:[src/monitor/image_loader.c:204,load_img]Loading image(checkpoint/bare metal app/bbl)from cmdline: /home/jim/nexus-am/apps/hello/build/hello-riscv64-xs.bin[src/monitor/image_loader.c:260,load_img]Read7048bytes fromfile/home/jim/nexus-am/apps/hello/build/hello-riscv64-xs.bin to 0x0x776dee614000[src/monitor/monitor.c:63,welcome]Debug: OFF[src/monitor/monitor.c:68,welcome]Build time: 01:01:30, Dec202025Welcome to riscv64-NEMU!For help,typehelp(nemu)c Hello Xiangshan!这是裸机程序输出的字符串[/home/jim/nemu/src/isa/riscv64/include/../instr/special.h:38,execute]nemu_trapcase0[src/cpu/cpu-exec.c:938,cpu_exec]nemu: HIT GOOD TRAP at pc0x0000000080000060[src/cpu/cpu-exec.c:944,cpu_exec]trapcode:0[src/cpu/cpu-exec.c:155,monitor_statistic]hosttimespent7,328us[src/cpu/cpu-exec.c:157,monitor_statistic]total guest instructions1,456[src/cpu/cpu-exec.c:158,monitor_statistic]vst count0, vst unit count0, vst unit optimized count0[src/cpu/cpu-exec.c:161,monitor_statistic]simulation frequency198,689instr/s(nemu)q[src/utils/state.c:30,is_exit_status_bad]NEMUexitwith good state:2,haltret:0jimvirtual-pc:~/nexus-am/apps/hello$官方编译好的二进制程序我未测试过XiangShan/ready-to-run2. 交叉编译工具的获取交叉编译工具链说明riscv64-linux-gnu- 用于Linuxriscv64-unknown-linux-gnu- 用于Linuxriscv64-unknown-elf- 用于嵌入式裸机三款处理器指令集默认均为 RV64GC香山处理器南湖架构支持 RV64GCBK 扩展获取预编译好的夜间版本(预编译版本不需要自行从源码编译)riscv64-elf-ubuntu-20.04-gcc-nightly-2024.04.12-nightly.tar.gzriscv64-glibc-ubuntu-20.04-gcc-nightly-2024.04.12-nightly.tar.gz将下载到的 2 个 tar.gz 文件解压到 /opt并把 /opt/riscv/bin 添加到 PATH 中。sudo tar -xzf riscv64-elf-ubuntu-20.04-gcc-nightly-2024.04.12-nightly.tar.gz -C /optsudo tar -xzf riscv64-glibc-ubuntu-20.04-gcc-nightly-2024.04.12-nightly.tar.gz -C /optexport PATH/opt/riscv/bin:$PATH完成后通过以下命令检查安装是否成功riscv64-unknown-linux-gnu-gcc --versionriscv64-unknown-linux-gnu-g --versionriscv64-unknown-linux-gnu-gfortran --versionriscv64-unknown-linux-gnu-objdump --versionriscv64-unknown-linux-gnu-gdb --versionriscv64-unknown-elf-gcc --versionriscv64-unknown-elf-g --versionriscv64-unknown-elf-objdump --versionriscv64-unknown-elf-gdb --version3. 使用AM运行时库编译裸机程序基于 AM 构建自定义裸机工作负载在~家目录获取AM源码git clone https://gitee.com/OpenXiangShan/nexus-am.gitexport AM_HOME~/nexus-amexport CROSS_COMPILE/opt/riscv/bin/riscv64-unknown-elf- 不知道为什么改了这一步后编译还是提示riscv64-linux-gnu-gcc找不到因此用蠢办法强行解决cp /opt/riscv/bin/riscv64-unknown-elf-gcc /opt/riscv/bin/riscv64-linux-gnu-gcc 这是为了解决后面编译时报错并且要用错误的编译器工具名称编出非Linux系统的裸机程序cp /opt/riscv/bin/riscv64-unknown-elf-ld /opt/riscv/bin/riscv64-linux-gnu-ldcp /opt/riscv/bin/riscv64-unknown-elf-objdump /opt/riscv/bin/riscv64-linux-gnu-objdumpcp /opt/riscv/bin/riscv64-unknown-elf-objcopy /opt/riscv/bin/riscv64-linux-gnu-objcopycd ~/nexus-am/appsmkdir hellocd hellovim Makefile加入内容NAME hello SRCS $(shell find -L ./src/ -name *.c) include $(AM_HOME)/Makefile.appmkdir srcvim src/hello.c加入内容#includeklib.hintmain(){printf(Hello Xiangshan!\n);printf(这是裸机程序输出的字符串\n);return0;}make ARCHriscv64-xsjimvirtual-pc:~/nexus-am/apps/hello$makeARCHriscv64-xs# Building hello [riscv64-xs] with AM_HOME {/home/jim/nexus-am}# Building lib-am [riscv64-xs] AS src/nemu/common/mainargs.S AR -build/am-riscv64-xs.a# Building lib-klib [riscv64-xs]# Creating binary image [riscv64-xs] LD -build/hello-riscv64-xs.elf OBJCOPY -build/hello-riscv64-xs.bin jimvirtual-pc:~/nexus-am/apps/hello$如果上面编译流程报错可以参考下面的流程ByeBeihai/nexus-am/README.md用NEMU运行裸机程序的命令 ~/nemu/build/riscv64-nemu-interpreter ~/nexus-am/apps/hello/build/hello-riscv64-xs.bin4. 编译Linux、rootfs、Bootloader并运行4.1 使用Linux rootfs riscv-pk使用riscv-pk Bootloader的方式官方已不再推荐我编译此种组合时未成功官方操作流程介绍编译使用 RISCV-pk 的 Linux Kernel下载仓库如果网络太慢或者干脆连不上则把本小项看完https://github.com/OpenXiangShan/riscv-pk noop 分支git clone https://github.com/OpenXiangShan/riscv-pk.git -b noophttps://github.com/OpenXiangShan/riscv-linux nanshan 分支git clone https://github.com/OpenXiangShan/riscv-linux -b nanshanhttps://github.com/OpenXiangShan/riscv-rootfs master 分支git clone https://github.com/OpenXiangShan/riscv-rootfs -b master从香山项目中克隆下来 riscv-pk, riscv-linux, riscv-rootfs分别是启动加载程序 Bootloader, Linux kernel 和根文件系统 rootfs。请将三个仓库放到同一目录下。XiangShan/riscv-rootfs Gitee仓库 master 分支git clone https://gitee.com/OpenXiangShan/riscv-rootfs.git -b masterhttps://github.com/OpenXiangShan/riscv-pk noop 分支git clone https://github.com/OpenXiangShan/riscv-pk.git -b noop注意该仓库在Gitee码云官方上并没有上传需要从Github上下载速度奇慢但仓库很小能拉下来可以使用镜像网址如git clone https://bgithub.xyz/OpenXiangShan/riscv-pk.git最方便的是注册个Gitee账号点击页面右上角选择从GitHub导入填入仓库地址等导入成功后再从Gitee上下载。我导入好的地址是git clone https://gitee.com/langcai1943/riscv-pk.git -b noophttps://github.com/OpenXiangShan/riscv-linux nanshan 分支注意因为Linux源码在Windows系统上会checkout失败部分文件名无法在Windows系统上留存因此只会pull成功看到一个.git的隐藏文件夹如果需要查看源码则需要在Linux系统下clone也可以先在Windows下clone或pull成功然后打成压缩包再拷贝到Linux下解压然后再checkoutgit clone https://github.com/OpenXiangShan/riscv-linux.git -b nanshan注意该仓库在Gitee码云官方上并没有上传需要从Github上下载有4.3G速度奇慢可以浅克隆则大小只有175M只是下载看源码和编译的话推荐这种方法git clone --depth 1 --branch nanshan https://github.com/OpenXiangShan/riscv-linux.git我上传好的地址是git clone https://gitee.com/langcai1943/riscv-linux.git nanshan浅克隆的仓库无法推送到Gitee因为历史记录不完整导致Git无法解决版本冲突除非删掉.git文件夹按全新仓库提交可以使用镜像网址如git clone https://bgithub.xyz/OpenXiangShan/riscv-linux.git nanshan最方便的是注册一个Gitee账号点击页面右上角选择从GitHub导入填入仓库地址等导入成功后再从Gitee上下载必须保证你的Gitee免费空间够用新人免费5G否则导入会失败且没有报错提示同步完成的时间需要很久因为仓库很大有4.3G。设置环境变量exportPATH/opt/riscv/bin:$PATHexportNEMU_HOME~/NEMUexportNOOP_HOME~/riscv-pkexportRISCV_ROOTFS_HOMEriscv-rootfsexportRISCV/opt/riscv构建 rootfs当前无需操作具体生成的步骤在后续进行构建 Linux Kernel 的配置cd ~/riscv-linuxmake ARCHriscv CROSS_COMPILEriscv64-unknown-linux-gnu- emu_defconfig构建 BBL链接 Kernel编译Kernelcd ~/riscv-pkriscv-pk/dts 中的 platform.dtsi 已经软链接到对应的 noop.dtsi无需操作make -j4 编译文件系统编译Kernel我在这一步失败了期间进行过的一些处理流程见下面把Makefile文件中77、79、82、83、84行用#号屏蔽掉因为担心会从Github拉取riscv-rootfs仓库之前已经拉取过# mkdir -p $/bin/echo-e\033[1;31mBy default, a shallow clone with only 1 commit history is performed, since the commit history is very large.\nThis is enough for building the project.\nTo fetch full history, run git fetch --unshallow under$(LINUX_REPO_PATH).\033[0m# git clone --depth 1 -b noop https://github.com/LvNA-system/riscv-linux.git $#$(ROOTFS_PATH):# mkdir -p $# git clone https://github.com/LvNA-system/riscv-rootfs.git $然后riscv-rootfs中也有很多需要make时动态拉取的git.kernel.org、github.com中的git仓库因为经常断开导致编译失败使用 grep -r “git clone” 来查找所有拉仓库的地址例如git://git.kernel.org/pub/scm/utils/dtc/dtc.git、https://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git 等将 https://github.com 替换成 https://bgithub.xyz 镜像地址如果Gitee上确认有相关镜像的话也可以换成Gitee的地址将 git://git.kernel.org/pub/scm 替换为 https://mirrors.tuna.tsinghua.edu.cn/git 清华源但是里面的 git://git.kernel.org/pub/scm/utils/dtc/dtc.git 要替换成Github的地址 https://bgithub.xyz/dgibson/dtc.git 清华源里没有但是解决了仓库拉取问题后编译还是报错错误信息如下所以最终问题还是没解决Error: Dependencyfile/home/jim/riscv-rootfs/apps/dtc/build/dtc/usr/lib64/lp64d/libfdt.ais missing. Please build it first. arch/riscv/kernel/vdso/flush_icache.S:25: Error: unrecognized opcodefence.i, extensionzifencei required arch/riscv/mm/fault.c:249: Error: unrecognized opcode csrr a4,sptbr, extension zicsr required make: ***[Makefile:90/home/jim/riscv-linux/vmlinux]错误24.2 使用Linux rootfs OpenSBIBootloader使用类似于U-Boot功能的OpenSBI之前香山CPU是使用RISV-pk已经废弃不用了先阅读操作流程编译使用 OpenSBI 的 Linux Kernel此教程太简略对新手不友好缺少很多常识性的步骤而我并不知道这些常识所以没有生成成功在~家目录下git clone https://github.com/riscv-software-src/opensbi.git 5.99Mwget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.10.3.tar.xz 速度慢git clone https://github.com/OpenXiangShan/riscv-rootfs -b checkpoint要切换到checkpoint分支git clone https://github.com/OpenXiangShan/nemu_board.git 一些设备树和板子的配置https://gitee.com/OpenXiangShan/NEMU.git 还要用到这个NEMU模拟器解压 Linux kernel 代码tar -xf linux-6.10.3.tar.xz设置环境变量包括交叉编译工具链exportRISCV_LINUX_HOME~/linux-6.10.3exportRISCV_ROOTFS_HOME~/riscv-rootfsexportWORKLOAD_BUILD_ENV_HOME~/nemu_boardexportOPENSBI_HOME~/opensbiexportRISCV/opt/riscvexportARCHriscvexportCROSS_COMPILE$RISCV/bin/riscv64-unknown-linux-gnu-构建文件系统cd ~/riscv-rootfs/这里面的 make只是用来 构建可能被打包的应用准备好想要运行的 initramfs 文件里面可以放想要跑的二进制可执行程序TODO我不知道后续正确的流程该是什么使用 update-initramfs 工具自动生成 initramfssudo update-initramfs -c -k $(uname -r)lsinitramfs /boot/initrd.img-$(uname -r) | head -20将 initramfs 嵌入内核方法1在 .config 中指定 CONFIG_INITRAMFS_SOURCE“/path/to/initramfs/directory”构建设备树cd ~/nemu_board/dts运行脚本 ./build_single_core_for_nemu.sh该脚本会在 build 目录下生成 xiangshan.dtb我执行该操作时报错失败构建 Linux Kernelcd ~/linux-6.10.3cp $WORKLOAD_BUILD_ENV_HOME/configs/xiangshan_defconfig $RISCV_LINUX_HOME/arch/riscv/configs/xiangshan_defconfigmake xiangshan_defconfigmake -j4因缺少前置rootfs的操作此步骤未能正确完成4.3 参照FPGA中运行香山CPU的一些流程查看文档导入docker镜像在需要部署的服务器上安装docker应用阿里云盘https://www.aliyundrive.com/s/1abKfjYKWJ6Docker镜像MD5SUM3ebafca4bfaa53c93abaf6ab3a3a8626dockerload--input服务器镜像路径(蓝字部分)dockerimages# 执行后可以看到image_id,大小为4.53GBpwd#执行后得到宿主机上文件夹的绝对路径dockerrun-it-v宿主机上文件夹的绝对路径:/home/your_name(尽量填名字方便找)image_id /bin/bash进入容器addgroup--gid5your_name adduser--uid4--gid5your_namesuyour_name#切换到用户, 至此环境部署完毕里面有riscv-linuxgitclone gitgithub.com:openxiangshan/riscv-linux.git-blinux-5.10.167gitclone gitgithub.com:openxiangshan/riscv-pk.git-bnanhu-mini-sysgitclone gitgithub.com:openxiangshan/riscv-rootfs.git-bnanhu-nfsmkdirbuildcdriscv-linuxmakenanhu_fpga_defconfigcd../makesw-j200#完成后buid目录下有linux.bingit clone gitgithub.com:OpenXiangShan/ns-bbl.git -b nanhu-dualcore-fpga设备树文件/ns-bbl/riscv-pk/dts/system.dts文件4.4 参考香山CPU前身果壳CPU的资料NutShell果壳四、底层程序编写XiangShan 地址映射表CFG AXI#ifndef_XS_MEMMAP_H_#define_XS_MEMMAP_H_#defineQSPI_FLASH_BASE0x10000000#defineDMA_BASE0x30040000#defineSDMMC_BASE0x30050000#defineUSB_BASE0x30060000#defineQSPI_BASE0x31000000#defineGMAC_BASE0x31010000#defineHDMI_BASE0x31020000#defineHDMI_PHY_BASE0x31030000#defineDP_BASE0x31040000#defineDDR0_BASE0x31060000#defineDDR0_PHY_BASE0x31070000#defineI2S_BASE0x310A0000#defineUART0_BASE0x310B0000#defineUART1_BASE0x310C0000#defineUART2_BASE0x310D0000#defineI2C0_BASE0x310E0000#defineI2C1_BASE0x310F0000#defineI2C2_BASE0x31100000#defineI2C_BASEI2C0_BASE#defineGPIO_BASE0x31110000#defineCRU_BASE0x31120000#defineWDT_BASE0x31130000#defineUSB2_PHY0_BASE0x31140000#defineUSB2_PHY1_BASE0x31150000#defineUSB3_PHY0_BASE0x31180000#defineUSB3_PHY1_BASE0x31190000#defineSOC_REG_BASE0x31200000#definePCIE0_CFG_BASE0x311C0000#definePCIE1_CFG_BASE0x311D0000#defineSYSCFG_BASE0x31200000#definePMA_CFG0_BASE0x38021000#definePMA_CFG2_BASE0x38021010#definePMA_ADDR_BASE(x)(0x380211008*x)#defineCPU_CFG_BASE0x3a000000#definePCIE0_BASE0x40000000#definePCIE1_BASE0x60000000#defineDDR_BASE0x80000000#defineUART_BASEUART0_BASE#defineSYNC_ADDRQSPI_FLASH_BASE0x07000000#endif//_XS_MEMMAP_H_香山CPU核心的对外接口主要包括 MEM AXI、DMA AXI 及 CFG AXI 三部分。分别用于对接 DDR 控制器、DMA 数据通路及 IO 操作。果壳CPU开源外设的参考信息外设使用 NEMU 生成 Simpoint Checkpoint五、NEMU模拟器的学习NJU PA2019 | 手摸手带你写一个虚拟机【一生一芯01】预学习-PA1总结NEMU源码中的文档NEMU模拟器没有官网因为是南京大学计算机系统基础课程的配套模拟器所有有课程资料计算机系统基础 PA 实验指导 (MOOC版)MOOC课程《计算机系统基础五x86模拟器编程实践》的代码仓库上面对运行NEMU帮助不大只是理解一些计算机的基础知识六、如意操作系统如意不是一个专用于香山CPU的操作系统他其实类似于GNU但比GNU更广。各种Linux发行版操作系统如Ubuntu、红帽、Debian、Fedora、Deepin 、银河麒麟、统信UOS其实是GNU/Linux系统。虽然搜索结果中经常如意和香山一起出现但如意不是一个专属于香山的操作系统。如意有各种中间件如驱动、数学库、编译器、仿真器、IDE开发环境、虚拟化、开发工具等。如意的中间件也用于其他系统如鸿蒙、欧拉、Deepin、麒麟等。如意的操作系统分为桌面版与服务器版。如意平台还有各种应用软件如音乐软件如办公软件、音视频播放、安全软件、浏览器、输入法等。如意桌面系统介绍如意RUYI 操作系统如意RUYI 操作系统由中国科学院软件研究所自主研发​ 基于OpenHarmony 原生系统能力自研实现账户系统云边协同、全局文件统一、应用框架扩展能力针对系统桌面和UI进行重构使其更加符合 PC/PAD 使用习惯。RUYI OSOpenHarmony在技术架构上整体遵从原生OpenHarmony操作系统的分层设计从下向上依次为硬件设备层、内核层、系统服务与框架层、应用层。面向PC/PAD的使用习惯与场景需求RUYI OSOpenHarmony主要在系统服务与框架层和应用层进行了大量的能力开发与重构优化工作。Linux5.10/6.6内核。优势支持PC/平板、支持ARM/RISC-V CPU。分为PC发行版与社区版。有操作系统镜像和文档支持下载。提供了开发板、嵌入式设备、CPU IP核、SoC核包括车载MCU、物联网SoC、智算SoC、SG2002(RISC-V 玄铁C906ARM Cortex-A53)、进迭时空K1/M1 RISC-V AI CPU。官网上的内容主要都是如何安装与如何使用没有程序源码和程序架构相关的部分。当前Gitee、Gitcode上没有开源仓库仅有空账号Github中有Linux的源码https://bdnb.cn/repo/openRuyi-Project/linux 仓库大小6G、https://bdnb.cn/repo/openRuyi-Project/u-boot 仓库大小200M。当前如意的官网上有对闭源CPU、闭源SoC也有对开源CPU IP如玄铁的适配但还没有介绍与香山CPU的适配。github.com/ruyisdk 是硬件相关的https://github.com/ruyisdk/support-matrix 这里面有当前支持的硬件列表支持的硬件很多但是当前还没有包含香山CPU。OpenRuyi开源系统是能支持香山CPU的操作系统对人工智能支持友好当前还未完善。“如意”启新打造RISC-V原生软件生态核心枢纽点亮开源算力未来 已失效如意社区openRuyi 文档中心当前如意系统的文档和源码发布在GithubGitcode和Gitee上还没有标准服务器平台固件接口规范打包 修包快速入门如何在容器内使用 openRuyi如何安装 openRuyi 工作站版如何使用 openRuyi Zero开放如意零一个最小的openRuyi initramfsopenRuyi Zero 版本旨在促进 SoC 的启动和内核开发尤其是在硅芯片出现前阶段。考虑到基于FPGA的CPU和SoC仿真的限制如意的一些仓库openRuyi-项目-GithubRVCK-Project/rvck Public 从Linux拷贝而来的源码比较大一个最小的openRuyi initramfs 可以用QEMU来启动七、进迭时空芯片与开发板进迭时空使用香山CPU核的芯片是X200面向云计算领域进迭时空第三代高性能 RISC-V 处理器核 X200 研发完成性能大幅跃升硬件平台进迭时空等进迭时空、蓝芯算力、芯动科技基于香山CPU做了SoC但是这些SoC是闭源的。进迭时空官网 https://www.spacemit.com/ 开源指令集开源 OS加速 RISC-V 开发者生态发展产品有芯片、IP核、SDK应用于机器人、AI、工业进迭时空K3芯片外设介绍https://www.spacemit.com/community/document/info?langzhnodepathhardware/key_stone/k3/k3_docs/k3_ds.mdhttps://github.com/ruyisdk/support-matrix 这里面有如意当前支持的硬件列表有进迭时空X60Key Stone K1芯片
返回列表