機能しない、私は私のカーネルのIDTを設定しようとしているが、私は、このリンクエラーを取得しています:NASMマクロが正しく
bin/obj/idt.o: In function `setup_idt':
idt.c:(.text+0x9b): undefined reference to `interrupt_handler_1'
エラーがinterrupt_handler_1が定義されていないと言うが、それはありますinterrupt_manager.asmでマクロ:
%macro no_error_code_interrupt_handler 1
global interrupt_handler_%1
interrupt_handler_%1:
cli
push dword 0 ; push 0 as error code
push dword %1 ; push the interrupt number
jmp common_interrupt_handler ; jump to the common handler
%endmacro
ここではsetyup_idt機能である:
extern void interrupt_handler_1();
void setup_idt()
{
// Set the special idt_pointer
idt_pointer.limit = (sizeof(struct InterruptDescriptorTableEntry) * 256) - 1; // Subsract 1 because sizeof doesn't start from 0
idt_pointer.address = (uint32)&idt;
// Clear the whole idt to zeros
memset(&idt, 0, sizeof(struct InterruptDescriptorTableEntry) * 256);
for(unsigned int i = 0; i < 256; i++)
{
idt_set_gate(i, (uint32)&interrupt_handler_1, 0x8, 0x8E);
}
__asm__ __volatile__("lidt %0": :"m"(idt_pointer));
}
私が間違って作られたのは何?
エクストラ質問:私は何をしたいか
は次のようなものです:私はより良い自分自身を説明してみましょう、私は割り込みハンドラに自動的にGDTのIエントリをリンクするマクロ/別の方法があります:
interrupt_handler [i]が割り込みhandler_だろうfor(unsigned int i = 0; i < 256; i++)
{
idt_set_gate(i, (uint32)&interrupt_handler_[i], 0x8, 0x8E);
}
[i]はあなたのNASMコードでマクロを展開する必要があるNASMマクロ
リンカーにはマクロが表示されません。関数を使用します。 –
マクロはコードの一部ではありません。組み立てられた実際のコードに展開されるためにマクロを使用する必要があります。 –
@Joachim Pileborg Okey、余分な質問はどうですか? –