0%

NJU ICS2023 PA开发日记

2024/08/22

从今天开始,正式准备启动这个“项目”啦!(其实已经看过一段时间前面的基础介绍了

希望能够坚持做完!!!(ง •_•)ง

这里主要记录一下做PA过程中遇到的问题和思考(以及内心戏

不过后面一个月要去外地培训了。。。还不知道弄

1. PA1

1.3 RTFSC

getopt_long()函数的作用?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SYNOPSIS
#include <unistd.h>

int getopt(int argc, char * const argv[],
const char *optstring);

extern char *optarg;
extern int optind, opterr, optopt;

#include <getopt.h>

int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);

int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);

DESCRIPTION
The getopt() function parses the command-line arguments. Its arguments argc and argv are the argument count and array as passed to the main() function on program invocation. An element of argv that starts
with '-' (and is not exactly "-" or "--") is an option element. The characters of this element (aside from the initial '-') are option characters. If getopt() is called repeatedly, it returns successively
each of the option characters from each of the option elements.

The variable optind is the index of the next element to be processed in argv. The system initializes this value to 1. The caller can reset it to 1 to restart scanning of the same argv, or when scanning a new
argument vector.

If getopt() finds another option character, it returns that character, updating the external variable optind and a static variable nextchar so that the next call to getopt() can resume the scan with the follow‐
ing option character or argv-element.

If there are no more option characters, getopt() returns -1. Then optind is the index in argv of the first argv-element that is not an option.

got,用来解析命令行参数的。

1.3.1 准备第一个客户程序

2024/08/23

NEMU是一个用来执行客户程序的程序(模拟计算机),但是NEMU一开始并没有客户程序(OS或其他客户程序),需要有程序将客户程序读入计算机中,NEMU项目src中的monitor就是用来干这个事的(也包含调试的功能sdb)。

monitor中调用init_isa()来进行ISA的一些初始化:

  1. 将一个内置客户程序读入内存中
  2. 初始化虚拟计算机系统(初始化寄存器,restart()函数)

读入客户程序到内存中,读到什么位置?NEMU采用最简单的方式——约定一个位置,可由我们配置,定义在nemu/include/memory/paddr.h中,定义为RESET_VECTOR。

NEMU默认提供128MB的内存,模拟内存定义在src/memory/paddr.c中,定义为pmem

RISC-V的默认物理内存地址是从0x80000000开始编址的

可能这个RESET_VECTOR就相当于真实计算机启动的第一个地址?存放BIOS的位置?

Welcome to riscv32-NEMU!

成功运行!!!

2024.10.26记

果然。。。中途荒废了一个月再捡起来就需要勇气了hhh,

荒废了两个月后,我终于又准备回来了!