Compare commits
2 commits
deb6fbd6c9
...
4ae1267b43
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ae1267b43 | ||
|
|
8d5f6aab17 |
4 changed files with 16 additions and 6 deletions
|
|
@ -12,3 +12,7 @@
|
|||
### Insert & remove
|
||||
`sudo insmod demo_module.ko`
|
||||
`sudo rmmod demo_module.ko`
|
||||
|
||||
### Style
|
||||
Check for style with:
|
||||
`${LINUX_PATH}/scripts/checkpatch.pl -f ./file.c`
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <linux/device.h>
|
||||
#include "my-ioctl.h"
|
||||
|
||||
|
|
@ -14,7 +16,7 @@ static struct class *cls;
|
|||
static long my_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* See: https://elixir.bootlin.com/linux/v6.14.5/source/include/linux/fs.h#L2131 */
|
||||
static struct file_operations fops = {
|
||||
static const struct file_operations fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.unlocked_ioctl = my_ioctl,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,14 +1,16 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#ifndef MY_IOCTL_H
|
||||
#define MY_IOCTL_H
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/*
|
||||
* Crucial point here, the kernel defines a set of macros for defining IOCTL numbers:
|
||||
* _IO - No command
|
||||
* _IOR - Read command
|
||||
* _IOW - Write command
|
||||
* _IORW - RW command
|
||||
* _IOC - Basis of the others
|
||||
* _IO - No command
|
||||
* _IOR - Read command
|
||||
* _IOW - Write command
|
||||
* _IORW - RW command
|
||||
* _IOC - Basis of the others
|
||||
* These macros encode the data type passed to the ioctl.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <stdio.h>
|
||||
// #include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue