現在、こちらのサイトを参考にOSを自作しています。

最終的にはマウスなども追加し、画面を操作できるようにしたいと考えています。
しかし、qemuでVBEを利用するには上記のサイトのようにqemu-system-i386 -kernel kernelではサポートされないらしく、GRUBなどでisoファイルを作成し、起動しないといけないようです。
isoファイルはこのサイトを参考に作成し、QEMUで起動まではできたのですがキーボード入力ができなくなってしまいました。

multibootの設定はこのサイトを読んで自分なりに設定してみたのですがサンプルのboot.Sに.long _edata, .long _endと書いてありますがそんなラベルどこにも見当たりません。これはどこを指しているのでしょうか?(私が使用しているのはGNUアセンブラではなくNASMなのでNASMのほうで教えてもらえると助かります)
Multibootについて他のサンプルなどを調べてみましたがどれもマジックナンバー、フラグ、チェックサムまでしか実装していませんでした。
テキストモード、グラフィックモードでのMultibootの設定をNASMで実装したサンプルを示してもらえないでしょうか?

以下は私が作成しているOSの一部です。


kernel.ld


OUTPUT_FORMAT("elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(start)
SECTIONS
{
    . = 0x100000;
    .text : { *(.text) }
    .data : { *(.data) }
    .bss  : { *(.bss) }
}

start.asm


section .text
GLOBAL start, multiboot_header, multiboot_entry
EXTERN kmain
start:
    jmp multiboot_entry
    align 4
multiboot_header:
    dd 0x1badb002
    dd 0x0
    dd - (0x1badb002 + 0x0)
    dd multiboot_header
    dd start
    dd 0 ; よくわからない
    dd 0 ; よくわからない
    dd multiboot_entry
    dd 0
    dd 0
    dd 0
    dd 0
multiboot_entry:
    cli
    mov esp, stack_space
    push ebx
    push eax
    call kmain
    hlt
section .bss
resb 8192
stack_space:

kmain.c


#include "types.h"
#include "defs.h"
#include "int.h"
#include "x86.h"

void kmain(void)
{
    idt_init();
    pic_init();
    pic_enable(IRQ_KBD);

    clean_screen();
    kprint("KERNEL TEST");
    newline();
    while(1);
}

現在できていること
qemu-system-i386 -kernel kernelでは文字を打つことができる。
作成したISOファイルで起動するとKERNEL TESTという文字列を表示することはできる。(キーボードを押すと再起動がかかってしまう)

回答よろしくお願いします。