Pregunta

He creado un núcleo C, y estoy cargar el núcleo en el emulador QEMU. Sin embargo, cuando la carga del núcleo, que suele bloquearse QEMU y se queja de que no puede acceder a la carpeta KVM. ¿Quiere decir que KVM no está presente, o que yo no soy como administrador; porque una sesión como un administrador de raíz. Aquí está la información de error, que se originó desde el terminal:

danny@ubuntu:~/Desktop$ sudo qemu -kernel os.bin
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support
pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a0000

EAX=00004500 EBX=00000000 ECX=00000000 EDX=00000000
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00009fe0
EIP=0000fdfb EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =9000 00090000 ffffffff 00cf9300
CS =9020 00090200 0000ffff 00009b0f
SS =9000 00090000 0000ffff 00009300
DS =9000 00090000 0000ffff 00009300
FS =9000 00090000 0000ffff 00009300
GS =9000 00090000 0000ffff 00009300
LDT=0000 00000000 0000ffff 00008200
TR =0000 00000000 0000ffff 00008b00
GDT=     000cba40 00000017
IDT=     00000000 000003ff
CR0=00000010 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000 
DR6=ffff0ff0 DR7=00000400
CCS=00004500 CCD=00004546 CCO=ADDB    
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
Aborted

El error también parece mostrar la información, que parece ser registros NASM, y se queja de que no pudo encontrar un archivo ROM. Entonces, ¿podría alguien por favor me diga lo que estoy haciendo mal, le agradecería su tiempo y esfuerzo.

¿Fue útil?

Solución

La sugerencia hecha por Ben Voigt no es su problema. Tengo la misma salida exacta cuando corro mi kernel y no causa ningún problema.

Los aborta QEMU razón es la siguiente:

qemu: fatal: Tratando de ejecutar código RAM exterior o ROM en 0x000a0000

Esto significa que los intentos del kernel para ejecutar código desde una ubicación de memoria no válida. Por lo tanto, es un error en el núcleo y no tiene nada que ver con QEMU.

Editar Sólo una pista sobre dónde está su error puede ser. En cuanto a su vaciado del registro, está claro que la última instrucción ejecutada es justo por debajo de 640K (en 0x9fffb). En mi máquina, QEMU informa toda la memoria entre 637K y 1M como no disponible. Siempre hay que tener cuidado de no utilizar la memoria disponible. Una apuesta segura es simplemente mantenerse por debajo de 637K hasta que son capaces de obtener un mapa de memoria y saber lo que la memoria que puede utilizar.

Otros consejos

En primer lugar, si no hay KVM, es decir, u debe "modprobe kvm" y "modprobe kvm_intel" (o kvm_amd modprobe" si está en el procesador basado en AMD), para cargar el módulo kernel de KVM antes de usar qemu. Pero cuando qemu detecta que no hay KVM cargado, es decir / dev / KVM no está presente, entonces todavía seguirá adelante con la ejecución, excepto que no hay virtualización de hardware (véase http://en.wikipedia.org/wiki/X86_virtualization ).

Ni es la opción ROM ( "PXE-rtl8139.bin") la tiradora, Pienso , por lo que todavía continuar la ejecución (ver código fuente Qemu) :

./hw/pci.c:
        error_report("%s: failed to find romfile \"%s\"",

Sin embargo, el principal error en su caso es la dirección 0xA000:

"Tratar de ejecutar código RAM exterior o ROM en 0x000a0000"

Y eso es ilegal - como la dirección más alta que 0xA0000 se llama el agujero de la memoria. Consulte el diagrama en:

http://www.cs.cmu.edu /~410-s07/p4/p4-boot.pdf

que describen la tarea necesaria para escribir un gestor de arranque (consulte la página 15 para la descripción en el agujero de la memoria).

    static inline tb_page_addr_t get_page_addr_code(CPUState *env1, target_ulong addr)
{
    int mmu_idx, page_index, pd;
    void *p;

    page_index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
    mmu_idx = cpu_mmu_index(env1);
    if (unlikely(env1->tlb_table[mmu_idx][page_index].addr_code !=
                 (addr & TARGET_PAGE_MASK))) {
        ldub_code(addr);
    }
    pd = env1->tlb_table[mmu_idx][page_index].addr_code & ~TARGET_PAGE_MASK;
    if (pd > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
        cpu_abort(env1, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
    }
    p = (void *)((uintptr_t)addr + env1->tlb_table[mmu_idx][page_index].addend);
    return qemu_ram_addr_from_host_nofail(p);
}

Y como u puede ver, el error es un "cpu_abort ()" grave error grave. Esencialmente, en la página 5 de la CMU cargador de arranque artículo anterior 0xA0000 es la dirección más alta u puede acceder durante el arranque realmode.

Es necesario para solucionar este problema:

pci_add_option_rom: fracasado en encontrar fichero rom "PXE-rtl8139.bin"

Cualquiera de proporcionar el archivo necesario (re-instalar qemu?) O cambiar la configuración de la VM y retire la tarjeta de red. La red virtual no puede funcionar sin este archivo.

creo, tiene que introducir a bzImage válida en lugar de os.bin. Personalmente utilizo KVM -kernel arch / x86 / boot / bzImage.

Hay dos tutoriales agradables

http://softperience.eu/wiki/ Wiki.jsp? page = Desarrollar% 20Linux% 20Kernel% 20with% 20Netbeans

http://softperience.eu/ wiki / Wiki.jsp? page = Avanzado% 20Linux% 20Kernel% 20Developing% 20with% 20Netbeansw

con algunos trucos bonitos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top