nemu、am项目构建 nemu首先研究 nemu 的构建方式。 直接看 nemu 的 Makefile(~/ysyx-workbench/nemu/Makefile): 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 2024-08-23 OS > RISCV > PA #NEMU #PA2 #AM
程序, 运行时环境与AM 运行时环境一个事实是, 应用程序的运行都需要运行时环境的支持, 包括加载, 销毁程序, 以及提供程序运行时的各种动态链接库(你经常使用的库函数就是运行时环境提供的)等. 为了让客户程序在NEMU中运行, 现在轮到你来提供相应的运行时环境的支持了。 程序的运行时环境(Runtime Environment)是指在程序执行时提供的软件和硬件环境,它支持程序的运行并提供必要的服务和资源。运行时环境通 2024-08-22 OS > RISCV > PA #模拟器 #NEMU #PA2
NEMU 添加更多的指令 前言上一篇博客中介绍了如何添加指令,这篇将会熟悉这个过程,学习以及添加更多的指令。 所有程序在am-kernels/tests/cpu-tests/tests 目录下有很多测试: 12345678910111213141516171819202122232425262728293031323334353637ls -ltotal 140-rw-rw-r-- 1 l 2024-08-21 OS > RISCV > PA #模拟器 #NEMU #PA2
NEMU 添加指令 前言前面讨论了 nemu 执行一条指令的过程,在源码中,可以看到它目前可以解析的指令有限: 1234567891011121314151617181920212223242526272829static int decode_exec(Decode* s) { int rd = 0; word_t src1 = 0, src2 = 0, imm = 0; s-> 2024-08-14 OS > RISCV > PA #模拟器 #NEMU #PA2
NEMU 指令执行过程 NEMU 架构NEMU 是一个CPU模拟器,它使用 C语言 完成了模拟取指令、指令解析、指令执行、寄存器、初始化等,可以执行很多平台的任何二进制指令。 初始化nemu main 中进行了一些初始化,这里只研究关键的初始化: 12345678910111213init_mem();/* Initialize devices. */IFDEF(CONFIG_DEVICE, init_device( 2024-08-13 OS > RISCV #模拟器 #NEMU
NEMU 代码导读 项目构建首先得了解一些 make 的行为,重要的就是查看make 的行为以及make 的子进程如何与系统进行交互,比如 : strace -f make make -nB # 只打印命令不执行 B强制构建 make -d make -debug=v 具体RTFM。 nemu/Makefile SRCS: 和YEMU差不多, 是需要编译的源文件 CFLAGS: 2024-08-12 OS > RISCV #模拟器 #NEMU
程序的执行和模拟器 freestanding 运行时环境示例程序: 1234567#include <stdint.h>void _start() { volatile uint8_t* p = (uint8_t*)(uintptr_t)0x10000000; *p = 'A'; while (1) ;} 编译:rv32gcc 2024-08-09 OS > RISCV #模拟器 #二进制程序 #程序
从C语言到二进制程序 预处理123456789101112#include <stdio.h>#define MSG \ "Hello \World!\n"int main() { printf(MSG /* "hi!\n" */);#ifdef __riscv printf("Hello RISC-V!\n");# 2024-08-08 C 语言 > OS > RISCV #C 语言 #二进制程序
Linux101:最好的Linux 入门资料 前言本文是对 Linux101 这本及其优秀的 Linux 入门的一些心得体会,链接:Linux101 软件安装和文件操作apt建议用 apt 安装,apt 作为前端,它会自动处理软件包之间的依赖关系、升级软件包以至升级发行版,自动处理升级发行版所需的依赖关系等等。但是需要明白,真正执行安装软件的是 dpkg。 另外,dpkg -i 也可以安装软件,但是它不会处理依赖,如果安装报错,应该使用 2024-08-07 Linux 基础 #Linux 入门 #Linux
PA1 感悟与过程 一、单步执行单步执行就是传入 1,让它执行一个指令就好。 12345678static int cmd_si(char* args) { if (args == NULL) cpu_exec(1); else cpu_exec((uint64_t)(atoi(args))); return 0;} 其中源码这里接受的是一个 ui 2024-08-05 ysyx > PA1 #ysyx #PA1 #sbd