|
342
|
Programación / Programación C/C++ / Máquina virtual (en C)
|
en: 8 Diciembre 2011, 22:25 pm
|
¿Sabéis de algún código fuente de una máquina virtual escrita en C?
Es que estoy tratando de hacer un mini sistema operativo. Me basaba en el SO Luxur pero me fallaba al compilar y ahora quiero empezar uno de nuevo, usando GRUB como bootloader.
Bueno, pues ahí van las características que quiero que tenga mi OS:
Quiero que el bootloader cargue un kernel. Dicho kernel, a parte de cordinar y administrar funciones, memoria (en el modo más sencillo y liviano sencillo) ,... cada vez que el usuario lo desee se abra una shell. En cada shell se pueden ejectutar unos comandos para abrir archivos, modificarlos,... pero de manera independiente y virtual (Cada shell es un proceso virtual).
¿Cómo podría hacerlo? ¿Es muy complicado? Yo veo un problema que es que como el sistema operativo sería tipo consolaa (sin GUI ni nada), cómo se podría cambiar de shell, teneindo en cuenta que varias shells se pueden ejecutar al mismo tiempo?
|
|
|
343
|
Sistemas Operativos / GNU/Linux / Scons
|
en: 6 Diciembre 2011, 13:25 pm
|
¿Sabéis cómo instalar un paquete para el programa Scons para que se pueda compilar en 32 bits estando en 64 bits? Para poder hacer:
scons --32
|
|
|
345
|
Programación / Programación General / Re: Compilar kernel
|
en: 5 Diciembre 2011, 23:20 pm
|
bueno, da igual, olvidaros de todo lo que he dicho porque me he explicado realmente mal. vuelvo a empezar.
compilo un kernel con un makefile, pero resulta que da error "invalid instruction suffix for `push'", esto pasa en el boot.s. busco por internet y resulta que esto es porque se está ensamblando/compilando en 64 bits, y se tiene que cambiar a 32. en el makefile, prueba a cambiar donde dice as por as --32, y me dice "ld: i386 architecture of input file `boot/boot.o' is incompatible with i386:x86-64 output". ¿qué tengo que hacer?
|
|
|
346
|
Programación / Programación General / Re: Compilar kernel
|
en: 5 Diciembre 2011, 23:09 pm
|
equ MULTIBOOT_HEADER_MAGIC, 0x1BADB002 .equ MULTIBOOT_HEADER_FLAGS, 0x00010003
.section .text .globl _start,Inicio_nucleo .extern nucleo_stack, code, bss, end, init, gdtr
_start: jmp Inicio_nucleo
.align 4
mboot: .long MULTIBOOT_HEADER_MAGIC .long MULTIBOOT_HEADER_FLAGS .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) .long mboot .long code .long bss .long end .long Inicio_nucleo
Inicio_nucleo: movl $nucleo_stack, %esp pushl %ebx pushl %eax #call install_gdt call main hlt
gdt_ptr: .word 5*8-1 .long _gdt _gdt: .quad 0x0000000000000000 .quad 0x00cf9a000000ffff .quad 0x00cf92000000ffff .quad 0x00cffa000000ffff .quad 0x00cff2000000ffff
|
|
|
347
|
Programación / Programación General / Compilar kernel
|
en: 5 Diciembre 2011, 23:03 pm
|
Siguiendo la recomendación de un usuario, me interesé por el kernel Luxur que hizo un usuario de por aquí. El problema es que no lo sé compilar. He seguido sus instrucciones pero no lo entiendo. Usé el scons, como él dice, y me da el siguiente error:
Error: invalid instruction suffix for `push'
DIcho error se produce en el boot.s.. Entonces he probado, para ver qué pasaba, a quitar los push. Y ha funcionado (pero a saber cómo funciona cuando se ejecute porque he quitado 2 líneas de código). la cuestión es que con el scons obtengo un .exe, y ahora no sé cómo pasarlo a ISO.
Resumiendo:
-A qué se debe el error "Error: invalid instruction suffix for `push'"? -Hay algún comando scons para obtener ISO y no un archivo ejecutable?
|
|
|
|
|
|
|