Skip to content

Porting ArceOS Unikernel to run as a user-level program on reL4. #16

@yfblock

Description

@yfblock

目标

将 ArceOS 移植到 reL4 之上作为用户态程序,由于 ArceOS 是 Unikernel,内核和程序直接绑在一起,通过函数调用,所以在完成基本功能的时候不需要对调用指令进行修改。在完成基本任务的时候,应该能够让 ArceOS 的所有测例都能以 seL4 的用户态进程的形式运行,并且尽量保证 ArceOS 的结构和模块名称兼容。

阶段基本任务

  • 为 ArceOS 的 HAL 添加 seL4 用户态的支持
  • 修改 ArceOS 的编译系统能够和 rel4-linux-kit 的编译系统整合
  • PerCPU 部分的支持需要进行梳理和修改
  • 对 HAL 模块进行修改,剔除特权指令的存在
  • ArceOS 中页表进行修改,和 seL4/reL4 Capability 进行整合
  • 添加基于 Cap 的中断机制支持
  • 由于 ArceOS 中存在 TLS 的使用,而 rust-sel4 中也存在 TLS 的使用,且 ArceOS 可能会随意切换 TLS,需要进行梳理
  • 移除调度器相关代码
  • ArceOS 自己掌控调度,能够保证发生中断的时候内核 TLS 和状态是对应的,但是运行在 seL4/reL4 来说需要特别的设计让中断发生的时候切换 ArceOS 的状态到对应的 TLS 和内核状态
  • 将内存管理方式从直接内存管理转换为 Cap Untyped 管理
  • 对 ArceOS 内存申请和映射部分进行梳理,申请内存按照 Cap 的方式进行,确保没有 “凭空”产生的
  • 对其他模块进行梳理,保证不出现资源或 Cap 冲突、访问特权指令等情况

阶段进阶任务

  • 将 ArceOS 中的模块进行修改,能够拆分成多个独立的进程运行,模块之间通过 IPC 通信
  • 支持多种架构和平台

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    Todo

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions