2010-02-25 17 views
6

kernel de Linux está escrito para compilar con gcc y usa muchos gcc-hacks pequeños y feos. ¿Qué compiladores pueden compilar kernel de Linux excepto gcc?compilando kernel de Linux con no-gcc

El que puede, es el compilador Intel. ¿Qué versión mínima de esto se necesita para compilar kernel?

También había un compilador Tiny C, pero solo pudo compilar una versión reducida y especialmente editada del kernel.

¿Hay otros compiladores capaces de construir kernel?

+0

Duplicado: http://stackoverflow.com/questions/689327/is-it-possible-to-compile-linux-kernel-with-something-other-than-gcc – dmckee

+0

Mi primera pregunta sería ..."¿Por qué gcc no es una opción?" No estoy diciendo que no deberías estar tratando de hacer lo que estás haciendo, de hecho es grandioso ver complacer la curiosidad. Pero te estás zambulliendo en un grupo de tiburones armados con láseres, por lo que la mayoría de nosotros querría saber por qué. –

+1

@Tim Post, quiero saber qué problemas hay en la compilación de kernel de Linux con compiladores no gcc. Trabajo con un compilador experimental y debo mejorar su compatibilidad con las extensiones de gnu, necesarias para compilar el kernel de Linux. Los parches de intel (linuxdna) son muy interesantes para mí. – osgx

Respuesta

2

Hay un proceso en curso para confirmar parches LLVMLinux en kernel de vainilla (2013-2014).

El proyecto LLVMLinux es un proyecto de The Linux Foundation: http://llvm.linuxfoundation.org/ para permitir que el núcleo vainilla se construya con LLVM. Muchos parches son preparados por Behan Webster, quien es el líder del proyecto LLVMLinux.

No es el artículo LWN sobre el proyecto a partir de mayo 2013 https://lwn.net/Articles/549203/ "LFCS: El proyecto LLVMLinux"

Estado actual de proyecto LLVMLinux se realiza un seguimiento en la página http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

cosas (básicamente gcc-ismos) ya eliminados de kernel: * Expicit Registra Variables (no-C99) * VLAIS (no C99-compatible indocumentado característica GCC "arrays de longitud variable en estructuras") como struct S { int array[N];} o incluso struct S { int array[N]; int array_usb_gadget[M]; } donde N y M son no constante argumento de la función * Funciones anidadas (característica de Ada portada en C por los desarrolladores de GCC/Gnat; no se permite en C99) * Algunos gcc magic/gas como segmentos especiales o macro

cosas por hacer: * Uso de __builtin_constant_p orden interna para poner en práctica la magia miedo como BUILD_BUG_ON(!__builtin_constant_p(offset));

Las buenas noticias sobre LLVMLinux son que después de sus parches kernel no solo se puede construir con LLVM + clang, sino que también es más fácil de compilar con otros compiladores no GCC, porque el proyecto mata mucho no al código C99 como VLAIS, creado por el autor del gadget usb, por los hackers netfilter y por el subsistema crypto piratas informáticos; también las funciones anidadas son asesinadas.

0

En resumen, no se puede, porque el código del núcleo se escribió para aprovechar la semántica del compilador de gcc ... y entre el kernel y el código compilado, la relación es muy fuerte, es decir, se debe compilar con gcc ... Dado que gcc usa archivos de objetos 'ELF' (formato de enlace incrustado), el kernel debe construirse utilizando el formato de código de objeto. A menos que pueda hackearlo para que funcione con otro compilador, puede compilarse pero puede no funcionar, ya que los compiladores de Windows producen código PE, podría haber resultados inesperados, ¡lo que significa que el kernel podría no arrancar del todo!

+0

son muchos los compiladores de sistema operativo además de Windows. Hay compiladores elf en muchos unixes, también hay muchos compiladores comerciales para Linux (especialmente para plataformas integradas). Muchos compiladores funcionan con ELF, y ALGUNOS de ellos admiten una parte de las extensiones de gcc. – osgx

+0

Llamé 2 compiladores, que realmente fueron capaces de compilar el kernel en algún momento del pasado: Intel CC y Tiny CC. Quiero escuchar aquí el estado actual del soporte de compilación del kernel de Linux. P. ej. ¿Puede el "compilador Sun Pro" construir el kernel? – osgx

+0

Hay muchos compiladores que pueden producir código de objeto ELF; esto es simplemente incorrecto Esta no es la razón por la cual se requiere GCC. –

3

Una información outdatet: tienes que parchear el kernel para compilar utilizando la CC Intel Download Linux kernel patch for Intel® Compiler

Véase también Is it possible to compile Linux kernel with something other than gcc para más enlaces e información

Uno de los más recientes fuentes: http://forums.fedoraforum.org/showthread.php?p=1328718

+0

La pregunta 689327 está un poco desactualizada también (casi un año). ¿Hay alguna información nueva o incluso una lista de controladores no-gcc para kernel? – osgx

+0

Y quiero saber cualquier compilador que no sea gcc, icc, tinycc, que sea capaz de generar núcleos. – osgx

+0

llvm con clang es capaz de construir un kernel de Linux desde esta temporada – osgx

Cuestiones relacionadas