Estaciones de trabajo en línea OnWorks Linux y Windows

Logotipo

Alojamiento gratuito en línea para estaciones de trabajo

<Anterior | Contenido | Siguiente>

5.2. Notas técnicas de la cadena de herramientas‌

Esta sección explica algunos de los motivos y detalles técnicos detrás del método de compilación general. No es esencial comprender todo de inmediato en esta sección. La mayor parte de esta información será más clara después de realizar una construcción real. Se puede hacer referencia a esta sección en cualquier momento durante el proceso.

imagen

El objetivo general del Capítulo 5 es producir un área temporal que contenga un conjunto de herramientas en buen estado que se pueda aislar del sistema anfitrión. Mediante el uso chroot, los comandos de los capítulos restantes estarán contenidos dentro de ese entorno, lo que garantiza una construcción limpia y sin problemas del sistema LFS de destino. El proceso de construcción ha sido diseñado para minimizar los riesgos para los nuevos lectores y brindar el mayor valor educativo al mismo tiempo.


Note

Antes de continuar, tenga en cuenta el nombre de la plataforma de trabajo, a menudo denominada triplete objetivo. Una forma sencilla de determinar el nombre del triplete objetivo es ejecutar el config.adivina script que viene con el código fuente de muchos paquetes. Desempaquete las fuentes de Binutils y ejecute el script: ./config.adivina y observe la salida. Por ejemplo, para un procesador Intel de 32 bits, la salida será i686-pc-linux-gnu. En un sistema de 64 bits será x86_64-pc-linux-gnu.

También tenga en cuenta el nombre del vinculador dinámico de la plataforma, a menudo denominado cargador dinámico (que no debe confundirse con el vinculador estándar ld que es parte de Binutils). El enlazador dinámico proporcionado por Glibc busca y carga las bibliotecas compartidas que necesita un programa, prepara el programa para su ejecución y luego lo ejecuta. El nombre del enlazador dinámico para una máquina Intel de 32 bits será ld-linux.so.2 (ld-linux-x86-64.so.2 para sistemas de 64 bits). Una forma segura de determinar el nombre del enlazador dinámico es inspeccionar un binario aleatorio del sistema host ejecutando: readelf -l | intérprete grep y tomando nota de la salida. La referencia autorizada que cubre todas las plataformas se encuentra en el shlib-versiones en la raíz del árbol de fuentes de Glibc.

Note

Antes de continuar, tenga en cuenta el nombre de la plataforma de trabajo, a menudo denominada triplete objetivo. Una forma sencilla de determinar el nombre del triplete objetivo es ejecutar el config.adivina script que viene con el código fuente de muchos paquetes. Desempaquete las fuentes de Binutils y ejecute el script: ./config.adivina y observe la salida. Por ejemplo, para un procesador Intel de 32 bits, la salida será i686-pc-linux-gnu. En un sistema de 64 bits será x86_64-pc-linux-gnu.

También tenga en cuenta el nombre del vinculador dinámico de la plataforma, a menudo denominado cargador dinámico (que no debe confundirse con el vinculador estándar ld que es parte de Binutils). El enlazador dinámico proporcionado por Glibc busca y carga las bibliotecas compartidas que necesita un programa, prepara el programa para su ejecución y luego lo ejecuta. El nombre del enlazador dinámico para una máquina Intel de 32 bits será ld-linux.so.2 (ld-linux-x86-64.so.2 para sistemas de 64 bits). Una forma segura de determinar el nombre del enlazador dinámico es inspeccionar un binario aleatorio del sistema host ejecutando: readelf -l | intérprete grep y tomando nota de la salida. La referencia autorizada que cubre todas las plataformas se encuentra en el shlib-versiones en la raíz del árbol de fuentes de Glibc.

Algunos puntos técnicos clave de cómo funciona el método de construcción del Capítulo 5:

• Ajustar ligeramente el nombre de la plataforma de trabajo, cambiando el triplete de destino de campo "proveedor" mediante el LFS_TGT variable, asegura que la primera compilación de Binutils y GCC produzca un cross-linker y cross-compiler compatible. En lugar de producir binarios para otra arquitectura, el reticulador y el compilador cruzado producirán binarios compatibles con el hardware actual.


• Las bibliotecas temporales se compilan de forma cruzada. Debido a que un compilador cruzado por su naturaleza no puede depender de nada de su sistema host, este método elimina la contaminación potencial del sistema de destino al disminuir la posibilidad de que los encabezados o bibliotecas del host se incorporen a las nuevas herramientas. La compilación cruzada también permite la posibilidad de construir bibliotecas de 32 y 64 bits en hardware con capacidad de 64 bits.

• La manipulación cuidadosa de la fuente GCC le dice al compilador qué enlazador dinámico de destino se utilizará.

Binutils se instala primero porque el configurar Las ejecuciones de GCC y Glibc realizan varias pruebas de funciones en el ensamblador y el enlazador para determinar qué funciones de software habilitar o deshabilitar. Esto es más importante de lo que uno podría imaginarse. Un GCC o Glibc configurado incorrectamente puede resultar en una cadena de herramientas sutilmente rota, donde el impacto de tal rotura podría no aparecer hasta cerca del final de la construcción de una distribución completa. Una falla en la suite de pruebas generalmente resaltará este error antes de que se realice demasiado trabajo adicional.

Binutils instala su ensamblador y enlazador en dos ubicaciones, / herramientas / papelera y / herramientas / $ LFS_TGT / bin. Las herramientas en un lugar están vinculadas con el otro. Una faceta importante del enlazador es su orden de búsqueda en la biblioteca. Se puede obtener información detallada de ld pasándole el --verboso bandera. Por ejemplo, un ld --verbose | BÚSQUEDA grep ilustrará las rutas de búsqueda actuales y su orden. Muestra qué archivos están vinculados por ld compilando un programa ficticio y pasando el --verboso cambie al enlazador. Por ejemplo, gcc dummy.c -Wl, - detallado 2> & 1

| grep exitoso mostrará todos los archivos abiertos con éxito durante la vinculación.

El siguiente paquete instalado es GCC. Un ejemplo de lo que se puede ver durante su corrida de configurar :


comprobando qué ensamblador usar ... / tools / i686-lfs-linux-gnu / bin / como comprobando qué enlazador usar ... / tools / i686-lfs-linux-gnu / bin / ld

comprobando qué ensamblador usar ... / tools / i686-lfs-linux-gnu / bin / como comprobando qué enlazador usar ... / tools / i686-lfs-linux-gnu / bin / ld

Esto es importante por las razones mencionadas anteriormente. También demuestra que el script de configuración de GCC no busca en los directorios PATH para encontrar qué herramientas usar. Sin embargo, durante el funcionamiento real de gcc en sí, no se utilizan necesariamente las mismas rutas de búsqueda. Para averiguar qué enlazador estándar gcc usará, ejecutará: gcc -print-prog-name = ld.

Se puede obtener información detallada de gcc pasándole el -v opción de línea de comando mientras se compila un programa ficticio. Por ejemplo, gcc -v tonto.c mostrará información detallada sobre el preprocesador, la compilación y las etapas de ensamblaje, incluyendo gccSe incluyen rutas de búsqueda y su orden.

A continuación, se instalan los encabezados de la API de Linux desinfectados. Estos permiten que la biblioteca C estándar (Glibc) interactúe con las características que proporcionará el kernel de Linux.

El siguiente paquete instalado es Glibc. Las consideraciones más importantes para construir Glibc son el compilador, las herramientas binarias y los encabezados del kernel. El compilador generalmente no es un problema ya que Glibc siempre usará el compilador relacionado con el --anfitrión parámetro pasado a su secuencia de comandos de configuración; por ejemplo, en nuestro caso, el compilador será i686-lfs-linux-gnu-gcc. Las herramientas binarias y los encabezados del kernel pueden ser un poco más complicados. Por lo tanto, no se arriesgue y utilice los conmutadores de configuración disponibles para aplicar las selecciones correctas. Después de la carrera de configurar, compruebe el contenido del config.hacer presentar en el glibc-construir directorio para todos los detalles importantes. Tenga en cuenta el uso de CC = "i686-lfs-gnu-gcc" para controlar qué herramientas binarias se utilizan y el uso de la -nostdinc y -sistema banderas para controlar la ruta de búsqueda de inclusión del compilador. Estos elementos destacan un aspecto importante del paquete Glibc: es muy autosuficiente en términos de su maquinaria de construcción y, por lo general, no depende de los valores predeterminados de la cadena de herramientas.

Durante la segunda pasada de Binutils, podemos utilizar el --con-lib-ruta configurar el interruptor para controlar ldruta de búsqueda de la biblioteca.

Para la segunda pasada de GCC, sus fuentes también deben modificarse para decirle a GCC que use el nuevo enlazador dinámico. Si no lo hace, los programas GCC tendrán el nombre del enlazador dinámico del sistema host. / lib directorio incrustado en ellos, lo que frustraría el objetivo de alejarse del host. A partir de este punto, la cadena de herramientas principal es autónoma y autohospedada. El resto de los paquetes del Capítulo 5 se basan en el nuevo Glibc en /instrumentos.


Al ingresar al entorno chroot en el Capítulo 6, el primer paquete importante que se instalará es Glibc, debido a su naturaleza autosuficiente mencionada anteriormente. Una vez que este Glibc esté instalado en / usr, realizaremos un cambio rápido de los valores predeterminados de la cadena de herramientas y luego procederemos a construir el resto del sistema LFS de destino.


Top OS Cloud Computing en OnWorks: