mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-27 12:04:27 +01:00
gem5: se.py attempts, also improve qemu usermode info
This commit is contained in:
58
README.adoc
58
README.adoc
@@ -4485,8 +4485,8 @@ The reason this is cool, is that `ls` is not statically compiled, but since we h
|
|||||||
In other words, much cooler than:
|
In other words, much cooler than:
|
||||||
|
|
||||||
....
|
....
|
||||||
arm-linux-gnueabi-gcc -o hello -static hello.c
|
./out/arm/buildroot/host/bin/arm-linux-gcc -static ./kernel_module/user/hello.c
|
||||||
qemu-arm hello
|
qemu-arm a.out
|
||||||
....
|
....
|
||||||
|
|
||||||
It is also possible to compile QEMU user mode from source with `BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE=y`, but then your compilation will likely fail with:
|
It is also possible to compile QEMU user mode from source with `BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE=y`, but then your compilation will likely fail with:
|
||||||
@@ -4508,6 +4508,60 @@ qemu-arm -g 1234 -L . bin/ls
|
|||||||
|
|
||||||
TODO: find source. Lazy now.
|
TODO: find source. Lazy now.
|
||||||
|
|
||||||
|
link:https://stackoverflow.com/questions/48959349/how-to-solve-fatal-kernel-too-old-when-running-gem5-in-syscall-emulation-se-m[crosstool-ng] tests show that QEMU also has a runtime check for the kernel version which can fail as:
|
||||||
|
|
||||||
|
....
|
||||||
|
FATAL: kernel too old
|
||||||
|
....
|
||||||
|
|
||||||
|
but it must be using the kernel version given by glibc, since we didn't hit that error on uclibc.
|
||||||
|
|
||||||
|
==== gem5 syscall emulation mode
|
||||||
|
|
||||||
|
Analogous to QEMU's user mode, but less usable.
|
||||||
|
|
||||||
|
https://stackoverflow.com/questions/48959349/how-to-solve-fatal-kernel-too-old-when-running-gem5-in-syscall-emulation-se-m
|
||||||
|
|
||||||
|
First we try some `-static` sanity checks.
|
||||||
|
|
||||||
|
Works and prints `hello`:
|
||||||
|
|
||||||
|
....
|
||||||
|
./out/arm/buildroot/host/bin/arm-linux-gcc -static ./kernel_module/user/hello.c
|
||||||
|
./out/common/gem5/build/X86/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
|
||||||
|
|
||||||
|
./out/arm/buildroot/host/bin/arm-linux-gcc -static ./kernel_module/user/hello.c
|
||||||
|
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
|
||||||
|
|
||||||
|
./out/aarch64/buildroot/host/bin/aarch64-linux-gcc -static ./kernel_module/user/hello.c
|
||||||
|
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
|
||||||
|
....
|
||||||
|
|
||||||
|
But I think this is unreliable, and only works because we are using uclibc which does not check the kernel version as glibc does: https://stackoverflow.com/questions/50542222/how-to-run-a-dynamically-linked-executable-syscall-emulation-mode-se-py-in-gem5
|
||||||
|
|
||||||
|
Ignoring the insanity, we then try it with dynamically linked executables:
|
||||||
|
|
||||||
|
....
|
||||||
|
./out/common/gem5/build/X86/gem5.opt ./gem5/gem5/configs/example/se.py -c ./out/x86_64/buildroot/target/hello.out
|
||||||
|
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./out/arm/buildroot/target/hello.out
|
||||||
|
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./out/aarch64/buildroot/target/hello.out
|
||||||
|
....
|
||||||
|
|
||||||
|
But they fail with:
|
||||||
|
|
||||||
|
....
|
||||||
|
fatal: Unable to open dynamic executable's interpreter.
|
||||||
|
....
|
||||||
|
|
||||||
|
and `cd ./out/aarch64/buildroot/target` did not help.
|
||||||
|
|
||||||
|
The current FAQ says it is not possible to use dynamic executables: http://gem5.org/Frequently_Asked_Questions but I don't trust it, and then these presentations mention it:
|
||||||
|
|
||||||
|
* http://www.gem5.org/wiki/images/0/0c/2015_ws_08_dynamic-linker.pdf
|
||||||
|
* http://research.cs.wisc.edu/multifacet/papers/learning_gem5_tutorial.pdf
|
||||||
|
|
||||||
|
but I could not find how to actually use it.
|
||||||
|
|
||||||
=== Debug the emulator
|
=== Debug the emulator
|
||||||
|
|
||||||
When you start hacking QEMU or gem5, it is useful to see what is going on inside the emulator themselves.
|
When you start hacking QEMU or gem5, it is useful to see what is going on inside the emulator themselves.
|
||||||
|
|||||||
Reference in New Issue
Block a user