Skip to content

Commit

Permalink
fix(lab6): typo
Browse files Browse the repository at this point in the history
  • Loading branch information
TonyCrane committed Dec 10, 2024
1 parent c6922b7 commit 2e7a8a0
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
31 changes: 18 additions & 13 deletions docs/lab6.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,18 +87,18 @@ VirtIO 是一个开放标准,它定义了一种协议,用于不同类型的
src/lab6
├── disk.img.zip // FAT32 磁盘镜像,需解压
├── fs
   ├── Makefile
   ├── fat32.c // FAT32 文件系统实现
   ├── fs.c // 供系统内核使用的文件系统相关函数实现
   ├── mbr.c // MBR 初始化(无需修改)
   ├── vfs.c // VFS 实现
   └── virtio.c // VirtIO 驱动(无需修改)
├── Makefile
├── fat32.c // FAT32 文件系统实现
├── fs.c // 供系统内核使用的文件系统相关函数实现
├── mbr.c // MBR 初始化(无需修改)
├── vfs.c // VFS 实现
└── virtio.c // VirtIO 驱动(无需修改)
├── include
   ├── fat32.h // FAT32 相关数据结构与函数声明
   ├── fs.h // 供系统内核使用的文件系统相关数据结构及函数声明
   ├── mbr.h // MBR 相关数据结构与函数声明(无需关注)
   ├── vfs.h // VFS 操作函数声明
   └── virtio.h // VirtIO 驱动相关数据结构与函数声明(无需关注)
├── fat32.h // FAT32 相关数据结构与函数声明
├── fs.h // 供系统内核使用的文件系统相关数据结构及函数声明
├── mbr.h // MBR 相关数据结构与函数声明(无需关注)
├── vfs.h // VFS 操作函数声明
└── virtio.h // VirtIO 驱动相关数据结构与函数声明(无需关注)
└── user // 用户态程序部分不需同学们修改,所以这里给出完整的代码
├── Makefile // 未作修改
├── link.lds // 未作修改
Expand All @@ -116,6 +116,11 @@ VirtIO 是一个开放标准,它定义了一种协议,用于不同类型的
└── unistd.h
```
* 同时需要修改 proc.h/c,在初始化时只创建一个用户态进程
* 因为加了一个根目录下的 fs 文件夹,所以需要在 `arch/riscv/Makefile` 里面添加相关编译产物来进行链接:
```Makefile title="arch/riscv/Makefile" linenums="3"
${LD} -T kernel/vmlinux.lds kernel/*.o ../../init/*.o ../../lib/*.o ../../fs/*.o ../../user/uapp.o -o ../../vmlinux
```
### Shell: 与内核进行交互
Expand Down Expand Up @@ -250,7 +255,7 @@ int64_t stdout_write(struct file *file, const void *buf, uint64_t len) {
return printk(buf);
}
int64_t stdout_write(struct file *file, const void *buf, uint64_t len) {
int64_t stderr_write(struct file *file, const void *buf, uint64_t len) {
// todo
}
```
Expand All @@ -274,7 +279,7 @@ SHELL >
struct sbiret sbi_debug_console_read(uint64_t num_bytes, uint64_t base_addr_lo, uint64_t base_addr_hi);
```
并在 sbi.c 中进行实现(eid 和 `console_write_byte` 一样为 `0x4442434e`,fid 为 2)。其中参数 `num_bytes` 为读取的字节数,`base_addr_lo` 和 `base_addr_hi` 为写入的目的地址(`base_addr_hi` 在 64 位架构中不会用到)。
并在 sbi.c 中进行实现(eid 和 `console_write_byte` 一样为 `0x4442434e`,fid 为 1)。其中参数 `num_bytes` 为读取的字节数,`base_addr_lo` 和 `base_addr_hi` 为写入的目的地址(`base_addr_hi` 在 64 位架构中不会用到)。
接下来在 vfs.c 中我们为大家定义了函数 `uart_getchar()`,因为 `sbi_debug_console_read` 是非阻塞的,所以我们需要一个函数来不断进行读取,直到读到了有效字符,然后在 `stdin_read` 中只需要这样读取 `len` 个字符就好了。
Expand Down
2 changes: 1 addition & 1 deletion src/lab6/fs/vfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ int64_t stdout_write(struct file *file, const void *buf, uint64_t len) {
return printk(buf);
}

int64_t stdout_write(struct file *file, const void *buf, uint64_t len) {
int64_t stderr_write(struct file *file, const void *buf, uint64_t len) {
// todo
}

0 comments on commit 2e7a8a0

Please sign in to comment.