作业 0——内核 API

  • 截止日期: 周一,2024 年 3 月 25 日,23:59

作业目标

  • 熟悉 qemu 的设置
  • 加载/卸载内核模块
  • 熟悉内核中实现的列表 API
  • 玩得开心 :)

说明

编写名为 list 的内核模块(生成的文件必须命名为 list.ko),该模块在内部列表中存储数据(字符串)。

必须使用内核中实现的 列表 API。有关详细信息,请参阅 实验 2

该模块向 procfs 导出名为 list 的目录。该目录包含两个文件:

  • management:只能写入;用于向内核模块传输命令的接口
  • preview:只读;用于查看内核列表的内部内容的接口。

代码骨架 实现了这两个 procfs 文件。你需要创建一个列表,并实现对数据的 添加读取 支持。请按照代码中的 TODO 进行操作。

要与内核列表进行交互,你必须在 /proc/list/management 文件中编写命令(使用 echo 命令):

  • addf name:将 name 元素添加到列表的顶部
  • adde name:将 name 元素添加到列表的末尾
  • delf name:删除列表中第一个 name
  • dela name:删除列表中所有的 name 元素

要想查看列表内容,可以查看 /proc/list/preview 文件的内容(使用 cat 命令)。格式为每行一个元素。

测试

为了简化作业评估过程,同时也为了减少提交作业时的错误,作业评估将通过一个名为 _checker测试脚本 自动进行。测试脚本假定内核模块名为 list.ko

快速开始

你必须从 list.c 文件中找到的代码骨架开始实现作业。你应该按照 任务仓库README.md 文件 中的说明进行操作。

提示

要想增加获得最高分的机会,请阅读并遵循 Linux 内核编码风格,该风格在 代码风格文档 中有描述。

此外,使用以下静态分析工具来验证代码:

  • checkpatch.pl
$ linux/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/list.c
  • sparse
$ sudo apt-get install sparse
$ cd linux
$ make C=2 /path/to/your/list.c
  • cppcheck
$ sudo apt-get install cppcheck
$ cppcheck /path/to/your/list.c

扣分项

有关作业扣分项的信息可以在 基本说明页面 中找到。

在特殊情况下(作业通过测试,但不符合要求)以及如果作业未通过所有测试,成绩可能会降低更多。

提交作业

使用 vmchecker-next 基础设施自动对作业进行评分。提交将在 moodle 上的 课程页面 上与相关作业相关联。你可以在 仓库README.md 文件 中找到提交详细信息。

资源

我们建议你使用 gitlab 存储作业。请按照 README.md 文件 中的说明进行操作。

问题

如果你有相关的问题,你可以查阅邮件 列表存档,或在专用的 Teams 频道上提出问题。