Как компилятор / компоновщик разрешает API ядра, например «printk», вызываемый из модуля в Linux

Я написал пример модуля ядра hello.ko:

#include <linux/module.h>      /* Needed by all modules */
#include <linux/kernel.h>      /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world.\n");
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world 1.\n");
}

Здесь я использовал & quot; printk & quot; метод, который представляет собой API ядра, предоставляемый Linux. Я вижу экспортированные символы Linux в «/ proc / kallsyms». Мне любопытно узнать, как gcc / ld связывает называемые API ядра? Получает ли gcc / ld адрес метода ядра из "/ proc / kallsyms"? или какой-то другой файл и выполнить связывание? Если да, как gcc / ld узнает об этом? Я не мог ни один вариант, который говорит это.

Ответы на вопрос(1)

Ваш ответ на вопрос