Как создать и запустить модуль ядра Linux на QEMU?

Мой учитель дает мне linux-ядро vmlinuz-3.17.2 и rootfs.ext2, которые можно загрузить в qemu. И он просит меня создать простейший модуль ядра, который печатает мир привет в качестве домашней работы.

  • Во-первых, я загружаю исходный код ядра и запускаю make oldconfig
  • Во-вторых, я делаю конфигурацию PREEMPT и без изменений (согласно uname -a vmlinuz, работающего в qemu), затем подготовьте
  • В-третьих, я скомпилирую модем ядра и скопирую hello.ko в файле rootfs.ext2
  • Наконец, в qemu я запустил insmod hello.ko, который выходит без каких-либо подсказок и echo $? возвращает 0.

Однако я ничего не вижу в dmesg или /var/log/messages Что-то не так? Как я могу это сделать? Также нечего печатать, когда я запускаю rmmod hello.ko успешно.

Уровень моего журнала - 7 4 1 7

Я сделал свой hello.c следующим образом:

#include <linux/init.h>
#include <linux/module.h>

static int __init hello_init(void)
{
    pr_info("Hello World");
    return -1; 
// I changed this to -1 deliberately, Because It seems that the code is not executed.
}

static void __exit hello_exit(void)
{
    printk(KERN_ERR "Goodbye, cruel world\n");
}
MODULE_LICENSE("GPL");

module_init(hello_init);
module_exit(hello_exit);

Ответ 1

Buildroot

Buildroot - это самый простой способ сделать это:

Протестировано на Ubuntu 16.04.