Pregunta

Estoy interesado en la compilación de un kernel de Linux para un BRAZO de destino en un x86 host.Hay algunas buenas prácticas recomiendan?Cual es el mejor cross-compile suite en tu opinión?Han colocado una costumbre cross-compile medio ambiente?Si sí, ¿qué consejos tienes?Es una buena idea?

¿Fue útil?

Solución

Hay dos enfoques que he usado para las herramientas ARM / Linux. Lo más fácil es descargar una cadena de herramientas preconstruida directamente.
Pro : simplemente funciona y puede continuar con la parte interesante de su proyecto
Con : Estás atrapado con la versión de gcc / binutils / libc que eligieron

Si lo posterior le importa, consulte crosstool-ng . Este proyecto es una herramienta de configuración similar a la aplicación de configuración del kernel de Linux. Establezca qué versiones de gcc, binutils, libc (GNU o uCLibc), subprocesos y kernel de Linux para compilar y crosstool-ng hace el resto (es decir, descarga las bolas de tar, configura las herramientas y las construye).
Pro : obtienes exactamente lo que seleccionaste durante la configuración
Con : obtienes exactamente lo que seleccionaste durante la configuración

significa que usted asume toda la responsabilidad por la elección del compilador / binutil / libc y sus características / defectos / errores asociados. Además, como se menciona en los comentarios, hay algunos & Quot; pain & Quot; participan en la selección de las versiones de binutils, biblioteca C, etc., ya que no todas las combinaciones necesariamente funcionan juntas o incluso se compilan.

Un enfoque híbrido podría ser comenzar con las herramientas preconstruidas y reemplazarlas más tarde con una solución personalizada mediante crosstool-ng si es necesario.

Actualización : la respuesta usó originalmente las herramientas CodeSourcery como Un ejemplo de una cadena de herramientas preconstruida. Las herramientas de CodeSourcery para ARM eran gratuitas para descargar de Mentor Graphics , pero ahora se denominan Sourcery CodeBench y deben comprarse en Mentor Graphics. Otras opciones ahora incluyen Linaro , así como herramientas específicas de distribución de Android, Ubuntu y otras.

Otros consejos

Utilizo la cadena de herramientas emdebian para compilar cosas para mis máquinas ARM que no están contentas de ser compiladas de forma nativa en los pequeños recursos disponibles (/ me mira al núcleo). El paquete principal es gcc-4.X-arm-linux-gnueabi (X = 1,2,3), y proporciona comandos gcc / cpp / ld / etc con sufijos apropiados. Agrego esto a mi sources.list:

deb http://www.emdebian.org/debian/ unstable main

Por supuesto, si no está utilizando Debian, esto probablemente no sea tan útil, pero por chicle funciona bien para mí.

He usado scratchbox mientras experimentaba con la creación de aplicaciones para maemo (Nokia N810), que usa un ARM procesador. Supuestamente, scratchbox no está restringido al desarrollo de maemo.

He usado crosstool en varios objetivos. Es genial siempre que quieras construir tu cadena de herramientas desde cero. Por supuesto, también hay varias cadenas de herramientas preconstruidas para armar, solo búscalas en Google, demasiadas para mencionarlas aquí.

1) En mi opinión, construir su propia cadena de herramientas funciona mejor. Terminas teniendo un control estricto sobre todo, además, si eres nuevo en Linux incrustado, es una GRAN experiencia de aprendizaje.

2) No vaya con una cadena de herramientas comercial. Incluso si no desea tomarse el tiempo para construir el suyo, existen alternativas gratuitas.

Si su empresa gastará el dinero, pídales que le compren un depurador jtag.
Le ahorrará toneladas de tiempo. y le permite aprender y avanzar fácilmente en el inicio del núcleo, etc. Recomiendo utilizar los productos Lauterbach jtag ... Funcionan con una tonelada de objetivos y el software es multiplataforma. Su apoyo también es excelente.

Si no puede obtener un depurador jtag y está trabajando en el kernel, use una VM para hacer eso, usermode linux, vmware..etc ... su código será depurado en x86 ... portándolo a su El objetivo del brazo será una historia diferente, pero es una forma más barata de solucionar algunos errores.

Si está portando un gestor de arranque, use uboot. Por supuesto, si está utilizando una plataforma de referencia, entonces probablemente sea mejor usar lo que proporcionan con el BSP.

Espero que eso ayude.

Buildroot es una herramienta con la que he tenido bastante buena suerte para construir una cadena de herramientas personalizada basada en uClibc rasguño. Es muy personalizable, y no excesivamente particular sobre qué distribución se está ejecutando.

Además, muchos de sus usuarios existentes (es decir, distribuciones de enrutadores integrados) también se dirigen a ARM.

Si usted está usando Gentoo, para conseguir una compilación cruzada toolchain es tan fácil como

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

donde ARCH es arm o armeb, El VENDEDOR es unknown o softfloat, OS es linux, y LIBC es gnu o uclibc.

Si lo que quieres es un compilador (y linker) para el núcleo, el LIBC es irrelevante, y usted puede utilizar -s1/--stage1 para informar a los crossdev que sólo necesita binutils y gcc.

Esto es lo que utiliza Eurotech para su Debian ARM distribución Notarás que no recomiendan usar un compilador cruzado si puedes evitarlo. Compilar en el propio destino tiende a ser una forma más confiable de obtener resultados que sabe que se ejecutarán.

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