2017-05-20 11:17:37 +01:00
bak
2017-05-09 19:59:56 +01:00
2017-05-15 09:08:16 +01:00
0
2016-07-30 09:38:06 +01:00
bak
2017-05-09 19:59:56 +01:00
2017-05-16 07:57:02 +01:00
2016-12-15 22:53:13 +00:00
0
2016-07-30 09:38:06 +01:00
0
2016-07-30 09:38:06 +01:00
2017-05-20 11:17:37 +01:00
2017-05-20 11:17:37 +01:00
2017-05-20 11:17:37 +01:00

Linux Kernel Module Cheat

Run one command, get into QEMU Buildroot BusyBox with several minimal Linux kernel 4.9 module example tutorials. Tested in Ubuntu 14.04 host.

Usage:

sudo apt-get install qemu
./run

First build will take a while (GCC, Linux kernel).

QEMU opens up, and you can run:

root
insmod /hello.ko
insmod /hello2.ko
rmmod hello
rmmod hello2

Each module comes from a C file under kernel_module/. For module usage do:

head *. use Buildroot's default kernel version, you can confirm it after build with:

grep BR2_LINUX_KERNEL_VERSION buildroot/.config

After the first build, you can also run just:

./runqemu

to save a few seconds. ./run wouldn't rebuild everything, but checking timestamps takes a few moments.

We use printk a lot, and it shows on the QEMU terminal by default. If that annoys you (e.g. you want to see stdout separately), do:

dmesg -n 1

See also: https://superuser.com/questions/351387/how-to-stop-kernel-messages-from-flooding-my-console

Debugging

GDB the linux kernel:

./runqemu -d

If you want to break immediately at a symbol, e.g. start_kernel of the boot sequence, open another terminal and run for example:

./rungdb start_kernel

Now QEMU will stop there, and you can use the normal GDB commands:

l
n
c

To skip the boot, run just:

./rungdb

and when you want to break, do Ctrl + C from GDB.

To have some fun, you can first run inside QEMU:

/count.sh

which counts to infinity to stdout, and then:

Ctrl + C
break sys_write

And now you can control the counting from GDB:

continue
continue
continue

Text mode

Show serial output of QEMU directly on the current terminal, without opening a QEMU window:

./run -n

To exit, just do a regular:

poweroff

This is particularly useful to get full panic traces when you start making the kernel crashing :-)

In case of a panic, you want your terminal back with Ctrl + C, A and type quit. See also: http://stackoverflow.com/questions/14165158/how-to-switch-to-qemu-monitor-console-when-running-with-curses

See also: https://unix.stackexchange.com/questions/208260/how-to-scroll-up-after-a-kernel-panic

Table of contents

  1. Introduction
  2. Build
  3. kmod
  4. Bibliography
  5. Examples
    1. Host
    2. Buildroot
      1. Debugging
        1. hello
        2. hello2
        3. debugfs
        4. panic
      2. fops
      3. Asynchronous
        1. workqueue
        2. sleep
        3. kthread
        4. timer
        5. work_from_work
Description
No description provided
Readme 202 MiB
Languages
Python 37.3%
C 33.8%
Assembly 13.6%
C++ 8.6%
Shell 3.7%
Other 2.8%