101 Star 294 Fork 98

泰晓科技/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 创建了任务 2年前
cola2003 修改了标题 2年前
cola2003 修改了描述 2年前
cola2003 修改了描述 2年前
cola2003 修改了描述 2年前
cola2003 修改了描述 2年前
cola2003 修改了描述 2年前
cola2003 修改了描述 2年前
cola2003 任务状态待办的 修改为进行中 2年前
展开全部操作日志

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

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

方案讨论:

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

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

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

cola2003-cola2003 cola2003 成员
回复 tjytimi 成员
2年前

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

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

cola2003 修改了描述 2年前
cola2003 修改了标题 2年前
cola2003 修改了描述 2年前

今天因为在等其他部分工作,稍微有时间调研了一下,可以在 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)
cola2003-cola2003 7499118 tangjinyu1994 1660477824
1
https://gitee.com/tinylab/riscv-linux.git
git@gitee.com:tinylab/riscv-linux.git
tinylab
riscv-linux
RISCV-Linux

搜索帮助