¿Cómo resuelve el compilador / enlazador la API del kernel como 'printk' llamado desde un módulo en linux?

He escrito un ejemplo del módulo del kernel 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");
}

Aquí, he usado el método "printk", que es una API de Kernel expuesta por Linux. Puedo ver los símbolos exportados de Linux en "/ proc / kallsyms". Tengo curiosidad por saber cómo gcc / ld enlaza las API de Kernel llamadas? ¿Gcc / ld obtiene la dirección del método del kernel de "/ proc / kallsyms" o algún otro archivo y realiza la vinculación? Si es así, ¿cómo gcc / ld lo sabe? No pude ninguna opción que diga eso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta