摘要:
概述 本文涉及Function、Apb3Decoder、Timer、BlackBoxAndClock四个实验。实验地址 内容 Function 本实验的电路分两个阶段: 识别字符串:用从Flow中获得的字符匹配参数字符串 获得数据:匹配成功后,从字符串后面获得一定量的字节构成一个整数输出 难点在于识 阅读全文
摘要:
概述 最近在学习SpinalHDL,在github上看到了SpinalHDL实验,于是试着做了做。虽然这些实验的答案在仓库里给出来了,但我是FPGA初学者,虽然会一点verilog却对各种总线一窍不通,也不了解scala,所以即使要理解这些实验也花费了一番功夫。在这里记录一下我做这些实验的感想。本文 阅读全文
摘要:
PYNQ开发板上使用USB声卡+OSS兼容层播放音频需要经过联网装库,编译驱动模块,运行三个步骤。 联网装库 首先需要将PYNQ开发板连上网,才能安装所需的库。方法是在电脑上设置共享网络,但要注意大部分操作系统在共享网络的时候无法自己指定本机IP,所以需要修改PYNQ开发板的IP来适应电脑自动设置的 阅读全文
摘要:
概述 本文介绍前六个部分在移植K210开发板遇到的问题,第七章比较麻烦,就放弃了。这里选用K210开发板的原因是rCore教程提供了K210的使用教程,同时RustSBI也提供了相应的适配,使得我能够在几乎不改变内核代码的情况下进行移植,所以还是感谢rCore教程的作者、RustSBI的作者洛佳大佬 阅读全文
摘要:
概述 上一节介绍了文件系统格式的解析,主要涵盖文件系统的文件节点层和块缓存层;本节主要介绍块设备的处理,以及附带的命令行参数、重定向等实现。 内容 先介绍上一节跳过的文件描述符层。基本都是调用文件节点层的各类函数,这里仅给出close和创建函数: void fnode_close(File *sel 阅读全文
摘要:
概述 文件系统果然是内核设计中boss级别的存在,花了我大量时间。主要是对文件系统格式的解析非常繁琐,以及之前没有在sbi环境下考虑过设备中断问题,网上也没有资料,走了不少弯路。因此这一块分为两节,本节主要介绍文件系统格式的解析,本身可以独立出来作为外部程序,相当于内核文件系统的预备部分,所以是“降 阅读全文
摘要:
概述 第六部分是实现基本的文件数据结构、标准输入输出文件和管道文件。相对来讲比较简单,不过因为每个进程的文件描述符表需要用一个既能动态扩增又能直接索引的数据结构,所以我顺便自己实现了一个简单的vector,并利用相同的思想实现了一个队列,使用非常简单,所以又把queue.h换掉了。 内容 首先是ve 阅读全文
摘要:
概述 第五个部分是实现进程相关的函数,相比前面几次任务难度高了不少。同时为了适应前面的内存函数,进程函数的实现基本也得靠自己了。由于用户程序增加了不少,所以我还增改了一下Makefile,并写了一个Python脚本用来生成link_app.S。 内容 首先是Makefile,之前一直是把Makefi 阅读全文
摘要:
概述 第四个部分是实现系统的内存管理,核心当然就是虚拟地址和物理地址空间的管理了。xv6实验三让我有了心理阴影,所以在实验前我先整理了一下源代码,把项目的结构弄清晰,后面有错的时候方便查找。然后这一章节主要分成四个部分,第一部分是给内核代码添加动态内存分配支持,使得内核可以用上链表、可变数组等数据结 阅读全文
摘要:
概述 第三个部分是实现一个分时多任务的系统,也就是能够在多个任务运行期间进行切换,让一个程序在等待IO时其他程序能执行而不是傻等。虽然和并行有点类似,但目前使用到的都只有一个CPU,任何时候都只有一个程序在执行。分时多任务有两种:一种是程序自己主动让出控制权,有点类似于编程语言中协程的概念;一种是由 阅读全文