domingo, 29 de marzo de 2009

Depurando el sistema (III) - Configuración en VirtualBox - Windows

En posts anteriores hemos visto qué es una BSOD (el pantallazo azul), por qué se produce, qué es el kdbs, cómo son los logs que produce, cómo podemos utilizarlos... Pero, claro, si no le decimos a ReactOS que queremos ver esos logs, nunca los veremos... aunque los estemos generando


Si me seguís, vamos a hacer un apasionante viaje por algunos programas que nos serán de utilidad para ver nuestros logs en plataformas Windows. En el proximo post veremos cómo configurarlo en un entorno Linux (Debian/Ubuntu). ¡Que comienze el espectáculo!



Para poder ver los logs en Windows vamos a necesitar dos programas auxiliares (en realidad, como vamos a ver enseguida, con uno solo nos bastaría):

  • El primero es vmwaregateway, una pasarela que recoge la salida de una ubicación "de red" (no os asustéis, luego veremos cómo es esa salida de red), y la coloca en un servidor telnet integrado.

  • Y el segundo, como habréis podido imaginar, es un cliente telnet. Puede ser cualquiera, por ejemplo el propio telnet de la linea de comandos de Windows, o bien (el que yo uso), putty


Bien, dicho esto, vamos a pasar a la parte más complicada (pronto veréis que es una auténtica chorrada) de configurar. Comenzaremos configurando la interfaz de VirtualBox.


ReactOS saca sus logs a través del puerto serie de la máquina, da igual que sea un ordenador real, o una máquina virtual.




[caption id="attachment_500" align="aligncenter" width="300" caption="Configuracion del puerto serie en VirtualBox"]Configuracion del puerto serie en VirtualBox[/caption]

Así que, tenemos que habilitar el puerto serie, creo que no hace falta decirlo, pero por si acaso ;)

El puerto serie que usa ReactOS para sacar sus registros es el primer puerto serie, luego el puerto será COM1

Y ahora viene lo divertido. Puesto que la salida del puerto será la entrada hacia otro programa, el "port mode" debe ser "Tubería (pipe) anfitrión". Y el "port path" debe ser el que aparece en la imagen. O sea, \\.\pipe\vmwaredebug (todo junto, ojo con las barras, no uséis la barra que hay encima del 7, la que debéis usar es la invertida).


NO marquéis la casilla "Crear tubería (pipe)", ya que el programa vmwaregateway la creará automáticamente cuando ejecutemos el programa. Si la marcáis luego nos dará un error al arrancar la máquina virtual.


Bueno, ya hemos visto la parte de VirtualBox. ¿A que no es complicado? De todas formas, esto no es todo, ahora hay que saber cómo conectarse a ese servidor telnet incorporado en el vmwaregateway. Como he dicho antes, se puede hacer de dos formas:




  • Vamos a comenzar con la configuración del cliente putty. Y una vez hecho este, veréis que también podemos usar la propia consola de comandos de Windows. Pero yo personalmente prefiero este pequeño cliente:


[caption id="attachment_502" align="aligncenter" width="296" caption="Dirección a la cual debe conectarse el cliente putty."]Dirección a la cual debe conectarse el cliente putty.[/caption]

Esto es todo lo que tenemos que configurar:

En primer lugar, el servidor telnet está en nuestra popia máquina, por lo que la dirección adecuada es 127.0.0.1, que es la dirección IP local. Si estuvieramos en una red, y corrieramos putty en otro ordenador distinto, la dirección IP sería la del equipo donde tengamos corriendo vmwaregateway y VirtualBox. Nunca he probado esta opción, pero digo yo que podría funcionar...



Y el puerto en el cual estará escuchando vmwaregateway es el 567

  • Y la segunda forma es con el telnet incorporado en Windows, simplemente ejecutando telnet 127.0.0.1 567. Creo que ya usé yo esta forma, pero por alguna razón la deseché en favor de putty. No obstante, aquí os la dejo por si queréis probar.


¿Véis qué facil? Ya tenemos todo configurado y listo para usar. Ahora solo hace falta arrancar el sistema. Para ello, seguid estos pasos:




  1. Arrancamos vmwaregateway.


[caption id="attachment_508" align="aligncenter" width="450" caption="Forma de ejecutar vmwaregateway"]Forma de ejecutar vmwaregateway[/caption]

2. Arrancamos putty

3. Y por ultimo, arrancamos VirtualBox y con él, la máquina virtual ReactOS. Para arrancar ReactOS, tenemos que escoger la segunda opción de arranque ("ReactOS (Debug)"):




[caption id="attachment_506" align="aligncenter" width="450" caption="Arranque de ReactOS con el depurador habilitado."]Arranque de ReactOS con el depurador habilitado.[/caption]

Et voilá! Y con esto deberíamos ver, en la ventana de putty (o en la ventana del cliente telnet que hayamos elegido), un bonito log de depuración.

Y a partir de ahí, ¡A encontrar errores en ReactOS, y tratar de arreglarlos! ¡Suerte, y si sigue sin funcionar, no dudéis de pasaros por el foro o el IRC y comentarlo!

9 comentarios:

  1. Hola, quise hacerlo con putty pero la verdad nunca me arrancó la maquina virtual, así que mejor opté por el telnet nativo y de veras, da buena vibra esto de enviarles logs.

    ResponderEliminar
  2. Hola Julcar, ¿Podrías indicarnos cuál es el mensaje que te muestra VirtualBox para que no puedas arrancar la máquina virtual?

    ResponderEliminar
  3. Hola, que tal...
    Tendria forma de ver los logs si instalara ReactOS sin usar maquina virtual?

    ResponderEliminar
  4. Hola radek,
    Sí, claro, por supuesto, de hecho es fundamental que lo hagas. Para ello sólo necesitas que tus dos máquinas tengan puertos serie disponibles, y un cable cruzado (llamado null modem) entre ambos. Además, para recibir los logs puedes usar el mismo cliente putty, indicándole que quieres recibir datos del puerto Serie (Serial) y a una velocidad de 115200 bps

    ResponderEliminar
  5. Estoy programando un microprocesador, y el programa para cargarlo usa el puerto serie, para mi sorpresa (o no) el vista no es compatible con éste programa. Me decidí por usar una maq virtual con xp, pero no puedo configurar el puerto serie. Hice los pasos que describís, pero me tira el siguiente error al arrancar:

    Código Resultado: E_FAIL (0x80004005)
    Componente: Console
    Interface: IConsole {0a51994b-cbc6-4686-94eb-d4e4023280e2}

    tenés idea porque no funciona, no puedo encontrar una soluci'on en la red, y fue éste uno de los pocos post que tocan el tema.

    GRACIAS!

    ResponderEliminar
  6. Si te he entendido bien lo que quieres hacer es lo siguiente:
    1)Instalar el programa en la maquina virtual que tiene instalado XP
    2)Conectar el microprocesador al puerto serie de tu hardware real
    3)Conectar el puerto serie de la máquina virtual con el puerto serie la máquina real en una especie de túnel.

    Para ello debería funcionar lo siguiente:
    -Abre la Configuración del Puerto Serie de la máquina virtual
    -En la pestaña Port1 selecciona "Activar Puerto Serie"(Enable SerialPort).
    -"Numero del Puerto"(Port Number).Este campo se refiere al número del puerto en tu máquina virtual XP.Selecciona por ejemplo COM1.(Recuerda que esto se refiere a la máquina virtual, no es el puerto de tu hardware real)
    -"Modo del Puerto"(Port Mode):Selecciona "Dispositivo anfitrión".(Host device)
    -"Ruta del Puerto"(Port Path):Aquí sí que nos referimos al puerto REAL del hardware de tu PC. Por ejemplo podemos poner: COM3(o COM2 o COM1).Es decir el puerto donde tengas enganchada la placa a programar.

    Y listo.Tunel hecho.
    Recuerda que mientras VBOX use el puerto COM de tu hardware real, desde Vista no tendrás acceso a dicho puerto COM.
    Coméntanos si lo consigues.
    Un saludo

    ResponderEliminar
  7. Muchas gracias por la repuesta!!

    Igualmente te comento que eso fue lo primero que hice, y no funcionó, la pregunta que me surge ahora es entonces si VirtualBox virtualiza el controlador del puerto serie o si tan solo usa el del host, ya que si lo pruebo en una maquina con xp anda perfecto, pero de esta manera no carga el micro.

    Hay alguna manera de que el huésped utilice su propio controlador?

    Saludos, y muchas gracias!!!

    ResponderEliminar
  8. VirtualBox solo virtualiza el HARDWARE del puerto serie del host, es decir "tima al Sistema Operativo que tengas dentro de la Máquina Virtual" haciendole creer que existe dicho hardware realmente.Es decir, que XP(o el SO que tengas dentro de la Máquina) se creerá que está hablando a un hardware que realmente no existe.XP usa sus propios drivers para realizar esta comunicación.VirtualBox solo se encarga de contestar a lo que XP pida como si de verdadero hardware se tratara.Si eliminaras los drivers que XP usa para comunicarse con los puerto serie, te quedarías sin poder usar puertos serie.Virtualbox no instala ningun driver dentro de la Maquina Virtual solo recrea por software un hardware inexistente. Imagina a VirtualBox como si fuera un Hardware,ya que eso es lo único que XP(desde dentro de la máquina virtual) ve.
    Estas "recreaciones por software" de un Hardware inexistente son complejas, y es muy posible que no perfectas al 100%, por ello puede ser que hayas topado con un bug de Vbox.
    Posibles soluciones:

    1)Existen las denominadas "GuestAdditions" de VirtualBox, que mejoran el comportamiento del XP dentro de una máquina virtual.Si no las tienes instaladas,instalalas por si éstas resuelven el problema.Si las tienes instaladas,desinstálalas, por si te están dando problemas. Las GuestAdditions sí que instalan drivers muy específicos dentro de la máquina virtual.

    2)Tienes la opcion de hacer uso del foro de Vbox, donde supongo te comentarán los mismos pasos que te he indicado.

    3)O puedes descargar una máquina virtual que es bastante fiable: Vmware Server(freeware). Por cierto Server en sus versiones 1.X.X no uses las 2.X.X ni muerto ;) Recomendación de tester ;).

    Si encuentras con la "tecla" comentanos que ya nos tienes intrigados ;)

    ResponderEliminar
  9. Para que Virtual Box tome el puerto fisico de un anfitrion Windows hay que entrar a
    Habilitar el COM1
    Como Dispositivo anfitrion
    En Ruta colocar \\.\COM1

    En el linux Guest instaldo en el virtual box
    configurar el minicom
    Direccionado al puerto /dev/ttyS0
    Con la velocidad y demas protocolos que exija el dispositivo que este conectado al puerto fisico del Anfitrion
    en mi caso una bascula me exiguio 9600,7,N,1 Control Software si, Control hardware no
    y listo arrancar el minicom
    me recibe P
    y me retorna el peso de la bascula

    ResponderEliminar