95 Star 262 Fork 91

泰晓科技 / RISCV-Linux

 / 详情

【学生提案】移植 xv6 到 Milk-V Duo 开发板上

进行中
成员
创建于  
2023-10-06 16:08

移植 xv6 到 Milk-V Duo 开发板上

项目描述:本项目旨在将xv6操作系统移植到 Milk-V Duo 开发板上,以实现在该硬件平台上的运行。xv6 是一个经典的教学性质操作系统,具有简单而可扩展的设计,适合用于教育和研究目的。Milk-V Duo 是一款嵌入式开发板,搭载了特定的处理器和外围设备,移植 xv6 到该平台将为学术研究和嵌入式系统开发提供一个有趣的机会。

主要活动形式:

  • 分析 XV6 的设计,并输出文档或分享

  • 将 xv6 从 virt machine 上移植到 Milk-V Duo 开发板上,目前已经调研过要进行的步骤有

    • 根据官方sdk编译uboot
    • 修改为 xv6 源代码,使其更符合 Milk-V Duo 开发板的芯片及硬件特性
    • 进行移植尝试

主要产出形式:

  • 输出 xv6 的相关文章

    • 操作系统理论知识介绍

    • xv6 模块设计及组织(如中断异常处理、内存分配、进程调度)

    • 将xv6移植到开发板上的经验

  • 在 Milk-V Duo 开发板上部署xv6的成熟方案

  • 如果进展顺利,可以进行线上技术交流,分享具体 xv6 的设计分析及移植经验

主要内容:

  • 前置知识

    • 操作系统相关理论知识

    • xv6 内核设计及其实践

    • 了解 Milk-V Duo 开发板特性

    • RISC-V 相关知识(RISC-V 汇编语言、特权模式和 CSR)

    • C 语言、汇编语言等

额外挑战(若行有余力):

  • 移植自研操作系统到 Milk-V Duo 开发板上

参考资料:
设备树解析
xv6 for riscv 源码
Xv6, a simple Unix-like teaching operating system
The RISC-V Instruction Set Manua
Duo 中文论坛

评论 (7)

cola2003 创建了任务
cola2003 修改了标题
cola2003 修改了描述
cola2003 修改了描述
cola2003 修改了描述
cola2003 修改了描述
cola2003 修改了描述
cola2003 修改了描述
cola2003 任务状态待办的 修改为进行中
展开全部操作日志

新建了仓库,并进行了测试提交。
接下来几天我会按照计划先制作 milk-v duo 开发板的设备树文件,中间会记录下过程。

cola2003 修改了描述
falcon 负责人设置为cola2003

方案讨论:

1.没理解为什么要动uboot的设备树,官方的sdk不是可以生成Uboot吗?
至于xv6内核,没有用设备树这种方式,都写到代码里的。

2.xv6 在板子上跑起来,需要关注

外设:串口 和 磁盘,这个在 xv6 里面是 qemu 里面虚拟的这两个外设,得结合 duo 的外设寄存器进行移植。
内存:xv6-riscv 将内核放在 qemu 的物理地址 4G 偏移处的内存处,且仅使用的是 128M 大小。实际板子上得改一下,物理内存应该没有4G, 至于具体偏多少,看看芯片手册外设寄存器的地址范围,在这之外即可。
中断:中断控制器得结合芯片手册了,还有周期的时钟中断,这个也是用的 qemu 的,得改成实际芯片的。

1.确实不用动uboot的设备树,这个问题的出现一部分原因是我之前只在qemu平台上做过一些项目,还有一部分是前期调研的不足,我调研到的一个案例是拿设备树文件从头全部自己搞的,所以误导了我,我昨天就改意识到了这个问题,只是还没来得及改issue,很抱歉
2.我会在做的过程中注意这些问题的

今天踩了一些坑,完成了uboot的编译,明天会开始进行xv6代码的分析并形成文档

cola2003 修改了描述
cola2003 修改了标题
cola2003 修改了描述

今天因为在等其他部分工作,稍微有时间调研了一下,可以在 milkv duo 板子上使用 uboot 命令行,已经测试了,运行得很好,照我的理解,uboot 已经初始化好了 uart,那么我们只需要往地址上写字符即可实现串口通信,不过这个因为我最近重装回了 windows,失去了 linux 环境没能验证(我有点抗拒虚拟机);

输入图片说明

还有就是对于文件系统,暂且决定使用 fat32 文件系统,但是文件系统的接口编写会有一些工作量,我在调研中发现了 fatfs,文件系统的话,应该使用的是什么平台无关吧?我在想 fatfs 是否可以在 riscv 上使用,如果可以的话应该可以节省许多时间

任何建议或批评我都感激不尽。

目前已经实现了通过 uboot 进入我们的小程序,串口输出的问题也有方法了,跟之前想的一样,uboot 已经初始化好了串口,只需要往寄存器中写东西就好了
输入图片说明

开发板的设备树地址和设备树大小,开发板的内存分配情况

cv180x_c906# bdinfo
boot_params = 0x0000000000000000
DRAM bank   = 0x0000000000000000
-> start    = 0x0000000080000000
-> size     = 0x0000000003f40000
flashstart  = 0x0000000000000000
flashsize   = 0x0000000000000000
flashoffset = 0x0000000000000000
baudrate    = 115200 bps
relocaddr   = 0x0000000082433000
reloc off   = 0x0000000002233000
Build       = 64-bit
current eth = ethernet@4070000
ethaddr     = (not set)
IP addr     = 192.168.0.3
fdt_blob    = 0x0000000081bece10
new_fdt     = 0x0000000081bece10
fdt_size    = 0x0000000000006020
lmb_dump_all:
 memory.cnt  = 0x1
 memory[0]      [0x80000000-0x83f3ffff], 0x03f40000 bytes flags: 0
 reserved.cnt  = 0x2
 reserved[0]    [0x80000000-0x8003ffff], 0x00040000 bytes flags: 0
 reserved[1]    [0x81beb9c0-0x83f3ffff], 0x02354640 bytes flags: 0

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
7499118 tangjinyu1994 1660477824
1
https://gitee.com/tinylab/riscv-linux.git
git@gitee.com:tinylab/riscv-linux.git
tinylab
riscv-linux
RISCV-Linux

搜索帮助