Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/vtkm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Test VT Kernel Module

on:
push:
branches:
- main
pull_request:
paths:
- 'lab/vtkm/**'

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./lab/vtkm
steps:
- uses: actions/checkout@v4
- name: Clang Format
run: |
find . -path ./build -prune -o \
\( -iname '*.c' -o -iname '*.h' -o -iname '*.cpp' -o -iname '*.hpp' \) \
-exec clang-format --style=file --dry-run --verbose {} \;
- name: Build
run: make
16 changes: 16 additions & 0 deletions lab/vtkm/.clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
BasedOnStyle: Google

AccessModifierOffset: -2

AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

DerivePointerAlignment: false
BreakConstructorInitializers: BeforeComma
AlignAfterOpenBracket: BlockIndent

BinPackArguments: false
BinPackParameters: false

AlignArrayOfStructures: Right
53 changes: 53 additions & 0 deletions lab/vtkm/.clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
Checks: '-*,
readability-*'
HeaderFileExtensions:
- h
ImplementationFileExtensions:
- c
HeaderFilterRegex: ''
FormatStyle: '.clang-format'
SystemHeaders: false
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: lower_case
- key: readability-identifier-naming.ClassMemberCase
value: lower_case
- key: readability-identifier-naming.ConstexprVariableCase
value: lower_case
- key: readability-identifier-naming.EnumCase
value: lower_case
- key: readability-identifier-naming.EnumConstantCase
value: lower_case
- key: readability-identifier-naming.FunctionCase
value: lower_case
- key: readability-identifier-naming.GlobalConstantCase
value: lower_case
- key: readability-identifier-naming.StaticConstantCase
value: lower_case
- key: readability-identifier-naming.StaticVariableCase
value: lower_case
- key: readability-identifier-naming.MacroDefinitionCase
value: UPPER_CASE
- key: readability-identifier-naming.MacroDefinitionIgnoredRegexp
value: '^[A-Z]+(_[A-Z]+)*_$'
- key: readability-identifier-naming.MemberCase
value: lower_case
- key: readability-identifier-naming.PrivateMemberSuffix
value: '_'
- key: readability-identifier-naming.PublicMemberSuffix
value: ''
- key: readability-identifier-naming.NamespaceCase
value: lower_case
- key: readability-identifier-naming.ParameterCase
value: lower_case
- key: readability-identifier-naming.TypeAliasCase
value: lower_case
- key: readability-identifier-naming.TypedefCase
value: lower_case
- key: readability-identifier-naming.TypedefCaseSuffix
value: '_t'
- key: readability-identifier-naming.VariableCase
value: lower_case
- key: readability-identifier-naming.IgnoreMainLikeFunctions
value: 1
18 changes: 18 additions & 0 deletions lab/vtkm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Linux kernel module
*.mod.cmd
*.mod.o.cmd
*.ko.cmd
*.o.cmd
*.ko
*.mod
*.mod.c
*.mod.o
*.o
.Module.symvers.cmd
.modules.order.cmd
Module.symvers
modules.order

# Clangd
compile_commands.json
.cache/
12 changes: 12 additions & 0 deletions lab/vtkm/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
obj-m += src/vtkm.o

PWD := $(CURDIR)
KDIR = /lib/modules/`uname -r`/build
EXTRA_CFLAGS = -Wall -g

all:
make -C $(KDIR) M=$(PWD) modules

clean:
make -C $(KDIR) M=$(PWD) clean
rm -rf .cache
26 changes: 26 additions & 0 deletions lab/vtkm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Базовый трек. Лабораторная работа 3

## Задание

Разработать комплекс программ на пользовательском уровне и уровне ярда, который собирает
информацию на стороне ядра и передает информацию на уровень пользователя, и выводит ее в
удобном для чтения человеком виде. Программа на уровне пользователя получает на вход
аргумент(ы) командной строки (не адрес!), позволяющие идентифицировать из системных таблиц
необходимый путь до целевой структуры, осуществляет передачу на уровень ядра, получает
информацию из данной структуры и распечатывает структуру в стандартный вывод. Загружаемый
модуль ядра принимает запрос через указанный в задании интерфейс, определяет путь до целевой
структуры по переданному запросу и возвращает результат на уровень пользователя.

Интерфейс передачи между программой пользователя и ядром и целевая структура задается
преподавателем. Интерфейс передачи может быть один из следующих:
- `syscall` - интерфейс системных вызовов.
- `ioctl` - передача параметров через управляющий вызов к файлу/устройству.
- `procfs` - файловая система `/proc`, передача параметров через запись в файл.
- `debugfs` - отладочная файловая система `/sys/kernel/debug`, передача параметров через
запись в файл.

Целевая структура может быть задана двумя способами:

- Именем структуры в заголовочных файлах Linux
- Файлом в каталоге `/proc`. В этом случае необходимо определить целевую структуру по пути
файла в `/proc` и выводимым данным.
23 changes: 23 additions & 0 deletions lab/vtkm/src/vtkm.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/printk.h>

#define MODULE_NAME "vtkm"

MODULE_LICENSE("GPL");
MODULE_AUTHOR("secs-dev");
MODULE_DESCRIPTION("A simple kernel module");

#define LOG(fmt, ...) pr_info("[" MODULE_NAME "]: " fmt, ##__VA_ARGS__)

static int __init vtkm_init(void) {
LOG("VTKM joined the kernel\n");
return 0;
}

static void __exit vtkm_exit(void) {
LOG("VTKM left the kernel\n");
}

module_init(vtkm_init);
module_exit(vtkm_exit);