在 K210
开发板上运行 xv6-riscv
操作系统
English | 中文
(`-') (`-') <-.(`-')
(OO )_.-> _(OO ) __( OO)
(_| \_)--.,--.(_/,-.\ ,--. (`-') '-'. ,--. .----. .--. .----.
\ `.' / \ \ / (_/ / .' ( OO).-> | .' / \_,-. | /_ | / .. \
\ .') \ / / . / -. (,------. | /) .' .' | | | / \ .
.' \ _ \ /_)' .-. \ `------' | . ' .' /_ | | ' \ / '
/ .'. \ \-'\ / \ `-' / | |\ \ | | | | \ `' /
`--' '--' `-' `----' `--' '--' `------' `--' `---''
k210
开发板或者qemu-system-riscv64
- RISC-V GCC 编译链: riscv-gnu-toolchain
git clone https://github.com/HUST-OS/xv6-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
已经下载到您的机器上并且加到了环境变量中;
其次,需要一个 FAT32 磁盘镜像文件;
make fs
这会生成一个镜像文件 fs.img
,编译一些用户程序(如 shell
)并拷贝至镜像中。只要 fs.img
存在并且不需要修改,您不必每次运行前都执行这个命令。
最后,开始运行:
make run platform=qemu
Ps: 按 Ctrl + A
然后 X
退出 qemu
。
Shell 命令其实也是用户程序。这些程序应当放置在 SD 卡或 fs.img
文件镜像的 "/bin" 目录下。
目前已经支持几个常用命令,如 cd
,ls
,cat
等。
此外,shell
支持下列快捷键:
- Ctrl-H -- 退格
- Ctrl-U -- 删除行
- Ctrl-D -- 文件尾(EOF)
- Ctrl-P -- 打印进程列表
- 在
xv6-user/
目录下新建一个 C 文件,如myprog.c
,然后写入您的代码; - 您可以引入
user.h
头文件,以使用其中提供的函数,如open
、gets
和printf
等; - 在
Makefile
中添加一行 “$U/_myprog\
”,具体如下:UPROGS=\ $U/_init\ $U/_sh\ $U/_cat\ ... $U/_myprog\ # 请不要忽略开头的 '_'
- 然后执行:
如果没有出错,您应该可以在
make userprogs
xv6-user/
中看到_myprog
文件。最后,您需要将它拷贝到SD卡(参考此处) 或磁盘镜像(参考此处)中。
- 多核启动
- 裸机 printf
- 内存分配
- 页表
- 时钟中断
- S 态外部中断
- 接收
UARTHS
串口数据 - SD card 驱动
- 进程管理
- 文件系统
- 用户程序
- 稳定的键盘输入(k210)
解决用户态由于未知原因导致 panic 的 bug