xv6-k210/README_cn.md

4.3 KiB
Raw Permalink Blame History

XV6-RISCV On K210

K210 开发板上运行 xv6-riscv 操作系统
English | 中文

 (`-')           (`-')                   <-.(`-')                            
 (OO )_.->      _(OO )                    __( OO)                            
 (_| \_)--.,--.(_/,-.\  ,--.    (`-')    '-'. ,--.  .----.   .--.   .----.   
 \  `.'  / \   \ / (_/ /  .'    ( OO).-> |  .'   / \_,-.  | /_  |  /  ..  \  
  \    .')  \   /   / .  / -.  (,------. |      /)    .' .'  |  | |  /  \  . 
  .'    \  _ \     /_)'  .-. \  `------' |  .   '   .'  /_   |  | '  \  /  ' 
 /  .'.  \ \-'\   /   \  `-' /           |  |\   \ |      |  |  |  \  `'  /  
`--'   '--'    `-'     `----'            `--' '--' `------'  `--'   `---''   

依赖

下载

git clone https://github.com/HUST-OS/xv6-k210

编译

首先您需要连接 k210 开发板到电脑,然后检查 USB 端口:

ls /dev/ | grep USB

在我的机器上的情况是将会显示 ttyUSB0,这就是 USB 端口。
然后运行以下命令:

cd xv6-k210
make build

在 k210 开发板上运行

Xv6-k210 采用 FAT32 文件系统,而不是其原本的文件系统。您需要一张 FAT32 格式的 SD 卡才能运行。 在编译项目后,您需要将 “/xv6-user” 目录下的 “_init” 和 “_sh” 重命名为 “init” 和 “sh”并拷贝至 SD 卡的根目录下。您还可以拷贝其他编译好的程序(以“_”开头的文件)。 或者,您可以将 SD 卡连至主机(需要读卡器),再直接运行以下命令。

警告:这会格式化您的 SD 卡并清除卡上的原有数据!

make sdcard sd="your SD card device's path"

运行以下命令以在 k210 上运行:

make run

某些情况下您需要修改 USB 端口,端口名称可以通过前面说的步骤得到,然后运行以下命令:

make run k210-serialport=`USB 端口`(默认是 ttyUSB0)

Ps: 在 Linux 上这个端口大部分情况是 ttyUSB0, 如果您使用 Windows 或者 MacOS,这个文档可以帮助到您:maixpy-doc

在 qemu-system-riscv64 模拟器上运行

首先,确保 qemu-system-riscv64 已经下载到您的机器上并且加到了环境变量中;
其次,需要一个 FAT32 磁盘镜像文件;

make fs

这会生成一个镜像文件 fs.img ,编译一些用户程序(如 shell)并拷贝至镜像中。只要 fs.img 存在并且不需要修改,您不必每次运行前都执行这个命令。

最后,开始运行:

make run platform=qemu

Ps: 按 Ctrl + A 然后 X 退出 qemu

关于 Shell

Shell 命令其实也是用户程序。这些程序应当放置在 SD 卡或 fs.img 文件镜像的 "/bin" 目录下。
目前已经支持几个常用命令,如 cdlscat 等。

此外,shell 支持下列快捷键:

  • Ctrl-H -- 退格
  • Ctrl-U -- 删除行
  • Ctrl-D -- 文件尾EOF
  • Ctrl-P -- 打印进程列表

添加用户程序

  1. xv6-user/ 目录下新建一个 C 文件,如 myprog.c,然后写入您的代码;
  2. 您可以引入 user.h 头文件,以使用其中提供的函数,如 opengetsprintf等;
  3. Makefile 中添加一行 “$U/_myprog\”,具体如下:
    UPROGS=\
        $U/_init\
        $U/_sh\
        $U/_cat\
        ...
        $U/_myprog\      # 请不要忽略开头的 '_'
    
  4. 然后执行:
    make userprogs
    
    如果没有出错,您应该可以在 xv6-user/ 中看到 _myprog 文件。最后您需要将它拷贝到SD卡(参考此处) 或磁盘镜像(参考此处)中。

进度

  • 多核启动
  • 裸机 printf
  • 内存分配
  • 页表
  • 时钟中断
  • S 态外部中断
  • 接收 UARTHS 串口数据
  • SD card 驱动
  • 进程管理
  • 文件系统
  • 用户程序
  • 稳定的键盘输入k210

TODO

解决用户态导致 RUSTSBI 报 panic 的 bug