xv6-k210
xv6-k210 copied to clipboard
Port XV6 to K210 board!
代码清洗
在现阶段的VFS和Scheduler搞好之后,进行一次较大规模的代码整理,主要是整理代码和编写文档。
在多核的情况的,使用`printf`或是`panic`函数进行串口输出,有时会出现两个核的输出发生混淆的现象。这为多核情况下的调试带来了困难:输出有时会混淆到难以辨别的程度。 为了解决这一问题,我个人觉得应该要对`console`设备引入更加完善的锁机制,以保证一次输出的原子性。
在与@AtomHeartCoder讨论之后,我们认为可以在调度器中引入任务(Task)支持。任务控制块的一个草稿如下 ```C struct task { struct list _node; // 与链表有关的域 struct proc *process; // 指向自己的进程控制块 enum task_status status; // 当前任务的运行状态 int tid; // 类似于PID,当前任务的ID struct context context; // 上下文,用于调度 struct...
现有的Panic,我指的是xv6-k210 kernel中的`panic()`函数,严格来说只是使当前的核进入死循环。而我们希望能够能够在Panic的时候同时“*停止*”k210的两个核。 这可能会需要向`panic()`中引入适当的核间中断机制?
一方面,Kendryte提供的`spi.c`对于xv6-k210的应用场景来说过于庞杂。原本的代码中考虑了很多在xv6-k210中大概率不会被用到的情况。另一方面,我们也希望通过重写`spi.c`来彻底消化SD卡驱动的协议栈。最后,我们还希望能够在新的代码中使用`kmemalloc.c`提供的动态内存分配功能。 但考虑到现有的`spi.c`模块其实跑得还挺好的,也许这项工作尚不太急?(笑