Linux directorio raíz del kernel Makefile comentario

  

## Makefile para linux. # Si no tiene '-mstring-insns' en su gcc (y nadie más que yo tiene: -) # elimínelos de las definiciones de CFLAGS. #

## 8086Assembler Compiler and Connector. -0 genera el programa objetivo 8086; -a genera código compatible con gas y gld part # AS86 = as -0 -a CC86 = cc -0LD86 = ld - 0

## GNUAssembler Compiler and Connector # AS = gasLD = gld

## GNU Connector gld Runtime Options # -s omite todos los símbolos en el archivo de salida Información # -x Eliminar todos los símbolos locales # -M Imprima un mapa de enlaces en un dispositivo de salida estándar (pantalla). # 连接 映: Un mapa de direcciones de memoria generado por el enlazador, que enumera La información de ubicación cargada en la memoria por el programa tiene la siguiente información: # Archivo de destino e información de símbolos asignados a la ubicación en la memoria # Cómo colocar el símbolo público # Todos los miembros del archivo incluidos en la conexión y los símbolos a los que hacen referencia #LDFLAGS = -s -x -M

## gcc es el compilador del programa GNU C. Para las secuencias de comandos similares a UNIX, #en la referencia al identificador definido, debe agregar símbolo $ y encierre el identificador entre paréntesis #CC = gcc

## opciones de GCC. # - Muro Imprima todos los mensajes de advertencia # -O Optimice el código # -fstrength-reduce Declaración de bucle de optimización #CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -fcombine-regs

## CPP es el preprocesador para gcc # -nostdinc -Iinclude No busque archivos en el directorio de archivos de encabezado estándar, # En su lugar, use el directorio especificado por la opción -I o busque el archivo de encabezado en el directorio actual #CPP = gcc -E -nostdinc -Iinclude

# # directorio del kernel, directorio mm, directorio de destino generado por el directorio fs Archivo # Para facilitar la referencia, utilícelos aquí para representar el identificador de ARCHIVES (archivo de almacenamiento) # ARCHIVES = kernel /kernel.o mm /mm.o fs /fs.o

## Generado desde lib /directory Archivo de biblioteca general #LIBS = lib /lib.a

## make sufijo implícito rule # Le indica a make que compile todos los archivos .c con el siguiente comando para generar .s assembler # ':' indica lo siguiente Es el comando de la regla # Regla: significa que gcc adopta la opción especificada por el CFLAGS anterior y solo usa el archivo de encabezado en el directorio de inclusión /, # se detiene (-S) sin ensamblar después de la compilación adecuada, generando e ingresando cada uno El archivo C corresponde al archivo de código en forma de lenguaje ensamblador. # Por defecto, el archivo ensamblador generado es el nombre del archivo C original menos .c seguido del sufijo .s. # -o indica que va seguido de la forma del archivo de salida. # donde $ *. s (o $ @) es la variable de destino automática, y $ < representa el primer requisito previo, aquí está el archivo que cumple la condición * .c. # .c.s: $ (CC) $ (CFLAGS) \\ -nostdinc -Iinclude -S -o $ *. s $ <

## Compile todos los archivos de ensamblador .s en archivos de objeto .o. El siguiente es el comando específico para lograr esta operación # Use el compilador de gas para compilar el ensamblador en un archivo de objeto .o. -c significa compilar o ensamblar solo, pero no conecta la operación # .so: $ (AS) -c -o $ *. o $ <

## Use gcc para compilar el lenguaje c en un archivo de objeto pero No conectado # .co: $ (CC) $ (CFLAGS) \\ -nostdinc -Iinclude -c -o $ *. O $ <

## todo significa crear el objetivo más alto conocido en el Makefile. Aquí está el archivo de imagen #todo: Imagen

## Descripción de la primera línea: El archivo de destino (archivo de imagen) se genera mediante los 3 elementos después del punto y coma. Las siguientes dos líneas son comandos ejecutados # Primera línea Indica que el arranque, los archivos del sistema se ensamblan en un archivo de imagen del kernel utilizando la utilidad de compilación en el directorio de herramientas. Imagen # La segunda línea del comando de sincronización de sysn obliga a los datos del bloque del búfer a escribir inmediatamente en el disco y actualizar el superbloque. Herramientas /buildtools /build boot /boot tools /system > Imagesync

#chmem - Modificar las herramientas de datos de la memoria del sistema /build: tools /build.c $ (CC) $ (CFLAGS) \\ -o tools /Build tools /build.cchmem +65000 tools /build

## Genere archivos head.o usando las reglas .so anteriores # boot /head.o: boot /head.s

## El último > System.map indica que gld necesita redirigir la imagen de conexión en el archivo System.map # tools /system: boot /head.o init /main.o \\ $ (ARCHIVES) $ (LIBS) $ (LD) $ (LDFLAGS) boot /head.o init /main.o \\ $ (ARCHIVES) \\ $ (LIBS) \\ -o tools /system > System.map

## Kernel target module kernel.o # kernel /kernel.o: (cd kernel; make)

## Gestión del kernel Módulo mm.o # mm /mm.o: (cd mm; make)

## Módulo de destino del sistema de archivos fs.o # fs /fs.o: (cd fs; make)

## Función de biblioteca lib.a # lib /lib.a: (cd lib; make)

## Agregue una línea en la apertura del programa boot.s para la información de longitud del archivo del sistema # Primero generada con " SYSSIZE = La longitud real del archivo " una línea de información en el archivo tmp.s, y luego agrega el archivo boot.s después de él. # Obtenga la longitud del sistema: # Use el comando ls para mostrar una larga lista de archivos del sistema # Use el comando grep para obtener la información del campo del número de byte del archivo en la lista, y guárdelo en el comando #cut del archivo temporal tmp.s para cortar La cadena #tr se usa para eliminar el retorno de carro # al final de la línea (longitud real + 15) /16 para obtener la información de longitud representada por 'sección', 1 sección = 16 bytes # con 8086 conjuntos y configuración de par de conectores. El archivo se compila para generar el archivo de instalación # -s indica que la información del símbolo en el archivo de destino se debe buscar # boot /boot: boot /boot.s tools /system (echo -n " SYSSIZE = ("; ls -l tools /system |  Sistema de grep \\ |  Cortar -c25-31 |  Tr '\\ 012' ''; echo " + 15) /16 > tmp.scat boot /boot.s > > tmp.s $ (AS86) -o boot /boot.o tmp.srm - f tmp.s $ (LD86) -s -o boot /boot boot /boot.o

## Al ejecutar " make clean ", se ejecutará el siguiente comando para eliminar todos los archivos generados por la conexión compilada # " rm " es el comando de eliminación de archivos, la opción -f significa ignorar el archivo que no existe, y no muestra la información de eliminación # (cd mm; make clean) para ingresar al directorio mm /, ejecutar la regla de limpieza en el directorio Makefile Limpiar: rm -f Sistema de Imágenes.map tmp_make boot /boot corerm -f init /*. O boot /*. O tools /system tools /build (cd mm; make clean) (cd fs; make clean) (cd kernel; Make clean) (cd lib; make clean)

## Esta regla primero ejecuta la regla de limpieza anterior, luego comprime el directorio linux /para generar el archivo comprimido backup.Z. # " cd ... " significa volver al directorio de nivel superior (padre) de linux /# " tar cf - linux " indica que el programa de archivo tar se ejecuta en el directorio linux /, y -cf indica que se debe crear un nuevo archivo de archivo # "  Comprimir - " indica que la ejecución del programa tar está canalizada ('| ') se pasa a la compresión del programa de compresión, y la salida # del programa comprimido se guarda como copia de seguridad. El comando de sincronización del archivo # sysn obliga a los datos del bloque del búfer a escribir inmediatamente en el disco y actualizar el superbloque #backup: clean (cd ... |  Compress16 - > backup.Z) sync

## Esta regla se usa para las dependencias de cada archivo. Estas dependencias se crean para determinar si es necesario reconstruir un objeto de destino. Por ejemplo, cuando se ha cambiado el encabezado de un archivo, compile todos los archivos * .c asociados con el archivo de encabezado a través de las dependencias generadas. # El método específico es el siguiente: # Use el programa de edición de cadenas sed para procesar el Makefile (aquí, es él mismo), #output para eliminar todas las líneas después de la línea de " ### Dependencias " en el Makefile y generar el archivo temporal tmp_make # Luego, ejecute la operación del preprocesador gcc en cada archivo C en el directorio init /(en realidad solo un archivo C main.c). El indicador -M le dice al preprocesador que emita reglas que describan la relevancia de cada archivo objeto, y estas reglas son coherentes con make. Sintaxis # Para cada archivo de origen, el preprocesador genera una regla de creación cuyo resultado es el nombre del archivo de destino del archivo de origen correspondiente más sus dependencias: una lista de todos los archivos de encabezado contenidos en el archivo de origen # " $$ i "realmente significa $ ($ i), " $ i" es el valor de la variable de shell anterior # y luego agrega el resultado de preprocesamiento al archivo temporal tmp_make, y luego copia el archivo temporal en un nuevo makefile # Dep: sed '/\\ ##### Dependencias /q' < Makefile > tmp_make (para i en init /*. C; do echo -n " init /"; $ (CPP) -M $$ i; hecho) > > tmp_makecp tmp_make Makefile ( Cd fs; make dep) (kernel cd; make dep) (cd mm; make dep)

### Dependencias: init /main.o: init /main.c include /unistd.h include /sys /stat.h \\ include /sys /types.h include /sys /times.h include /sys /utsname.h \\ include /utime.h include /time.h include /linux /tty.h include /termios.h \\ Incluya /linux /sched.h incluya /linux /head.h incluya /linux /fs.h \\ include /linux /mm.h incluya /asm /system.h include /asm /io.h include /stddef.h \\ include /stdarg.h include /fcntl.h

Copyright © Conocimiento de Windows All Rights Reserved