# Linux Kernel Module Cheat

### 3.3. tmux

tmux just makes things even more fun by allowing us to see both the terminal for:

- emulator stdout

- GDB step debug

at once without dragging windows around!

First start `tmux` with:

    tmux

Now that you are inside a shell inside tmux, you can start GDB simply with:

    ./run --gdb

which is just a convenient shortcut for:

    ./run --gdb-wait --tmux --tmux-args start_kernel

This splits the terminal into two panes:

- left: usual QEMU with terminal

- right: GDB

and focuses on the GDB pane.

Now you can navigate with the usual tmux shortcuts:

- switch between the two panes with: `Ctrl-B O`

- close either pane by killing its terminal with `Ctrl-D` as usual

See the tmux manual for further details:

    man tmux

To start again, switch back to the QEMU pane with `Ctrl-O`, kill the emulator, and re-run:

    ./run --gdb

This automatically clears the GDB pane, and starts a new one.

The option `--tmux-args` determines which options will be passed to the program running on the second tmux pane, and is equivalent to:

This is equivalent to:

    ./run --gdb-wait
    ./run-gdb start_kernel

Due to Python’s CLI parsing quicks, if the run-gdb arguments start with a dash `-`, you have to use the `=` sign, e.g. to GDB step debug early boot:

    ./run --gdb --tmux-args=--no-continue

Bibliography: https://unix.stackexchange.com/questions/152738/how-to-split-a-new-window-and-run-a-command-in-this-new-window-using-tmux/432111#432111

- tmux gem5