作业 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 命令)。格式为每行一个元素。
快速开始¶
你必须从 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 文件 中的说明进行操作。