Hay varias formas de montar rootfs cuando se inicia Linux.

  

Ha habido muchas preguntas sobre el proceso de montaje del sistema de archivos raíz cuando Linux se inicia. Hoy en día, se encontró información útil en el área de Shuimu Essence, extraída de la siguiente manera:

1. Cuando Linux se inicia, después de una serie de inicializaciones, debe montar el sistema de archivos raíz para prepararse para la última ejecución del proceso de inicio. Hay varias formas de montar el sistema de archivos raíz:

1) El sistema de archivos ya existe en el disco duro ( O un dispositivo similar) en una partición, el kernel se monta directamente de acuerdo con los parámetros de la línea de comando (root = /dev /xxx). Aquí hay un problema, en el caso de que el sistema de archivos raíz en sí no exista, ¿cómo encuentra el kernel el dispositivo correspondiente de acuerdo con /dev /xxx? Nota: el modo de montaje del sistema de archivos raíz y otros sistemas de archivos es diferente. El núcleo obtiene los números de dispositivo maestro y esclavo del dispositivo al analizar directamente el nombre del dispositivo y luego accede al controlador de dispositivo correspondiente. Así que en init /main.c hay una larga cadena de root_dev_names (como hda, hdab, sda, sdb, nfs, ram, mtdblock … …), a través de los cuales puede obtener el número de dispositivo según el nombre del dispositivo. Tenga en cuenta que el conjunto de parámetros de arranque en el cargador de arranque o kernel (root = /dev /xxx) es solo un nombre de código. ¡El archivo del dispositivo no existe necesariamente en el sistema de archivos raíz real!

2) Cargue el sistema de archivos raíz desde un dispositivo más lento, como una unidad de disquete. Si el kernel admite ramdisk, cuando se monta el sistema de archivos raíz, el kernel determina que debe montarse desde el disquete (fdx) (root = /dev /fd0) ), copiará automáticamente la imagen del sistema de archivos al ramdisk, generalmente correspondiente al dispositivo ram0, y luego montará el sistema de archivos raíz en ram0. Desde el código fuente, si el kernel no admite ramdisk al compilar, y el parámetro de inicio es root = /dev /fd0, el sistema se montará directamente en el disquete, excepto que la velocidad es lenta, teóricamente posible (no intentado, no sé ¿No es esto?)

3) Use initrd para montar el sistema de archivos raíz en el momento del arranque. Preste atención a los dos conceptos de ramdisk y initrd. De hecho, ramdisk es solo un dispositivo de bloque implementado en ram, similar al funcionamiento del disco duro, pero con una velocidad de lectura y escritura más rápida, se puede usar en cualquier momento cuando el sistema está en ejecución, no solo Se puede decir que Initrd (disco RAM inicializado del cargador de arranque) es un mecanismo utilizado en el proceso de inicio, el proceso de implementación específico también utiliza la tecnología ramdisk. Justo antes de cargar Linux, el gestor de arranque puede cargar una imagen del sistema de archivos raíz relativamente pequeña en una ubicación específica en la memoria, y llamar a esta memoria initrd (aquí está la memoria ocupada por initrd, no por ramdisk, preste atención a la diferencia) ), luego el cargador de arranque le indica al kernel la dirección de inicio y el tamaño del initrd al pasar los argumentos (también puede compilar estos parámetros en el kernel), y puede usar temporalmente el initrd para montar el sistema de archivos raíz durante la fase de arranque. El propósito original de initrd es dividir el inicio del kernel en dos fases: mantener el código de inicio básico mínimo en el kernel, y luego colocar el soporte para varios dispositivos de hardware en el initrd como un módulo, para que Los módulos necesarios se pueden cargar desde el sistema de archivos raíz donde se monta initrd durante el inicio. Una de las ventajas es que puede admitir de manera flexible hardware diferente modificando el contenido de initrd mientras mantiene el kernel sin cambios. Al final del proceso de arranque, el sistema de archivos raíz se puede volver a montar en otros dispositivos, pero se puede volver a montar (este es el caso de muchos sistemas integrados). El proceso de implementación específico de initrd es el siguiente: el gestor de arranque carga la imagen del sistema de archivos raíz en la ubicación especificada de la memoria y pasa los parámetros relevantes al kernel. Cuando se inicia el núcleo, el contenido de initrd se copia al ramdisk (ram0) y se utiliza la memoria ocupada por el initrd. Lanzado, monte el sistema de archivos raíz en ram0. Como puede verse en este proceso, el kernel necesita soporte tanto para ramdisk como para initrd (esta necesidad está programada en el kernel y no se puede usar como un módulo).

2. Un método de implementación del sistema de archivos raíz del sistema incorporado: para que el kernel y el sistema de archivos raíz se almacenen en el sistema flash, generalmente se puede usar el mecanismo del initrd iniciado por linux. El proceso específico ha sido relativamente claro. Otro punto es pasar root = /dev /ram0 en los parámetros de inicio, de modo que el sistema de archivos raíz montado por initrd ya no se cambie, porque el dispositivo real en este momento es ram0. También hay un parámetro de dirección de inicio del initrd como una dirección virtual, que debe corresponder a la dirección física utilizada en el cargador de arranque.

Copyright © Conocimiento de Windows All Rights Reserved