¿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.