Uno: Introducción descubierto hace algún tiempo en tiempo de compilación del kernel no monta en rootfs. La misma opción de la raíz a la versión anterior de la imagen lata. Con el fin de resolver este problema. Estudiar un poco de rootfs proceso de montaje. Especial resume a continuación, espero que esta parte de los puntos de conocimiento amigos más confundido un poco de ayuda. Dos: rootfs especie en general, rootfs divididas en dos tipos: el virtual y el rootfs reales ahora rootfs tendencias del núcleo es más funciones en el espacio de usuario para completar. Con el fin de mantenerse delgada del núcleo. Una forma es por cada rootfs distribuciones de Linux fabricantes virtuales ampliamente utilizados. Una parte del trabajo inicial se puede colocar en la realización virtual de la rootfs. A continuación, cambie al sistema de archivos real en el proceso de desarrollo de rootfs virtuales. Hay varias versiones: initramfs: initramfs en la tecnología introducida en el kernel 2.5, de hecho, su significado es: un espejo unido a la cpio paquete kernel, cpio paquete que contiene un sistema de archivos pequeños, el núcleo comienza cuando cuando, el paquete kernel cpio desatado y liberado al sistema de archivos contenido en el mismo rootfs, una parte del código de inicialización del núcleo será colocado en el sistema de archivos, tal como se lleva a cabo un proceso de nivel de usuario. Tales beneficios obvios se simplifican código del núcleo de inicialización, y permite que el proceso de inicialización del núcleo más fácil de personalizar. Este rootfs de esta manera es incluir .cpio-initrd la imagen del núcleo de en: rootfs formato cpio
imagen-initrd: el formato tradicional de rootfs realizadas en estos dos sistema de archivos virtual, por favor refiérase a su propio otra información de tres: el montaje del sistema de archivos rootfs proceso de aquí que es diferente del análisis rootfs rootfs anteriormente. Esto se refiere al momento de la inicialización del sistema radicular. Que los /nodos. Es el sistema de archivos rootfs en su memoria. Antes de esta parte de la < < > análisis proceso de arranque Linux; > el sistema de archivos, y se ha analizado. Para la continuidad del conocimiento de repetir aquí. Start_kernel () y agrave; mnt_init (): void __init mnt_init (void)
{… … … … init_rootfs (); init_mount_tree ();} Init_rootfs código es el siguiente: init_rootfs int __init (void)
{err int; err = bdi_init (&ramfs_backing_dev_info);
Si (err) Mensaje de retorno; err = register_filesystem (&rootfs_fs_type), si (err) bdi_destroy (&ramfs_backing_dev_info ); return err;} esta función es muy simple. Se rootfs registrada .init_mount_tree sistema de archivos () código es el siguiente: init_mount_tree __init static void (void)
{struct vfsmount * mnt; struct mnt_namespace * ns; struct raíz ruta; mnt = do_kern_mount (" rootfs " , 0, " rootfs ", NULL);
Si (IS_ERR (mNT)) pánico (" no se puede crear rootfs ");
ns = kmalloc (sizeof (* ns ), GFP_KERNEL); if (ns) pánico ("! no se puede asignar espacio de nombres inicial ");
atomic_set (&ns- > cuentan, 1); INIT_LIST_HEAD (&ns- > lista); init_waitqueue_head (&ns- > encuesta); ns- > evento = 0; list_add (&mnt- > mnt_list, &ns- > lista);
ns- > root = mnt; mnt- > mnt_ns = ns; init_task.nsproxy- > mnt_ns = ns; get_mnt_ns (ns); root.mnt = ns- > raíz; root.dentry = ns- > raíz > mnt_root; set_fs_pwd (current- > fs, &raíz); set_fs_root (current- > fs, &raíz);} aquí, se monta el sistema de archivos rootfs. Por defecto es el punto de montaje y " /y " directorio raíz del proceso de conmutación;. Pasado y el actual directorio es y " /y ". Este es el origen del directorio raíz. Pero aquí, sólo inicializado. Tras la finalización de la carga y otro sistema de archivos específico, generalmente el directorio raíz de un sistema de archivos específico. Así que después de que el sistema se inicia con el comando mount es un soporte rootfs invisibles información Cuatro: Montar el directorio raíz del sistema de archivos virtual ha sido colgar, se puede montar el sistema de archivos en un start_kernel específica () y agrave; .. rest_init () y agrave; kernel_init (): static int __init kernel_init (void * no se utiliza)
{… … … … do_basic_setup (); if (! ramdisk_execute_command)
ramdisk_execute_command = " /init ";
Si (sys_access ((const char * __user) ramdisk_execute_command, 0) = 0) {
ramdisk_execute_command = NULL;
prepare_namespace ();} /** Ok, hemos completado el arranque inicial, y
* estamos esencialmente en funcionamiento deshacerse de la Red
* segmentos initmem y empezar las cosas de modo de usuario. ..
* /init_post (); return 0;} do_basic_setup () es una función crítica, todos los módulos en el kernel directamente traducida están hechos en que se inicia. El siguiente fragmento de código: do_basic_setup __init static void (void)
{/* Los conductores enviar eventos de conexión en caliente * /init_workqueues (); usermodehelper_init (); driver_init (); init_irq_proc (); do_initcalls ();} Do_initcalls ( ) para iniciar todas las funciones en la sección __initcall_start y __initcall_end y estáticamente compilado en los módulos del núcleo será colocado en la entrada de esta sección. función de inicialización asociada con el sistema de archivos raíz será referenciado por la rootfs_initcall (). Tomando nota de la siguiente función de inicialización: rootfs_initcall (populate_rootfs); Eso sería llamar populate_rootfs en tiempo de inicialización del sistema para inicializar. Código es el siguiente: populate_rootfs __init static int (void)
{char * err = unpack_to_rootfs (__ initramfs_start, __ initramfs_end - __initramfs_start, 0); si (err) pánico (err), si (initrd_start) {#ifdef CONFIG_BLK_DEV_RAM
int fd; printk (KERN_INFO " comprobar si la imagen es initramfs ... ");
err = unpack_to_rootfs ((char *) initrd_start, España
Con respecto a la estructura del circuito, ya sea una fuente de alimentación lineal, una fuente
Para los principiantes, el aprendizaje de los comandos de Linux no es tan simple. Muchos principiant
1. En STM32, hay cinco fuentes de reloj, HSI, HSE, LSI, LSE, PLL. 1, HSI es un reloj interno de al
¿Por qué debería haber prioridad de proceso? Esto no parece requerir demasiada explicación. Despué
Cómo borrar el antiguo kernel de Linux
La transmisión de datos en la capa de enlace de la pila de protocolos Linux
Cómo limitar el permiso de ejecución de la partición /tmp
Función de suspensión en Linux, función de fflush y problema de búfer
Varios fallos del sistema y soluciones
Cómo habilitar el relé dhcp para asignar IP
Análisis del controlador de teclado Linux
El shell de Linux implementa el servicio HTTP
Cómo borrar información SVN en el directorio
La herramienta tcpdump captura -linux
Hibernate usa la secuencia del oráculo para generar la clave primaria
Construyó un pequeño Dock en la barra de tareas de Windows 7
Consulte la máscara de subred IP del equipo y el método de puerta de enlace predeterminado en Win7
Discuta las últimas características de seguridad de las tres versiones principales de Win8
Microsoft respondió: Nunca obligue a los usuarios a actualizar Windows 10
¿Cómo se reduce el ícono del escritorio de win7? ¿Cómo se hace más pequeño el ícono del escritorio
¿Cómo configurar la contraseña del enrutador tplink en el sistema Win7?
WindowsServer2003 contacto completo (1)
El método de desbloqueo de la penetración del ratón calendario de vida