【答疑】招新小任务的“自己写一个文件系统并挂载”,如何实现挂载?

招新小任务的“自己写一个文件系统并挂载”,如何实现挂载?

附:招新小任务网页

有的同学不知道如何完成这个任务,不知道怎么写自己的文件系统并挂载到DragonOS。

本文旨在以20分钟速通的方式讲解流程(注意,本文只是为了能够让代码跑起来,而不是意味着这样抄就能完成任务)

1. 创建MyRamFS

这一步中,我们需要模仿ramfs,去创建一个MyRamFS。为了省事,我这里就直接复制ramfs的代码,并做小改动(注意,招新任务不允许直接复制代码,要自己写。)

1.1 复制ramfs的代码并重命名为MyRamFS

image

并且在filesystem/mod.rs里面添加:
image

接着把myramfs里面的各种数据结构的名字都改为MyRamFS:

举个例子,这个文件里面其他的地方同理。
image
image

1.2 设置FSMaker

FSMaker是DragonOS内核用于处理文件系统挂载操作的一个对象。我们必须正确设置FSMaker,才能让用户程序通过sys_mount系统调用来挂载这个文件系统。

首先添加MyRamFS的magic number,这个只要不重复就行,所以我这里设置成了114514

image

接着设置myramfs的FSMAKER,第一个参数是文件系统的名字,第二个则是用于创建新的myramfs的初始化函数。

1.3 添加一些日志

为了在后面能够看出是否正确挂载到了MyRamFS,因此在myramfs的inode的各个函数里面都加一些打印日志,比如这样:

image

2. 编写测试程序

测试程序可以基于test-mount那个app来修改。把fstype的字符串改为myramfs即可:

3. 测试!

启动DragonOS之后,使用test-mount命令,就能把myramfs挂载到/mnt/tmp/目录下面了。


上图是能够看到myramfs里面我们添加的日志的。

然后我们cd进去,并且ls或者touch,或者使用held编辑器去写文件,能看到内核输出的日志就代表挂载成功了,接下来就是要去做一些功能的正确性的测试(这就不属于本文的范畴了)。

1 个赞

上述代码我推送到我的仓库的my-ramfs-demo分支了