nuttx在riscv的qemu上运行体验 1.前言 2.环境准备 2.1 安装riscv32交叉编译工具链 2.2 安装qemu 2.3 获取Nuttx源代码 2.4 安装kconfig-frontends...各大互联网公司都在做自己的物联网操作系统,物联网操作系统已呈现百花齐放百家争鸣的态势。这篇文章主要讲Nuttx的使用。 11月5日,在小米开发者大会(MIDC 2020)上,小米Vela正式问世。...本文主要介绍在riscv32的qemu上体验nuttx的编译和执行过程。 2.环境准备 编译和运行环境在Ubuntu20.04平台上。...2.2 安装qemu 首先需要下载qemu,可以到qemu的官网上下载。 https://www.qemu.org/ 可选择最新版本下载即可。 ? 解压后进入qemu-5.2 $ ....可以看到,有类似于Linux的设备描述节点。 3.3 调试 可以输入下面的命令。 qemu-system-riscv32 -nographic -machine sifive_e -kernel .
关于dragonos在riscv上的启动流程的概述 dragonos在linux上的启动流程包括以下部分: DragonStub DragonStub是依托于uboot提供的efi环境来运行的,它基于linux...efi stub,负责把dragonos内核加载到对应的位置。...DragonOS-Community/DragonStub, 视频播放量 5870、弹幕量 5、点赞数 193、投硬币枚数 89、收藏人数 206、转发人数 16, 视频作者 灯珑LoGin, 作者简介… 内核head.S 对应的代码在...https://code.dragonos.org.cn/xref/DragonOS/kernel/src/arch/riscv64/asm/head.S?...这里所在的现场,在内核启动完成后将成为pid=0的idle线程。
https://github.com/riscv/riscv-opcodes 也可以在riscv官网上 https://github.com/riscv/riscv-isa-manual/releases...,所以该指令在翻译的时候,实际上就是取出rs1表示的是寄存器地址,然后返回的是rd,也是寄存器地址。...编译完成后,qemu在该目录下。...qemu是通过指令集解析的,目前只需在decodetree中增加一条cube指令的实现即可。 在target/riscv/insn32.decode中。 只需要按照规定的格式排版即可 ?...4.2 添加扩展函数 在扩展函数实现上可以在target/riscv/insn_trans/trans_rvi.c.inc中添加 static bool trans_cube(DisasContext
解压缩riscv架构ubuntu文件系统到ubuntu下 3.1.2 拷贝qemu模拟工具到riscv64架构ubuntu-rootfs文件系统下 3.1.2 chroot到模拟riscv64文件系统下...1.2 安装qemu虚拟化工具 1.2.1 apt安装 Ubuntu终端下需要安装qemu虚拟化工具,在终端下执行如下命令。...解压缩riscv架构ubuntu文件系统到ubuntu下 在VMware Ubuntu虚拟机家目录下创建一个 ubuntu-rootfs目录,用于解压缩保存文件使用。...如果你是手动编译生成的qemu-riscv64-static文件,则参考下述命令。 book@100ask:~$ sudo cp ./qemu/build/out/bin/qemu-riscv64 ..../riscv/usr/bin/qemu-riscv64-static ubuntu-roofs/usr/bin/ 指的是你当前解压riscv64架构的ubuntu20.04文件系统后的所在目录下的 usr
本文将演示QEMU上建立RISCV的环境,以及如何交叉编译Linux,通过文章的描述,可以掌握RISC-V上的Linux的编译开发流程,文章也展示了在riscv64架构上运行fedora和ubuntu两个...2.工具介绍 在进行环境搭建之前,首先先来介绍一些目前开源的比较热门的RISCV工具项目。...https://github.com/riscv/riscv-isa-sim 在RISC-V架构指令集扩展层面有着非常好的实现。...- -j $(nproc) 编译完成后,最后生成的Kernel文件在linux/arch/riscv/boot/Image。...这样就可以在RISCV的架构上开发应用程序了。
QEMU 是开源项目,代码托管在 GitHub 上,可以直接 git clone 下载。...qemu源码压缩包: 使用 wget 命令下载 QEMU 的源代码压缩包。...使用以下命令解压刚刚下载的压缩包: tar -xf qemu-5.2.0.tar.xz 进入解压后的 QEMU 目录,执行以下命令: cd qemu-5.2.0 ---- 下载到本地后,目录为 qemu.../configure --target-list=riscv64-softmmu && make 编译 QEMU,需要依赖其他 packages,如果电脑上缺少,则会报错。...xv6 的 Makefile 中指定了 QEMU 命令的名称 QEMU = qemu-system-riscv64,会自动在 PATH 环境变量中寻找命令,因此将编译好的二进制文件 qemu-system-riscv64
交叉编译工具链 参考链接 https://pdos.csail.mit.edu/6.828/2019/tools.html 我是在mac(M1)下开发的,homebrew在安装riscv-tools的时候会提示需要安装一些依赖...在我配置的时候遇到了flock这个依赖搞不定的问题,发现直接brew install flock安装的flock是其他东西,因此需要卸载flock并且使用brew tap的命令,安装好依赖再去按riscv-tools...hart是riscv中硬件线程的最小单位,在riscv的spec中是这样描述的 A RISC-V compatible core might support multiple RISC-V-compatible...实质上是只开启了一个hart xv6-riscv/kernel/entry.S # qemu -kernel loads the kernel at 0x80000000 # and causes...RISC-V#ISA_base_and_extensions 之后直接通过make命令编译出elf之后通过qemu启动就好 参考 https://github.com/cccriscv/mini-riscv-os
你也许不知道QEMU 但你有可能知道UTM这个iOS端的虚拟机 UTM就是以QEMU为后端的一个虚拟机 简单说 就是iOS上带GUI界面的QEMU 但是由于苹果限制 UTM并不能发挥很好的性能 所以如果你很想高速在你的设备上跑虚拟机..._0qg#qemu]点击进入[/button] 3.NewTerm2和Filza(可以在Cydia内安装) 4.手 第一步 解压下载好的压缩包 用Filza将解压后的文件移动到/usr/local目录下...: 1.运行启动命令后按ctrl+c 结束运行 2.如果你退出了NewTerm2 QEMU也许仍然在运行 彻底杀死QEMU进程方法(请先su) ps -ef | grep qemu 找到QEMU进程 记住他的...PID 然后输入 kill -KILL pid号码 即可 用这种方式也可以将QEMU挂在后台运行 3.不会使用QEMU启动命令 可以用我10分钟写的工具 先下载ish app store就可以找到 然后执行.../qemu-tools-i386 即可 如果刚才的方式失败了 可以编译安装此工具 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc
为了提高指令密度,更节省存储空间,RISC-V还有上述的C扩展(压缩指令),例如RV32GC表示使用压缩指令的RV32G指令集,RV64GC表示使用压缩指令的RV64G指令集。...除了非特权指令,RISC-V的规范还包括特权指令。Privileged Spec里面Machine ISA和Supervisor ISA已经release了1.11版本。...于是原本在x86上完整的KVM被拆成了high-visor和low-visor(需要EL2特权能力的部分)两部分。...同时,ARM的虚拟化扩展在32位和64位架构下是完全一样的,早期的虚拟化工作,不论是xen还是KVM的工作都是在32位的ARMv7a架构的Cortex-A15和Cortex-A7上完成的。...既然SBI是个规范,那就有各种实现,OpenSBI就是其中一个实现,这个实现支持generic(用于支持qemu的RISC-V virt machine),sifive和k210等芯片。
实验环境主要包括三个部分: RISC-V工具链: 包括一系列交叉编译的工具,用于把源码编译成机器码,如gcc,binutils,glibc等 QEMU模拟器: 用于在我们机器上(X86)模拟RISC-V...架构的CPU xv6源码: xv6操作系统源码 一、RISC-V toolchain risc-v工具链安装是坑最多的一步,如果按照官网教程来安装,大概率会因为下载过慢而失败,即使我把命令行翻了墙效果也并不好...#编译 安装完成后需配置环境变量,与上一步设置的安装路径一致。...我这里的环境配置文件是~/.bash_profile,在最后一行添加: export PATH="$PATH:/usr/local/opt/riscv-gnu-toolchain/bin" 此时在命令行输入...brew install qemu 我的OS X版本(high sierra)对应的qemu版本是3.1.0,在启动riscv-gdb远程调试qemu时会报错:Remote
安装工具链 首先需要安装交叉编译工具链,可以用apt安装riscv64的gcc编译工具链。...uboot v2023.10,然后解压并编译: make qemu-riscv64_smode_defconfig CC="riscv64-linux-musl-gcc" make -j $(nproc...=riscv64-linux-musl-ranlib NM=riscv64-linux-musl-nm LD=riscv64-linux-musl-ld 然后当前目录下的”u-boot.bin”就是我们要的结果了...测试运行: qemu-system-riscv64 -nographic -machine virt -kernel u-boot.bin 编译grub grub有两种方式去编译,一种是克隆仓库编译2.12...版本,另一种是直接下载2.06的压缩包。
从上层到底层,从知其然到知其所以然,这必将是一个循序渐进的过程,本文梳理了一下riscv上的环境搭建方法(ubuntu18.04),让系统在qemu上正常的运行起来。...2.riscv64 qemu的编译 要想系统正常的运行起来,必须编译qemu,我建议用最新版本的qemu,可以在官网上下载最新的源代码进行编译。...4.编译uboot 为了编译riscv64上的qemu,可以从官网上下载最新的uboot代码进行测试。这里最好是用最新的uboot代码。...make -j8 最后生成的固件在arch/riscv/boot/ ?...其中的 Image 是上一章节编译完成后拷贝过来的,直接运行该目录下的start-qemu.sh脚本就可以看到系统正常的运行起来。 ? 输入root可以正常的进入Linux系统。
这个时候我们想,如果qemu虚拟机能够把它模拟的设备的状态输出出来,让我们获得更多的信息,那就太好了。 在本文中,我将讲解调试QEMU自身的思路。...网上的教程很多,这里我就讲一下大概的思路: 下载QEMU指定版本的代码的压缩包,然后把解压后的目录初始化为git仓库,并commit一次。...以便记录我们后面为了调试而加的代码 编译QEMU的时候需要注意: 在build目录下进行编译,并且安装到install目录下。不能直接make install,因为这样会覆盖系统原本的qemu。...接着我们可以改qemu的代码使用qemu_printf()函数去不断的打印日志,同时在纸上画调用链。找到整个调用链。...整体流程如下: gdb通过该脚本启动 GDB加载qemu-system-xxxx作为要调试的文件 GDB设置断点 在调试脚本中,运行qemu的命令,启动虚拟机。
我的实现环境: qemu for riscv gdb for riscv gcc for riscv binutils for riscv Windows 10 + VMWare + Ubuntu 20.04...在第一次进行搭建环境时,使用的是18.0的版本,这个版本在安装环境的时候,需要自行安装、编译Riscv工具链,但是这个过程很耗时,容易出现错误。...在Ubuntu上启用SSH非常简单。...安装QEMU QEMU用于在我们机器上(X86)模拟RISC-V架构的CPU,编译生成的risc-v平台的机器码,需要通过模拟cpu执行。...运行qemu的窗口执行make qemu-gdb后等待gdb的连接 make qemu-gdb sed "s/:1234/:26000/" .gdbinit
为了保证代码的可维护性,所有修改符合rt-thread bsp制作规范。目标就是riscv32 qemu 上运行rt-thread。...编译和运行环境在Ubuntu20.04平台上。...2.3 获取rt-thread的代码 以RT-Thread v4.0.3 released为基线,进行riscv32 qemu开发工作的代码已经推到gitee上。...3.移植整体思路规划 第一阶段的任务是将riscv32最小系统在qemu-system-riscv32上bring up起来,第二阶段会考虑将其适配到具体的硬件平台上。...5.代码正常的跳转 如果要代码正常的运行起来,主要需要注意的是目前qemu上运行riscv32的代码是在S-Mode,所以修改部分代码。 首先可以在BSP的Kconfig中添加一个宏定义 ?
riscv64架构上运行rt-thread 1.本文目的 2.环境搭建 2.1 qemu编译riscv版本 2.2 交叉编译工具链下载 2.3 编译opensbi 2.4 编译rt-thread 3.程序运行...4.总结 1.本文目的 本文主要描述如何在riscv64 的qemu上运行rt-thread。...and the QEMU Project developers 2.2 交叉编译工具链下载 由于需要编译opensbi与rt-thread,所以需要下载对应的交叉编译工具链: 可以在如下的网站进行下载...2.3 编译opensbi 接下来从github上获取最新的opensbi工程文件。...4.总结 在riscv64的qemu上运行rt-thread是一种全新的尝试,有助于对riscv的深入理解和掌握。其中需要借助opensbi的接口进行设计,这种思想很特别。
目前在工作上做一些riscv项目,发现自己的积累的知识不够了,还是需要深入到底层去理解,于是需要疯狂的恶补相关的知识,看文档、读代码、每天就这样深入其中,看的多了,想法也很多,很容易就忘记了,有时也做做笔记...本文在Ubuntu18.04环境下进行测试,在riscv64的qemu上进行gdb的单步调试,主要分析的阶段是qemu启动后,执行到opensbi,直到启动uboot的阶段。...首先执行的opensbi/lib/sbi/sbi_init.c的sbi_init函数 4.2 opensbi设备初始化 在进入sbi_init会首先判断是通过S模式还是M模式启动,这里先知道在qemu的设备树中是以...5.小结 对于riscv的opensbi的大致的执行流程就分析到这里,基本上概括了一个整体的执行的流程,具体的细节可以通过阅读代码,加上代码注释进行理解。...opensbi是一个很好的开源项目,对于研究riscv的底层实现,以及代码的通用性上都很值得借鉴和学习。
一些github上的好用学习型的项目也会对qemu进行支持,用RUST语言在arm上的编程,即使手上没有很好的硬件的条件,也能够去学习RUST语言在嵌入式编程上的使用。...上图是在qemu的rt-thread/bsp/raspberry-pi/raspi3-64中编译的固件在qemu上的运行效果,基本上完成对aarch64体系架构中的栈帧、中断、mmu的支持,以及外设部分...除此之外,我也在qemu的支持上做了一些扩展开发,比如在riscv的生态支持上对gd32的rv-star在中科院软件研究所的基础上做了一些研究,同时对nuclei的各种处理器系列做了适配。...因为nmsis是基于arm的cmsis在riscv上的一份移植,其中实现了许多的加速运算的demo,比如矩阵运算,卷积,图像处理等等,这些指令同样也可以在nuclei qemu中计算出正确的结果。...我写过一个qemu上的e1000网卡设备的驱动,针对于qemu riscv64的virt版本。
{ loop {} } /// 在屏幕上输出一个字符,目前我们先不用了解其实现原理 pub fn console_putchar(ch: u8) { let _ret: usize;...{ // 在屏幕上输出 "OK\n" ,随后进入死循环 console_putchar(b'O'); console_putchar(b'K'); console_putchar...根据编译器的提示,在头部添加: #!...: @cargo clean # 运行 QEMU qemu: build @qemu-system-riscv64 \ -machine virt \...执行 kill, 退出 qemu 接口封装和代码整理 可以考虑去看看 openSBI的文档:https://github.com/riscv/riscv-sbi-doc/blob/master/riscv-sbi.adoc
问: 我已经成功地使用以下sed命令在Linux中搜索/替换文本: sed -i 's/old_string/new_string/g' /path/to/file 然而,当我在Mac OS X上尝试时...答: 在 Linux 系统上使用命令 man sed 查看手册, NAME sed - stream editor for filtering and transforming...在 MacOS 系统上使用命令 man sed 查看手册, NAME sed – stream editor 简介是流编辑器。...可见 -i 后面是必选参数 extension,不写上扩展名参数就会报错,于是命令执行失败。...如果要同一个命令在两种系统上都成功执行,可写成: sed -i'' -e 's/old_string/new_string/g' /path/to/file #或者 sed -i'.bak' -e 's
领取专属 10元无门槛券
手把手带您无忧上云