Windows CE, "accel_c", el catálogo y LMQMP

Sí, ya sé que el título es extraño, pero me ha hecho perder tres días completos como si nada… Pero comencemos por el principio.


A veces veo muertos… digoooo… a veces me tengo que pelear con el Windows CE para modificar nuestra plataforma para algún cliente. Lo cierto es que debería hacerlo la empresa propietaria de la placa, pero éste prefiere delegar en mi, seguro que para quitarse el muerto de encima.


Teóricamente la creación o modificación de una plataforma existente debería ser algo trivial, tan trivial como abrir el Platform Builder con el proyecto adecuado, quitar y poner cosas del catálogo, recompilar y listo. Al cliente se le distribuye el eboot.nb0 y el nk.bin.


Pero de la teoría a la práctica va un gran trecho. En general un cambio en algunos componentes significa que otros dejan de funcionar por dependencias incompatibles, y también en general dichas dependencias ni están todo lo claras que deberían, ni a veces existen.


En mi caso actual me han pedido un servidor ftp y uno web con asp y javascript, así como soporte para ATL y ASP. El asunto es teóricamente sencillo: ir añadiendo los componentes desde el catálogo, recompilar y listo.


Pues no. Tras una compilación aparentemente exitosa, el proceso «gwes.exe» se caía al arrancar, con lo que dejábamos de tener bucle de mensajes y sonido… Como esta compilación es sin pantalla, no disponemos de ella desde el principio, pero si la tuviéramos también la habríamos perdido.


Tras solucionar el tema del «gwes.exe» (un pequeño cambio en el driver dummy de vídeo de la placa, cosa de Cirrus Logic), resulta que ahora el CE no ve ni la tarjeta SD ni es capaz de conectarse al Visual Studio 2005SP1 para depurar… porque la placa no es capaz de cambiarse la IP y porque sigue habiendo algo mal.


Vale, lo de la SD ya me ha pasado antes: me falta incluir a mano en el «project.bib» una DLL que si no está el sistema no es capaz de verla y no encima no protesta…


Seguimos con lo nuestro. Ahora falta que el TCP/IP vuelva a funcionar, porque finalmente, tras añadir todo lo anterior, ni el servidor ftp ni el web funcionan, y menos aún la opción de conectar al Visual Studio 2005…


Y comienza el baile. Nada de lo que hago hace que funcione. Ni siquiera volviendo a la plataforma original: por algún motivo algo dentro del CE se ha ido al carajo. La solución en este caso siempre ha sido regenerar la plataforma desde cero, es decir, un clean total y volver a compilarlo todo. Nada, sigue fallando. La solución drástica: máquina virtual nueva y todo desde cero.


Ya empiezan a salir cosas, dependencias que faltan. Compilaciones que fallan. Todo ello debido a referencias que faltan. Es decir, ATL necesita MINGWES o GWES, pero no lo dice. MINGWES necesita MINGDI pero tampoco lo dice. Y así con unas cuantas dependencias, hasta que al final me quedo con tres funciones relativas a los aceleradores de teclados (es decir, el que funcionen los atajos de teclado como CTRL-C y que una aplicación pueda procesarlos a través de su bucle de mensajes, que no tiene mucho sentido en un dispositivo que no va a llevar ni teclado ni ratón ni monitor, pero bueno).


INTERLUDIO: Por todo ello deduzco que tanto el Platform Builder como la propia máquina virtual estaban corrompidas de algún modo; la cuestión pendiente es porqué una VM se ha corrompido de esa forma… Pero dejemos el tema y volvamos a lo nuestro:


La cuestión ahora consiste en que no encuentro esas dependencias de ninguna manera, pero hay truquitos, sacados de blogs de gente de Microsoft. Primero vamos a encontrar a qué componente del catálogo pertenecen esas funciones.


Nos vamos a C:WINCE500PRIVATEWINCEOSCOREOSCOREDLLcoredll.def y buscamos una de las funciones que faltan. El valor es COREDLL_ACCEL_C, es decir, «accel_c». Esa es la dependencia que tenemos que buscar.


Nos vamos a la MSDN y efectivamente, aquí esta. ¡Tachán! El componente se llama «Shell»… Añadimos la dependencia y… y… y… nones, seguimos teniendo el problema. Probamos varias shells: ninguna va, o más bien ninguna tiene dentro lo que la documentación dice que debe tener.


Pero uno, como es perro viejo, mira un poco, pone en marcha su sexto sentido y la lógica más abstrusa y añade el componente MINWMGR, que, evidentemente, tampoco funciona.


Hala, a buscar en los foros. No hay nada de nada. Alguien comenta con otro problema similar que se añada a CESYSGEN.BAT la variable de entorno COREDLL_COMPONENTS y se añada a mano el «accel_c». Que si quieres arroz Catalina.


Finalmente, la solución drástica: una búsqueda total en todo el árbol del Windows CE, pese a haber encontrado algo en la documentación pero que tampoco funciona; la documentación decía que para encontrar dependencias «extrañas» hay que ir al CESYSGEN.BAT del Sistema Operativo y buscar dicha dependencia y ver cuál es su padre: pues resulta que en ningún CESYSGEN.BAR está «accel_c», por lo que decido la búsqueda total por contenido de archivo.


Al final me aparece otro fichero BAT que sí la tiene: C:WINCE500PUBLICCEBASEOAKMISCwinceos.bat. Y, pese a la mala documentación, a los blogs mentirosos y a mucha gente que no tiene casi ni idea de lo que habla, el menda la ha encontrado, y tras mirarse con detalle las cosas, determina


¡que la dependencia está en MINWMGR!


Ya es el colmo. ¡Está ahí pero no compila!… ¿Más corrupción de ficheros? Pues sí, tras marcar «Clean before building» en las opciones del Platform Builder, la cosa compila bien…


Pero el proceso «gwes.exe» continúa petando, justo como al principio de todo.


Para evitar que el proceso «gwes.exe» explote, la solución correcta es añadir el driver de vídeo de la BSP completo, así que lo añado y ya no peta… pero sigo sin poder conectar con el VS2005SP1 y ahora tengo otros errores relativos a un teclado y un ratón PS/2 que no existen y que no pueden existir ya que la placa no tiene puertos para ello. Tras cambiar el driver completo por el dummy, ahora tengo errores sobre que no he definido ningún lenguaje por defecto… y tengo el English(US) definido…


Y llevo cuatro días con esto.


Y los que me quedan. Seguiremos informando, pero ya os podéis hacer una idea de la gente que está haciendo PDAs y aparatos similares con Windows CE… Y ahora que no me salga ningún fundamentalista linuxero diciendo que con Linux eso no pasa, os puedo asegurar que las aventuras bajo Linux son mucho, pero mucho peores…

6 comentarios sobre “Windows CE, "accel_c", el catálogo y LMQMP”

  1. Hola! he visto que andas liado con WCE.
    Te quería preguntar un par de cosas, porq estoy en una situación que me supera.
    Te comento. Ahora mismo estamos haciendo un mini-proyecto para la universidad en el que tenemos que hacer nuestra imagen de windows ce para una placa. Utilizamos una tarjeta cf como disco duro para arrancar la imagen, aqui es donde tenemos el problema.

    En un principio hemos generado la aplicación de arranque que se crea al ejecutar «CEPCBoot.144», que encontramos en «»%ProgramFiles%Windows CE PlatformBuilder6.00CEPBUtilities»»
    Al introducir la aplicación de arranque en la tarjeta junto con la imagen nk.bin no nos arranca la placa. Concretamente nos da el error de ERROR EN EL DISCO.

    Hestado mirando si en los archivos de arranaque esta el «eboot.nb0», pero no lo esta.
    La verdad es que sería de gran ayuda saber como lo generas o como cargas las imagenes.
    Gracias

  2. Hola.

    Yo lo hago todo desde una SD, que viene a ser lo mismo. Genero un eboot.nb0 que es el de la BSP del fabricante modificado por nosotros. Ese eboot.nb0 nos lanza el nk.bin que también está en la SD, y ya este lanza lo que queremos.

    Tu problema podría estar en muchos sitios. A veces si el nk.bin está muy fragmentado en la SD el eboot.nb0 es incapaz de arrancarlo y se cuelga, aunque lo que casi seguro es que te falte el driver de la CF dentro del nk.bin.

    Es decir, eboot.nb0 ha de tener el driver de la CF y de FAT16 para cargar en ram el nk.bin, una vez que éste está en RAM y comienza la ejecución, debe tener de nuevo el driver CF y de la FAT16 para que la vea y pueda seguir ejectuando sus cosas. En nuestro caso tenemos que añadir a mano en el project.bib la dll «sdmmc.dll» para que el CE sea capaz de ver la SD y seguir con sus tareas.

  3. Hola, yo estoy mas perdido que un pulpo en un garaje… XD. He leido mucho sobre wince 5.0 pero no soy capaz de sacar algo en claro, porque unos dicen que si otros que no y bla,bla,bla… y como veo que de esto sabes un hue.. y parte del otro pues aqui va mi pregunta. Tengo una radio 2 din que va con wince 5.0 y quisiera meterle un software de un diagnostico de coches (op-com) tengo los drives y no hay problema para instalarlos en xp/vista/win7 etc.. pero claro e aqui la cuestion… como leñe hago yo para arrancar este programa en wince 5.0, es imposible y miro para otro lado o ves algun apice de esperanza…. Gracias y perdona por el tocho!!

  4. Pues tienes que conseguir la versión para Windows CE de dicho programa. Además, tendrás que mirar el tipo de procesador del dispostivo CE (ARM, SuperH, x86…) y obtener la versión adecuada…

    Windows CE no lleva drivers. Todo viene integrado en la BSP (el firmware del aparato), y si le enchufas algo nuevo, tendrás que obtener también la nueva BSP con el soporte para el nuevo hardware añadido (que es algo parecido a lo que hice yo y que causó estas entradas en el blog).

    Para hacer eso necesitas, aparte del código fuente de la BSP, el Platform Buider 5, y con suerte podrás recompilar eso y generar la nueva BSP…

  5. Es decir que lo tengo muy mal para ejecutar un programa especifico en wince 5.0 , y yo que tenia esperanzas… muchas gracias por la informacion y un cordial saludo a todos.

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *