diff --git a/README.md b/README.md index 064531d..4c6add7 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,8 @@ and they will be run automatically before the login prompt. `S99` is already gitignored for you. +For convenience, we also setup a symlink from `S99` to `rootfs_overlay/etc/init.d/S99`. + ## Debugging To GDB the Linux kernel, first run: diff --git a/S99 b/S99 new file mode 120000 index 0000000..4a81793 --- /dev/null +++ b/S99 @@ -0,0 +1 @@ +rootfs_overlay/etc/init.d/S99 \ No newline at end of file diff --git a/kernel_module/README.md b/kernel_module/README.md index d580361..a2f9964 100644 --- a/kernel_module/README.md +++ b/kernel_module/README.md @@ -5,9 +5,11 @@ 1. Debugging 1. [hello](hello.c) 1. [hello2](hello2.c) - 1. [debugfs](debugfs.c) 1. [panic](panic.c) 1. [params](params.c) + 1. Pseudo filesystems + 1. [debugfs](debugfs.c) + 1. [procfs](procfs.c) 1. [fops](fops.c) 1. [ioctl](ioctl.c) 1. [poll](poll.c) diff --git a/kernel_module/procfs.c b/kernel_module/procfs.c new file mode 100644 index 0000000..010647e --- /dev/null +++ b/kernel_module/procfs.c @@ -0,0 +1,54 @@ +/* +Yet another fops entrypoint. + +https://stackoverflow.com/questions/8516021/proc-create-example-for-kernel-module + + insmod /procfs.ko + cat /proc/lkmc_procfs + +Output: + + abcd +*/ + +#include +#include +#include +#include /* seq_read, seq_lseek, single_open, single_release */ +#include /* S_IRUSR */ + +static const char *filename = "lkmc_procfs"; + +static int show(struct seq_file *m, void *v) +{ + seq_printf(m, "abcd\n"); + return 0; +} + +static int open(struct inode *inode, struct file *file) +{ + return single_open(file, show, NULL); +} + +static const struct file_operations fops = { + .llseek = seq_lseek, + .open = open, + .owner = THIS_MODULE, + .read = seq_read, + .release = single_release, +}; + +static int myinit(void) +{ + proc_create(filename, 0, NULL, &fops); + return 0; +} + +static void myexit(void) +{ + remove_proc_entry(filename, NULL); +} + +module_init(myinit) +module_exit(myexit) +MODULE_LICENSE("GPL");