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.