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