2010-09-08 10 views
5

Estoy haciendo una investigación para una empresa como pasantía. Tenía alguna pregunta sobre el uso de Mono, la implementación multiplataforma de la plataforma .Net. Mi empresa diseña hardware y software.Uso de mono en Linux integrado para hardware

Mi conocimiento sobre el uso de linux integrado es muy limitado. Mi empresa en la que realizo mis prácticas es realmente .NET. Pero los nuevos desarrollos de mono, que se preguntan si pueden apuntar a Linux para proyectos más pequeños, también evitan el alto costo de licencia para las personas para las que diseñan el software y el hardware.

Ya examiné lo que mono puede hacer (y todavía no puede hacer). Ahora llego a la pregunta incrustada. Estoy un poco perdido en la historia sobre cómo se construye un Linux embebido.

Vi algunas historias en las que solo tomaron algunas bibliotecas linux estándar para hacer que el Linux embebido en el hardware. También vi que existen distribuciones especiales de Linux como uClinux (también conocido como μClinux). Entonces, ¿cuál es la diferencia o es lo mismo? ¿Cómo se ve el proceso normalmente cuando quiero utilizar Linux embebido en una misión de destino?

OK, que la parte mono, así que básicamente quiero poder ejecutar C# en linux integrado. Aquí en su mayoría usan uclinux, ¿puedo usar mono para esto? Miré algunas especificaciones y no tienen la Unidad de administración de memoria (MMU).

SO básicamente me preocupa que no hay MMU. ¿Cómo reaccionará el recolector de basura?

espero que no le doy una sobrecarga de preguntas,

Saludos, y les agradezco ya para leerlo,

Benjamin

Respuesta

5

El recolector de basura no depende de una MMU, aunque puede ser más eficiente si hay una.

Actualmente lo aprovechamos para generar excepciones de referencia nulas sin comprobaciones: en uclinux deberá habilitar las comprobaciones explícitas (el código ya está allí, solo tiene que estar habilitado). Otras personas informaron que usaron mono on uclinux, aunque es probable que se necesiten algunos ajustes en las fuentes aquí y allá, ya que nunca lo probamos en esa plataforma (por supuesto, estoy hablando de uclinux en una arquitectura de CPU que ya admitimos, como ARM, usted no especificó).

En cuanto a otros comentarios, AOT y mkbundle son en gran medida irrelevantes para lo que necesita. Lo que realmente desea es reducir la huella mono para que se adapte a lo que permite su dispositivo; consulte http://www.mono-project.com/Small_footprint para obtener más información.

Si yo tomo la decisión, siempre elegiría un ARM regular Linux sobre uclinux para ejecutar software complejo como mono o cualquier programa que necesite ejecutar en mono.

+1

Benjamin

+0

Este es el problema real que tuve, no encontré personas que realmente lo intentaran, traté de buscar aquí, pero no encontré a nadie, ¿alguna vez vieron esos informes? – Benjamin

+1

Estaba en IRC, IIRC. – lupus

2

Si los dispositivos no tienen una MMU, quizás desee utilizar el código abierto .NET Micro Framework de Microsoft. Es mucho más limitado que .NET/Mono, y es un intérprete, no un JIT, pero puede ejecutarse en mucho hardware más limitado.

+0

Sería una solución, pero no es una solución para mi pregunta, ya que lo quieren en Linux – Benjamin

2

Mono puede ser tan limitado como desee. Si estás usando un dispositivo que no tiene MMU, buscaría en Ahead of Time compilation.

mkbundle también pueden funcionar, pero no estoy seguro de que pueda funcionar sin una MMU. Dicho esto, si está usando AOT, primero usará mkbundle para incorporar todas las dependencias.

+1

Ninguno de estos funcionará si Mono no se ejecuta normalmente. Todo lo que AOT elimina es la necesidad de JIT: aún necesitas el tiempo de ejecución Mono para GC, IO, metadatos, etc. Y todo lo que hace mkbundle es integrar Mono y tu aplicación en un único ejecutable. –

1

Si su empresa desea apuntar a los tableros Linux integrados a través de MONO, y todo lo que necesita es transferir alguna aplicación que ya se ejecuta en el equipo de escritorio de Windows, entonces probablemente tenga muy pocos problemas. Pero si desea hablar con algunos IO, I2C, SPI, 1-Wire y otros periféricos, tendrá un problema para acceder a ellos a través de MONO y probablemente tendrá que hacer algún traductor (probablemente escrito en GCC) que será un puerta de enlace entre el hardware real y su aplicación MONO.

Cuestiones relacionadas