w jaki sposób kompilator / linker rozwiązuje API jądra, takie jak 'printk' wywoływane z modułu na Linuksie

Napisałem przykładowy moduł jądra 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");
}

Tutaj użyłem metody „printk”, która jest interfejsem API jądra udostępnionym przez Linuksa. Widzę wyeksportowane symbole Linuksa w "/ proc / kallsyms". Ciekawi mnie, jak gcc / ld łączy tzw. API jądra? Czy gcc / ld pobiera adres metody jądra z „/ proc / kallsyms” lub innego pliku i wykonuje linkowanie? Jeśli tak, w jaki sposób gcc / ld dowie się o tym? Nie mogłem tej opcji powiedzieć.

questionAnswers(1)

yourAnswerToTheQuestion