mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
kernel modules: add a quick scull port from LDD3
Also:
* fix fops.c on both kernels:
* 5.9: the out of space error code was 1 not 8
* 6.6: for whatever reason we can't read the user buffer as before on the
diagnostic print, it leads to segfault and oops
* create memfile.c which is like fops.c but of unlimited size
This commit is contained in:
59
rootfs_overlay/lkmc/scull.sh
Executable file
59
rootfs_overlay/lkmc/scull.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
set -eux
|
||||
|
||||
name=scull
|
||||
|
||||
mod="${1:-$name.ko}"
|
||||
shift
|
||||
insmod "$mod" "$@"
|
||||
major="$(awk "\$2==\"$name\" {print \$1}" /proc/devices)"
|
||||
|
||||
rm -f /dev/${name}[0-3]
|
||||
mknod /dev/${name}0 c $major 0
|
||||
mknod /dev/${name}1 c $major 1
|
||||
mknod /dev/${name}2 c $major 2
|
||||
mknod /dev/${name}3 c $major 3
|
||||
|
||||
rm -f /dev/${name}pipe[0-3]
|
||||
mknod /dev/${name}pipe0 c $major 4
|
||||
mknod /dev/${name}pipe1 c $major 5
|
||||
mknod /dev/${name}pipe2 c $major 6
|
||||
mknod /dev/${name}pipe3 c $major 7
|
||||
|
||||
rm -f /dev/${name}single
|
||||
mknod /dev/${name}single c $major 8
|
||||
|
||||
rm -f /dev/${name}uid
|
||||
mknod /dev/${name}uid c $major 9
|
||||
|
||||
rm -f /dev/${name}wuid
|
||||
mknod /dev/${name}wuid c $major 10
|
||||
|
||||
rm -f /dev/${name}priv
|
||||
mknod /dev/${name}priv c $major 11
|
||||
|
||||
## scull
|
||||
|
||||
f="/dev/${name}0"
|
||||
[ -z "$(cat "$f")" ]
|
||||
|
||||
# Append starts writing from the start of the 4k block, not like the usual semantic.
|
||||
printf asdf > "$f"
|
||||
printf qw >> "$f"
|
||||
[ qwdf = "$(cat "$f")" ]
|
||||
|
||||
# Overwrite first clears everything, then writes to start of 4k block.
|
||||
printf asdf > /dev/${name}0
|
||||
printf qw > /dev/${name}0
|
||||
[ qw = "$(cat "$f")" ]
|
||||
|
||||
# Read from the middle
|
||||
printf asdf > /dev/${name}0
|
||||
[ df = "$(dd if="$f" bs=1 count=2 skip=2 status=none)" ]
|
||||
|
||||
# Write to the middle
|
||||
printf asdf > "$f"
|
||||
printf we | dd of="$f" bs=1 seek=1 conv=notrunc status=none
|
||||
[ awef = "$(cat "$f")" ]
|
||||
|
||||
echo passed
|
||||
Reference in New Issue
Block a user