como o compilador / linker resolve a API do kernel como 'printk' chamado a partir de um módulo no linux

Eu escrevi um módulo de kernel hello.ko de amostra:

#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");
}

Aqui, eu usei o método "printk", que é uma API do Kernel exposta pelo Linux. Eu posso ver o Linux exportado símbolos em "/ proc / kallsyms". Estou curioso para saber como o gcc / ld vincula as chamadas APIs do Kernel? O gcc / ld obtém o endereço do método kernel de "/ proc / kallsyms" ou algum outro arquivo e executa a vinculação? Se sim, como o gcc / ld pode saber disso? Eu não poderia qualquer opção que diz isso.

questionAnswers(1)

yourAnswerToTheQuestion