mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-22 17:55:57 +01:00
60 lines
1.3 KiB
Bash
Executable File
60 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eux
|
|
|
|
name=scull
|
|
|
|
mod="${1:-$name.ko}"
|
|
[ $# -gt 1 ] && 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
|