Test task: Implementation of Linux driver
Задание 2. Linux kernel
Реализовать символьный драйвер предлагающий возможность передавать информацию двум независимым процессам через файл символьного устройства:
-
взаимодействие должно осуществляться по принципу кольцевого буфера; т.е. один процесс может писать в файл символьного устройства, а другой из него читать.
-
обеспечить возможность задавать размер кольцевого буфера через механизм параметров модулей ядра;
-
по умолчанию вызовы чтения и записи должны быть блокирующими;
-
обеспечить поддержку нескольких вызовов IOCTL:
-
переключение режима работы вызовов read\write из блокирующих \ не блокирующих и обратно;
-
обеспечить возможность получения информации о времени последней операции чтения и записи в буфер, а так же идентификаторов и владельцев процессов совершивших эту операцию;
-
драйвер должен собираться вне дерева исходных кодов ядра при помощи Makefile;
-
-
исходные коды драйвера должны находиться под системой контроля версий git и содержать историю коммитов;
-
результат передаётся в виде ссылки на репозиторий размещённый на github или в виде архива содержащего репозиторий с исходными кодами.
Clone this repository
git clone https://github.com/alkuzin/linux_driver.git
Move to project directory and run build driver:
cd linux_driver/ && make all
Initialize driver (root rights required):
make init
Initialize driver with custom size of ring buffer (1024 bytes by default):
sudo insmod src/linux_driver.ko buffer_size=<custom buffer size>
To deinitialize driver (root rights required) run:
make deinit
To return project to original state:
make fclean
To check that driver loaded successfully:
lsmod | head -n 2
To see driver logs run:
sudo dmesg | tail
To test driver run:
make make_test
Then move to test/
directory and run reader
and writer
in separate terminals:
cd test/ && ./reader
cd test/ && ./writer
To return project test to original state:
make clean_test