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 开发板上运行

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

ls /dev/ | grep USB

在我的机器上的情况是将会显示 ttyUSB0,这就是 USB 端口。
然后运行以下命令,以编译内核和用户程序:

cd xv6-k210
make build

Xv6-k210 采用 FAT32 文件系统,而不是其原本的文件系统。您需要一张 FAT32 格式的 SD 卡才能运行。并且 SD 卡上不能有分区表。
为了能启动 shell 和其他用户程序,您需要将它们拷贝至 SD 卡中。 首先,需要将 SD 卡连至主机(需要读卡器)并进行挂载。

ls /dev/ # 确认您的 SD 卡设备名
mount <SD 卡设备名> <挂载点>
make sdcard dst="挂载点"
umount <挂载点>

然后,将 SD 卡接入 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

解决用户态由于未知原因导致 panic 的 bug