update doc

This commit is contained in:
hustccc 2021-01-16 00:34:38 +09:00
parent 324de00c9e
commit ee2ee8469e
5 changed files with 130 additions and 14 deletions

View File

@ -200,7 +200,7 @@ UEXTRA = $U/xargstest.sh
userprogs: $(UEXTRA) $(UPROGS)
# Make fs image
fs.img: mkfs/mkfs README $(UEXTRA) $(UPROGS)
fs: mkfs/mkfs README $(UEXTRA) $(UPROGS)
@mkfs/mkfs fs.img README $(UEXTRA) $(UPROGS)
-include kernel/*.d user/*.d
@ -208,7 +208,7 @@ fs.img: mkfs/mkfs README $(UEXTRA) $(UPROGS)
SDCARD ?= /dev/sdb
# Write sdcard
sdcard: fs.img
sdcard: fs
@echo "flashing into sd card..."
@sudo dd if=/dev/zero of=$(SDCARD) bs=1M count=50
@sudo dd if=fs.img of=$(SDCARD)

View File

@ -1,5 +1,6 @@
# XV6-RISCV On K210
Run xv6-riscv on k210 board
[English](./README.md) [中文](./README_cn.md)
```
(`-') (`-') <-.(`-')
@ -55,7 +56,24 @@ Then run the command:
make run platform=qemu
```
Ps: Press Ctrl + A then X to quit qemu.
Besides, file system and uesr programs are available on qemu. More details [here](./doc/fs.md).
Besides, file system and uesr programs are available on qemu. More details [here](./doc/fs.md).
## Quick Start to run `Shell` on `qemu`
```bash
$ dd if=/dev/zero of=fs.img bs=512k count=2048
$ mkfs.vfat -F 32 fs.img
$ make fs
$ (sudo)mount fs.img /mnt
$ (sudo)cp xv6-user/_init /mnt/init
$ (sudo)cp xv6-user/_sh /mnt
$ (sudo)cp xv6-user/_cat /mnt
$ (sudo)cp xv6-user/init.c /mnt
$ (sudo)umount /mnt
$ make run platform=qemu
```
After entering `qemu`, type `_cat init.c`, and it will read the contents of `init.c` in `fs.img`, output to the terminal.
The `init.c` can be any text file.
## Progress
- [x] Multicore boot
@ -67,8 +85,11 @@ Besides, file system and uesr programs are available on qemu. More details [here
- [x] Receive uarths message
- [x] SD card driver
- [x] Process management
- [ ] File system
- [ ] User program
- [x] File system(qemu)
- [ ] File system(k210)
- [x] User program(qemu)
- [ ] User program(k210)
## TODO
The rest part of xv6-kernel and xv6-fs
File system on k210 platform.

95
README_cn.md Normal file
View File

@ -0,0 +1,95 @@
# XV6-RISCV On K210
[English](./README.md) [中文](./README_cn.md)
`K210` 开发板上运行 `xv6-riscv` 操作系统
```
(`-') (`-') <-.(`-')
(OO )_.-> _(OO ) __( OO)
(_| \_)--.,--.(_/,-.\ ,--. (`-') '-'. ,--. .----. .--. .----.
\ `.' / \ \ / (_/ / .' ( OO).-> | .' / \_,-. | /_ | / .. \
\ .') \ / / . / -. (,------. | /) .' .' | | | / \ .
.' \ _ \ /_)' .-. \ `------' | . ' .' /_ | | ' \ / '
/ .'. \ \-'\ / \ `-' / | |\ \ | | | | \ `' /
`--' '--' `-' `----' `--' '--' `------' `--' `---''
```
<!-- ![run-k210](./img/xv6-k210_on_k210.gif) -->
## 依赖
+ `k210` 开发板或者 `qemu-system-riscv64`
+ RISC-V GCC 编译链: [riscv-gnu-toolchain](https://github.com/riscv/riscv-gnu-toolchain.git)
## 下载
```bash
git clone https://github.com/SKTT1Ryze/xv6-k210
```
## 编译
首先您需要连接 `k210` 开发板到电脑,然后检查 USB 端口:
```bash
ls /dev/ | grep USB
```
在我的机器上的情况是将会显示 `ttyUSB0`,这就是 USB 端口。
然后运行以下命令:
```bash
cd xv6-k210
make build
```
## 在 k210 开发板上运行
运行以下命令:
```bash
make run
```
某些情况下您需要修改 `USB 端口`,端口名称可以通过前面说的步骤得到,然后运行以下命令:
```bash
make run k210-serialport=`USB 端口`(默认是 ttyUSB0)
```
Ps: 在 `Linux` 上这个端口大部分情况是 `ttyUSB0`, 如果您使用 `Windows` 或者 `MacOS`,这个文档可以帮助到您:[maixpy-doc](https://maixpy.sipeed.com/zh/get_started/env_install_driver.html#)
## 在 qemu-system-riscv64 模拟器上运行
首先确保 `qemu-system-riscv64` 已经下载到您的机器上并且加到了环境变量中。
然后运行以下命令:
```bash
make run platform=qemu
```
Ps: 按 `Ctrl + A` 然后 `X` 退出 `qemu`
目前 `qemu` 平台已经初步支持文件系统并且能运行文件系统上的用户态程序,具体请移步[这里](./doc/fs.md)。
## 快速在 `qemu` 平台上运行 `shell`
```bash
$ dd if=/dev/zero of=fs.img bs=512k count=2048
$ mkfs.vfat -F 32 fs.img
$ make fs
$ (sudo)mount fs.img /mnt
$ (sudo)cp xv6-user/_init /mnt/init
$ (sudo)cp xv6-user/_sh /mnt
$ (sudo)cp xv6-user/_cat /mnt
$ (sudo)cp xv6-user/init.c /mnt
$ (sudo)umount /mnt
$ make run platform=qemu
```
进入 `qemu` 后输入命令 `_cat init.c`,将会读取 `fs.img` 中的 `init.c` 文件内容并输出到终端。
这里的 `init.c` 文件可以是任意文本文件。
## 进度
- [x] 多核启动
- [x] 裸机 printf
- [x] 内存分配
- [x] 页表
- [x] 时钟中断
- [x] S 态外部中断
- [x] 接收 `UARTHS` 串口数据
- [x] SD card 驱动
- [x] 进程管理
- [x] 文件系统qemu
- [ ] 文件系统k210
- [x] 用户程序qemu
- [ ] 用户程序k210
## TODO
完善 k210 平台上的文件系统和用户态程序。

View File

@ -38,10 +38,11 @@ $ mkfs.vfat -F 32 fs.img
注意必须将xv6-user目录下的"\_init"拷贝至镜像中,并且重命名为"init"这是xv6原本的设定目前我们暂未更改还需拷贝"\_sh"至镜像中才能启动shell。编写的用户程序也需要放在xv6-user目录下同时需要添加至Makefile的`UPROGS`目标中,才能连同内核一起编译链接。
```bash
$ mount fs.img /mnt
$ cp xv6-user/_init /mnt/init
$ cp xv6-user/_sh /mnt
$ cp xv6-user/... /mnt
$ make fs
$ (sudo)mount fs.img /mnt
$ (sudo)cp xv6-user/_init /mnt/init
$ (sudo)cp xv6-user/_sh /mnt
$ (sudo)cp xv6-user/... /mnt
$ ...
$ umount /mnt
$ (sudo)umount /mnt
```

View File

@ -31,9 +31,8 @@ void timer_tick() {
set_next_timeout();
tick++;
if((tick % 10) == 0) {
printf("[Timer]tick: %d from hart %d\n", tick, r_tp());
// printf("[Timer]tick: %d from hart %d\n", tick, r_tp());
#ifndef QEMU
printf("[Timer]tick: %d from hart %d\n", tick, r_tp());
uint32 c = *(uint32*)(UARTHS + UARTHS_REG_RXFIFO);
if(c <= 255) {
printf("[UARTHS]receive: %p, ", c);
@ -42,4 +41,4 @@ void timer_tick() {
}
#endif
}
}
}