add assignement 00 to 08

This commit is contained in:
2025-07-10 17:05:01 +02:00
commit 85301ea6e0
22 changed files with 9212 additions and 0 deletions

9
07/Makefile Normal file
View File

@ -0,0 +1,9 @@
obj-m += fortytwo-debugfs.o
fortytwo-debugfs-y = main.o id.o foo.o
PWD := $(CURDIR)
all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

60
07/foo.c Normal file
View File

@ -0,0 +1,60 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/debugfs.h>
#include <linux/mm.h>
#include <linux/mutex.h>
extern struct dentry *module_dir;
ssize_t foo_read(struct file *f, char __user *buf, size_t len, loff_t *off);
ssize_t foo_write(struct file *f, const char __user *buf, size_t len, loff_t *off);
int init_foo(void);
char buffer[PAGE_SIZE];
size_t buffer_len = 0;
DEFINE_MUTEX(rw_lock);
static const struct file_operations fops = {
.owner = THIS_MODULE,
.read = foo_read,
.write = foo_write,
};
ssize_t foo_read(struct file *f, char __user *buf, size_t len, loff_t *off)
{
size_t read;
mutex_lock(&rw_lock);
read = simple_read_from_buffer(buf, len, off, buffer, buffer_len);
mutex_unlock(&rw_lock);
return read;
}
ssize_t foo_write(struct file *f, const char __user *buf, size_t len, loff_t *off)
{
if (len > sizeof(buffer))
return -EINVAL;
mutex_lock(&rw_lock);
if (copy_from_user(buffer, buf, len))
{
mutex_unlock(&rw_lock);
return -EINVAL;
}
buffer_len = len;
mutex_unlock(&rw_lock);
return len;
}
int init_foo(void)
{
struct dentry *ret;
mutex_init(&rw_lock);
ret = debugfs_create_file("foo", 0644, module_dir, NULL, &fops);
if (IS_ERR(ret)) return PTR_ERR(ret);
return 0;
}

54
07/id.c Normal file
View File

@ -0,0 +1,54 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/debugfs.h>
#define VALUE "tomoron"
extern struct dentry *module_dir;
ssize_t id_read(struct file *f, char __user *buf, size_t len, loff_t *off);
ssize_t id_write(struct file *f, const char __user *buf, size_t len, loff_t *off);
int init_id(void);
static const struct file_operations fops = {
.owner = THIS_MODULE,
.read = id_read,
.write = id_write,
};
ssize_t id_read(struct file *f, char __user *buf, size_t len, loff_t *off)
{
char msg[] = VALUE;
pr_info("someone read from the file\n");
return simple_read_from_buffer(buf, len, off, msg, sizeof(msg) - 1);
}
ssize_t id_write(struct file *f, const char __user *buf, size_t len, loff_t *off)
{
char kbuf[64];
if (len > sizeof(kbuf) - 1)
return -EINVAL;
if (copy_from_user(kbuf, buf, len))
return -EINVAL;
kbuf[len] = '\0';
if (strcmp(kbuf, VALUE) == 0){
pr_info("someone wrote the right string\n");
return len;
}
pr_info("someone wrote the wrong string\n");
return -EINVAL;
}
int init_id(void)
{
struct dentry *ret;
ret = debugfs_create_file("id", 0666, module_dir, NULL, &fops);
if(IS_ERR(ret))
return PTR_ERR(ret);
return 0;
}

44
07/main.c Normal file
View File

@ -0,0 +1,44 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/jiffies.h>
#include <linux/debugfs.h>
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("hello world module");
#define FILENAME "id"
int init_id(void);
int init_foo(void);
struct dentry *module_dir;
static int __init fortytwo_debug_init(void)
{
int err = 0;
pr_info("creating fortytwo debug dir\n");
module_dir = debugfs_create_dir("fortytwo", NULL);
if (IS_ERR(module_dir))
return PTR_ERR(module_dir);
debugfs_create_u64("jiffies", 0444, module_dir, (uint64_t *)(&jiffies));
err = init_id();
if (err) return err;
err = init_foo();
if(err) return err;
return 0;
}
static void __exit fortytwo_debug_exit(void)
{
pr_info("removing forytwo debug dir\n");
debugfs_remove(module_dir);
}
module_init(fortytwo_debug_init);
module_exit(fortytwo_debug_exit);

22
07/output.log Normal file
View File

@ -0,0 +1,22 @@
-bash-5.0$ ls -la
total 0
drwxr-xr-x 2 root root 0 Jul 10 01:52 .
drwxrwxrwx 27 root root 0 Jul 10 01:52 ..
-rw-r--r-- 1 root root 0 Jul 10 01:52 foo
-rw-rw-rw- 1 root root 0 Jul 10 01:52 id
-r--r--r-- 1 root root 0 Jul 10 01:52 jiffies
-bash-5.0$ echo hello-world > foo
-bash: foo: Permission denied
-bash-5.0$ echo hello-world | sudo tee foo
hello-world
-bash-5.0$ cat foo
hello-world
-bash-5.0$ cat id
tomoron-bash-5.0$ echo -n patate > id
-bash: echo: write error: Invalid argument
-bash-5.0$ echo -n tomoron > id
-bash-5.0$ cat jiffies
4295652460
-bash-5.0$ cat jiffies
4295653284
-bash-5.0$