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.gitMove to project directory and run build driver:
cd linux_driver/ && make allInitialize driver (root rights required):
make initInitialize 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 deinitTo return project to original state:
make fcleanTo check that driver loaded successfully:
lsmod | head -n 2To see driver logs run:
sudo dmesg | tailTo test driver run:
make make_testThen move to test/ directory and run reader and writer in separate terminals:
cd test/ && ./readercd test/ && ./writerTo return project test to original state:
make clean_test
