idt_table undefined! предупреждение при компиляции модуля ядра

Я пытаюсь использовать gate_desc *idt_table в модуле ядра. Функция set_trap_gate() определенная в desc.h, использует этот указатель. В desc.h также есть определение: extern gate_desc idt_table[] .

Я пробовал разные вещи:

Я попытался посмотреть, где в файлах, включенных в sched.h, был определен idt_table , но он не смог его найти!

Кто-нибудь знает, как я могу использовать, указатель idt_table из sched.h (затрагивающий его с адресом corrct) или создающий новый указатель?

Теоретически вы можете реализовать не-init-section set_trap_gate() через:

 void set_trap_gate(int n, void *addr) { struct { uint16_t lim; struct desc_struct *idt_table; } __attribute__((packed)) idt; __asm__ ("sidt %0" : : "m"(idt) : "memory"); _set_gate(idt.idt_table + n, 15, 0, addr); } 

Но это будет CPU-local, т. Е. Не гарантируется изменение любого другого IDT, кроме одного из CPU, на котором он работает. Кроме того, это может свалиться с защитой от записи.

Что именно вы пытаетесь достичь?