0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过Docker使用香山

中国开放指令生态RISCV联盟 来源:北京开源芯片研究院 2024-10-29 09:38 次阅读

以下文章来源于北京开源芯片研究院,作者贾志杰、安旭

本次资源包升级内容

升级了Docker,注意下载链接已更新

增加了香山仿真演示

增加了本次使用的香山工具AM、NEMU、difftest的详细解说

本次整合包适合以下人群使用

零基础入门,没有芯片设计经验的人

没有Linux操作系统

不想在本地搭建运行环境

想要一步到位,快速上手的心急派

特别说明

整合包基于高性能开源处理器香山制作,是香山团队倾情打造手把手教学。

这个整合包发布经过“一生一芯”同学们的实战检测。欢迎加入QQ群793255484,与小伙伴们一起探讨香山使用经验。

资源包在通过Docker形式提供了运行香山必须的Linux操作系统、香山开发环境、香山和仿真相关工具的代码,会大大降低自己部署环境和工具的难度,理论上比自己部署要方便。如果想自己配置,可以参看本地使用香山的文档自行安装。

电脑配置需求(笔者电脑配置参考)

操作系统:Windows 11

CPU:不做强制性要求,但是性能越高越好

内存:推荐32G+

整合包推荐放在固态硬盘中

通过Docker使用香山第一部分:

准备工作

1. XS-Docker提供了啥、如何下载以及Docker使用学习

a. docker提供:Linux操作系统Ubuntu 20.04、香山开发环境(软件包和编译工具链)、香山和仿真相关工具的代码

b. 下载XS-Docker链接

提取码:bv9t

c. Docker安装使用帮助

(Docker的使用说明非常多,此处是同学自己的学习记录,欢迎大家交流分享)

2. 运行XS-Docker的命令

注:以下命令中:#符号表示之后文字为注释,使用时不必复制;<>符号表示变量,需要替换为用户看到的实际值,符号本身不要保留

bc278436-90d5-11ef-a511-92fbcf53809c.png

最后一步如果成功,命令行界面会变为:

bc49cbea-90d5-11ef-a511-92fbcf53809c.png

这样就成功进入docker镜像提供的ubuntu界面。

bc5c7970-90d5-11ef-a511-92fbcf53809c.png

通过Docker使用香山第二部分:

香山仿真演示

我们在 docker 镜像里提供了预先编译好的香山仿真模拟程序,可以用它来运行 coremark、linux_hello 等程序。

此处我们暂不解释各项参数的含义,只先熟悉一下仿真运行程序的整个过程。

从第一部分的最后,进入 ubuntu 界面开始:

bc7eb7a6-90d5-11ef-a511-92fbcf53809c.pngbc9f97aa-90d5-11ef-a511-92fbcf53809c.png

运行成功可以看到类似下图的输出:

bcbba710-90d5-11ef-a511-92fbcf53809c.png

如果电脑性能较差,可能在中间卡住较长时间。本人电脑(i5-1240P)小于5分钟完成。

#给大家展示下机主 CPU 狂烧的样子,嘎嘎O(∩_∩)O

bcdecdd0-90d5-11ef-a511-92fbcf53809c.pngbcff229c-90d5-11ef-a511-92fbcf53809c.png

如果电脑性能较好,可以尝试运行更复杂的 linux_hello 程序。

bd1febc6-90d5-11ef-a511-92fbcf53809c.png

运行成功可以看到如下输出:

bd376288-90d5-11ef-a511-92fbcf53809c.pngbd5c18ee-90d5-11ef-a511-92fbcf53809c.png

通过Docker使用香山第三部分:

本次使用的香山工具解说

1. AM

仿真时用到的 .bin 文件,是测试程序镜像,将其输入给 EMU 就可以模拟香山核运行该程序的过程。

获取 .bin 的方式有多种,最常用是通过 AM 来生成。

AM 是一个裸机运行时环境,我们可以使用 AM 来编译在香山裸机上运行的程序。

在 AM 的 apps 目录下提供了一些预置的程序源代码,比如 coremark、hello、microbench 等。下面以 coremark 为例,演示利用AM编译生成测试程序镜像的过程。

bd8a241e-90d5-11ef-a511-92fbcf53809c.png

riscv64-xs 架构进行编译

bda21be6-90d5-11ef-a511-92fbcf53809c.png

编译完成后,可以看到新生成的文件夹 build

其中 riscv64-xs 目录为编译中间文件,其他三个是编译产物。

txt 是程序的反汇编文件

bin 是仿真所需的程序镜像

bdc360a8-90d5-11ef-a511-92fbcf53809c.png

2. NEMU

NEMU 是一个解释型的指令集模拟器,在仿真过程中它同样执行程序,为香山提供一个作为对照的正确结果。

bdd6bd7e-90d5-11ef-a511-92fbcf53809c.png

第一步:make riscv64-xs-ref_defconfig

bdf569c2-90d5-11ef-a511-92fbcf53809c.png

第二步:make -j

be157a50-90d5-11ef-a511-92fbcf53809c.png

完成这两步,才是完成“给香山对照的 nemu”的编译

编译生成的结果,在 build 目录的如下位置

be298888-90d5-11ef-a511-92fbcf53809c.png

3. difftest(差分测试)

difftest 是一个协同仿真框架,它在仿真运行时负责将香山核的输出与 NEMU 的输出进行对比,判断香山是否按照指令集定义的那样正确运行。

difftest 是验证香山功能正确性的重要工具,也对我们定位 bug 和解决 bug 提供了极大帮助。

difftest 与香山代码有较高的耦合,目前是作为一个子模块放在香山目录下,在编译仿真程序 emu 时将自动使用。

在仿真运行(执行 emu 时),通过 --diff 参数指定 nemu 来开启对比功能,如果不需要对比可以使用 --no-diff 关闭该功能,这时将只进行香山核的仿真。

4. 编译香山核的仿真程序 EMU

有了前面部分的基础,这里我们尝试自行编译前面仿真演示中使用的香山仿真程序EMU。

这一过程中使用 mill 将香山的 chisel 语言代码编译为 Verilog 语言代码,然后通过 verilator 将 Verilog 代码编译为 c++ 语言的仿真模拟程序。

这些步骤已经在香山的 Makefile 里预先配置好了,我们可以通过如下命令直接编译

be47f296-90d5-11ef-a511-92fbcf53809c.png

解释参数

emu,表示编译预设为 emu,目标是编译仿真程序 EMU。香山还有生成可综合 Verilog 的预设,具体可见Makefile。

-j32 ,是 make 编译命令的参数,表示编译时使用 32 个线程。

后面大写的参数是对EMU的设置,其中:

CONFIG 指定香山配置,MinimalConfig 是简化版香山配置,为双发射,其余内部参数也相应缩减;DefaultConfig 是完整版香山配置,为6发射,需要的编译时间较长,并且对机器性能有较高要求。不指定 CONFIG 时默认为 DefaultConfig 配置。

EMU_THREADS 指定之后运行 EMU 时可用到的线程

EMU_TRACE=1 指定之后运行 EMU 时候可以打印波形

编译 MinimalConfig 至少需要 40GB 内存,编译 DefaultConfig 则推荐 80GB 内存以上。

这一步时间会比较久,需要耐心等待,生成结束后,可以在 ./build/ 目录下看到一个名为 emu 的仿真程序。

(如果你已经做到这里了,可以在 gitlink 的 howtouseissue 提交截图获得奖励~)

利用 emu 仿真程序,可以让香山核运行指定的测试程序,进而验证功能或者测试性能。

emu 的基本用法是:

be70885a-90d5-11ef-a511-92fbcf53809c.png

其中:

-i 指定测试程序镜像

--diff 指定用于给 difftest 提供对照的 nemu 动态链接库

2> 是 shell 操作,把 std error 的数据(性能计数器的数据)打印到文件,之后可以通过该文件查看性能计数器的结果。这样避免性能计数器结果和emu执行结果混在一起难以观察。

emu 还可以打印出波形

可以使用 --dump-wave 参数打开波形,并使用 -b 和 -e 参数设置生成波形的开始和结束周期,例如想要生成 10000 ~ 11000 周期的波形,可以使用如下命令:

be8a2e86-90d5-11ef-a511-92fbcf53809c.png

其中 -b 和 -e 的默认值为 0,注意仅当 -e 参数大于 -b 时才会真正记录波形;波形文件将会生成在 ./build/ 目录下,波形格式默认为 vcd。

emu 的更多功能可以使用 help 查看

bea52b46-90d5-11ef-a511-92fbcf53809c.png

欢迎大家来开源芯片社区查看更多香山使用文档。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19259

    浏览量

    229652
  • 操作系统
    +关注

    关注

    37

    文章

    6801

    浏览量

    123283
  • 开源
    +关注

    关注

    3

    文章

    3309

    浏览量

    42471
  • 命令
    +关注

    关注

    5

    文章

    683

    浏览量

    22011
  • Docker
    +关注

    关注

    0

    文章

    457

    浏览量

    11846

原文标题:如何通过Docker使用香山

文章出处:【微信号:中国开放指令生态RISCV联盟,微信公众号:中国开放指令生态RISCV联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如意香山笔记本软件适配工作稳步推进,成功运行多款Linux发行版及国产办公套件

    工作进展顺利,并有可能最快在下周官宣。今天,我们高兴地宣布,如意香山本上 Debian 操作系统的适配也已经初步完成,能够稳定地运行 WPS 等国产办公套件(通过二进制翻译的形式)。如意香山本的软件生态
    发表于 09-02 11:33

    Docker是什么?

    为什么是Docker?尽管现在的Docker已经风靡全球,但还是有很多开发者(特别是嵌入式开发者)对Docker认识还是仅仅停留在它的服务器应用上面。殊不知,Docker已经是微软Az
    发表于 10-28 07:11

    香山是什么?“香山” 高性能开源 RISC-V 处理器项目介绍

    修改历史均在 Git 提交记录中可见。香山处理器的物理设计流程主要由我们在鹏城实验室的后端与 SoC 工程师团队完成。我们希望通过持续不断的优化与流片验证,逐步提高香山处理器的 PPA 水平,让
    发表于 04-07 14:20

    docker基础知识和使用bmnnsdk时的docker常用命令

    的物理机上运行一样。有了 Docker,就不用担心环境问题。 1.2 image文件与容器container Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能
    发表于 09-18 07:59

    Docker监控实战分析

    Docker 优势 那为什么 Docker 越来越火呢?一谈起 Docker 总是会跟着让人联想到轻量这个词,甚至会有一种通过 Docker
    发表于 10-13 17:05 2次下载
    <b class='flag-5'>Docker</b>监控实战分析

    浅析Docker镜像本地存储机制及容器启动原理

    Docker 镜像不是一个单一的文件,而是有多层构成。我们可通过 docker images 获取本地的镜像列表及对应的元信息, 接着可通过dock
    发表于 10-19 14:17 2528次阅读

    Docker—简介与镜像用法

    阿里云官方镜像站: ​​https://developer.aliyun.com/mirror/?utm_content=g_1000303593​​ ​ 一、容器简介 Docker是管理容器的引擎
    发表于 11-25 16:28 515次阅读
    <b class='flag-5'>Docker</b>—简介与镜像用法

    docker-cleanup Docker清理脚本

    docker-cleanup.zip
    发表于 04-29 10:03 0次下载
    <b class='flag-5'>docker</b>-cleanup <b class='flag-5'>Docker</b>清理脚本

    Docker镜像的详细讲解

    本文是对 Docker 镜像的详细讲解,讲解了如何安装 Docker、配置 Docker 镜像加速以及操作 Docker 镜像。希望对大家有所帮助~
    的头像 发表于 08-02 10:00 2172次阅读

    docker 搜索镜像,docker查看镜像详细信息(docker下载镜像命令)

    Docker Hub是集中管理的Docker镜像注册中心。通过Docker 用户可以在注册中心搜索、下载和使用CLI命令行工具中的镜像。以下是常用的
    的头像 发表于 07-19 09:46 1848次阅读

    linux关闭docker的命令

    在 Linux 系统中,关闭 Docker 的操作可以通过以下多种方式进行。本文将详细讲解每一种方式,并提供示例代码和命令,以帮助读者更好地理解和实践。 使用 docker 命令 最常用的方法
    的头像 发表于 11-23 09:39 2820次阅读

    如何启动本机docker服务

    在本机上安装DockerDocker支持多个操作系统,包括Linux、Windows和Mac OS等。根据你使用的操作系统,选择对应的安装方式进行安装。 对于Linux系统,可以通过以下命令来安
    的头像 发表于 11-23 09:43 2156次阅读

    docker核心组件有哪些

    Docker 是一种开源的容器化平台,它能够实现将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速、可重复、可扩展的部署和管理。Docker 的核心组件包括 Docker Engine
    的头像 发表于 11-23 09:47 1931次阅读

    docker内存不足的解决办法

    内存和CPU。通过这个命令,我们可以发现哪个容器占用了大量的内存资源。 调整Docker守护进程的内存限制: Docker守护进程本身也会消耗一些内存资源。我们可以通过修改
    的头像 发表于 11-23 10:41 2616次阅读

    精通Docker网络:Bridge驱动深度解析

    除了使用 docker0 网桥外,用户还可以使用自定义的网桥,然后通过 --bridge=BRIDGE 参数传递给 docker daemon。
    的头像 发表于 03-31 15:58 1437次阅读
    精通<b class='flag-5'>Docker</b>网络:Bridge驱动深度解析