https://github.com/alkuzin/linux_driver
Test task: Implementation of Linux driver
https://github.com/alkuzin/linux_driver
c linux linux-driver linux-driver-programming linux-driver-template linux-drivers system-programming
Last synced: 11 months ago
JSON representation
Test task: Implementation of Linux driver
- Host: GitHub
- URL: https://github.com/alkuzin/linux_driver
- Owner: alkuzin
- License: gpl-3.0
- Created: 2024-05-31T16:48:55.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-06-04T08:35:40.000Z (over 1 year ago)
- Last Synced: 2025-01-08T05:49:28.585Z (about 1 year ago)
- Topics: c, linux, linux-driver, linux-driver-programming, linux-driver-template, linux-drivers, system-programming
- Language: C
- Homepage:
- Size: 128 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# linux_driver
Test task: Implementation of Linux driver
## Description:
Задание 2. Linux kernel
Реализовать символьный драйвер предлагающий возможность передавать информацию двум независимым процессам через файл символьного устройства:
- взаимодействие должно осуществляться по принципу кольцевого буфера; т.е. один процесс может писать в файл символьного устройства, а другой из него читать.
- обеспечить возможность задавать размер кольцевого буфера через механизм параметров модулей ядра;
- по умолчанию вызовы чтения и записи должны быть блокирующими;
- обеспечить поддержку нескольких вызовов IOCTL:
- переключение режима работы вызовов read\write из блокирующих \ не блокирующих и обратно;
- обеспечить возможность получения информации о времени последней операции чтения и записи в буфер, а так же идентификаторов и владельцев процессов совершивших эту операцию;
- драйвер должен собираться вне дерева исходных кодов ядра при помощи Makefile;
- исходные коды драйвера должны находиться под системой контроля версий git и содержать историю коммитов;
- результат передаётся в виде ссылки на репозиторий размещённый на github или в виде архива содержащего репозиторий с исходными кодами.
## Installation
Clone this repository
```shell
git clone https://github.com/alkuzin/linux_driver.git
```
Move to project directory and run build driver:
```shell
cd linux_driver/ && make all
```
Initialize driver (root rights required):
```shell
make init
```
Initialize driver with custom size of ring buffer (1024 bytes by default):
```shell
sudo insmod src/linux_driver.ko buffer_size=
```
To deinitialize driver (root rights required) run:
```shell
make deinit
```
To return project to original state:
```shell
make fclean
```
## Test
To check that driver loaded successfully:
```shell
lsmod | head -n 2
```

To see driver logs run:
```shell
sudo dmesg | tail
```

To test driver run:
```shell
make make_test
```
Then move to `test/` directory and run `reader` and `writer` in separate terminals:
```shell
cd test/ && ./reader
```
```shell
cd test/ && ./writer
```
To return project test to original state:
```shell
make clean_test
```