mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 10:15:57 +01:00
Improve GEM5 documentation in general. Fix documentation for x86 kernel module debugging example, fop_write had been made static, and use timer.ko instead of fops which is more reliable and fun.
85 lines
1.4 KiB
Bash
Executable File
85 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
arch='x86_64'
|
|
bdfore=''
|
|
gem5=false
|
|
kgdb=false
|
|
while getopts A:a:b:gk OPT; do
|
|
case "$OPT" in
|
|
a)
|
|
arch="$OPTARG"
|
|
;;
|
|
A)
|
|
after="$OPTARG"
|
|
;;
|
|
b)
|
|
before="$OPTARG"
|
|
;;
|
|
g)
|
|
gem5=true
|
|
;;
|
|
k)
|
|
kgdb=true
|
|
;;
|
|
esac
|
|
done
|
|
shift "$(($OPTIND - 1))"
|
|
if [ "$#" -gt 0 ]; then
|
|
brk="-ex 'break $1'"
|
|
shift
|
|
else
|
|
brk=''
|
|
fi
|
|
if "$gem5"; then
|
|
arch_dir="${arch}-gem5"
|
|
port=7000
|
|
else
|
|
arch_dir="$arch"
|
|
port=1234
|
|
fi
|
|
|
|
buildroot_out_dir="$(pwd)/buildroot/output.${arch_dir}~"
|
|
gdb="${buildroot_out_dir}/host/usr/bin/${arch}-linux-gdb $before"
|
|
cd "${buildroot_out_dir}/build/linux-custom/"
|
|
if "$kgdb"; then
|
|
cmd="$gdb \
|
|
-q \
|
|
-ex 'add-auto-load-safe-path $(pwd)' \
|
|
-ex 'file vmlinux' \
|
|
-ex 'target remote localhost:$port'
|
|
"
|
|
else
|
|
case "$arch" in
|
|
'x86_64')
|
|
cmd="$gdb \
|
|
-q \
|
|
-ex 'add-auto-load-safe-path $(pwd)' \
|
|
-ex 'file vmlinux' \
|
|
-ex 'set arch i386:x86-64:intel' \
|
|
-ex 'target remote localhost:$port' \
|
|
$brk \
|
|
-ex 'continue' \
|
|
-ex 'disconnect' \
|
|
-ex 'set arch i386:x86-64' \
|
|
-ex 'target remote localhost:$port' \
|
|
-ex 'lx-symbols ../kernel_module-1.0/' \
|
|
"
|
|
;;
|
|
'arm'|'aarch64'|'mips64')
|
|
cmd="$gdb \
|
|
-q \
|
|
-ex 'add-auto-load-safe-path $(pwd)' \
|
|
-ex 'file vmlinux' \
|
|
-ex 'target remote localhost:$port' \
|
|
-ex 'lx-symbols ../kernel_module-1.0/' \
|
|
$brk \
|
|
"
|
|
;;
|
|
esac
|
|
fi
|
|
cmd="$cmd $after"
|
|
echo "$cmd"
|
|
eval "$cmd"
|