Tuesday 6 December 2016

Ramdisk Download Binary Option

Linux Ramdisk mini-HOWTO por Van Emery Introducción ¿Qué es un disco RAM? Un disco RAM es una parte de la RAM que se está utilizando como si se tratara de una unidad de disco. Los discos RAM tienen tamaños fijos y actúan como particiones de disco normales. El tiempo de acceso es mucho más rápido para un disco RAM que para un disco físico real. Sin embargo, los datos almacenados en un disco RAM se pierden cuando el sistema se apaga o se apaga. Los discos RAM pueden ser un gran lugar para almacenar datos temporales. La versión 2.4 del kernel de Linux incorpora soporte para discos ramdisks. Ramdisks son útiles para una serie de cosas, incluyendo: Trabajar con los datos no cifrados de documentos cifrados Servir ciertos tipos de contenido web Montaje Sistemas de archivos Loopback (como distribuciones de ejecución de disquete / CD) ¿Por qué escribí este documento porque necesitaba Para configurar un ramdisk de 16 MB para ver y crear documentos cifrados. No quería que los documentos sin cifrar se escribieran en ningún soporte físico de mi estación de trabajo. También me pareció increíble que podría crear fácilmente un disco virtual en la RAM que es más grande que mi primer disco duro, un disco Winchester de 20 MB. En ese momento, ese disco era tan grande que ni siquiera pensé en llenarlo, y nunca lo hice. Este documento debería llevarlo paso a paso a través del proceso de creación y uso de discos RAM. Suposiciones / Configuración Yo estaba usando Red Hat 9 para esta prueba, pero debería funcionar con otras distribuciones GNU / Linux que ejecutan kernels 2.4.x. También estoy asumiendo que la distribución que está utilizando ya tiene soporte ramdisk compilado en el kernel. Mi máquina de prueba era un Pentium 4 y tenía 256 MB de RAM. La versión exacta del kernel que usé fue: 2.4.20-20.9 Paso 1: echa un vistazo a lo que ya ha sido creado por tu sistema Red Hat crea 16 ramdisks de forma predeterminada, aunque no estén activos ni utilicen RAM. Enumera los dispositivos ram0 - ram 19, pero sólo ram0 - ram15 se pueden utilizar de forma predeterminada. Para comprobar estos dispositivos de bloque, utilice el siguiente comando: Ahora, pase a través de la salida dmesg para averiguar el tamaño de los discos ramdisks: Como puede ver, el tamaño predeterminado del disco RAM es de 4 MB. Quiero un ramdisk de 16 MB, así que el siguiente paso será configurar Linux para usar un tamaño más grande de disco durante el arranque. Paso 2: Aumentar el tamaño del disco RAM El tamaño del disco se controla mediante una opción de línea de comandos que se pasa al kernel durante el arranque. Puesto que GRUB es el cargador de arranque predeterminado para Red Hat 9, modificaré /etc/grub. conf con la nueva opción del kernel. La opción del kernel para el tamaño de ramdisk es: ramdisksizexxxxx. Donde xxxxx es el tamaño expresado en bloques de 1024 bytes. Esto es lo que añadiré a /etc/grub. conf para configurar los ramdisks de 16 MB: Una vez que guarde el archivo, necesitará reiniciar su sistema. Paso 3: Formatear el disco ramdisk No hay necesidad de formatear el disco ramdisk como un sistema de archivos de diario, así que simplemente usaremos el omnipresente sistema de archivos ext2. Sólo quiero usar un ramdisk, por lo que sólo formatear / dev / ram0: La opción - m 0 evita que mke2fs reserve espacio en el sistema de archivos para el usuario root, que es el comportamiento predeterminado. Quiero que todo el espacio de ramdisk esté disponible para un usuario normal para trabajar con archivos cifrados. Paso 4: Cree un punto de montaje y monte el disco de memoria Ahora que ha formateado el disco ramdisk, debe crear un punto de montaje para él. A continuación, puede montar su disco ramdisk y utilizarlo. Utilizaremos el directorio / mnt / rd para esta operación. Ahora compruebe el nuevo montaje de ramdisk: Usted puede incluso tomar una mirada detallada en el nuevo ramdisk con el comando de tune2fs: En mi caso, necesito el furgoneta del usuario poder leer y escribir en el ramdisk, así que debo cambiar la propiedad y Permisos del directorio / mnt / rd: La propiedad y los permisos en el directorio / directorio del sistema de archivos ramdisk deben adaptarse a sus necesidades particulares. Paso 5: Utilizar el ramdisk Ahora que se ha creado, puede copiar, mover, eliminar, editar y listar archivos en el disco ramificado exactamente como si estuvieran en un partiton de disco físico. Este es un gran lugar para ver archivos descifrados GPG o OpenSSL, así como un buen lugar para crear archivos que se cifrarán. Después de que su anfitrión se apaga, todos los rastros de archivos creados en el disco duro se han ido. Para desmontar el disco ramd, simplemente ingrese lo siguiente: Nota: Si vuelve a montar el disco ram, sus datos seguirán estando allí. Una vez que se ha asignado memoria al ramdisk, se marca para que el kernel no intente reutilizar la memoria más tarde. Por lo tanto, no puede recuperar la RAM después de que haya terminado de usar el disco ram. Por esta razón, usted querrá tener cuidado de no asignar más memoria al disco RAM que es absolutamente necesario. En mi caso, estoy asignando la automatización de la creación de Ramdisk Si necesita crear y montar un ramdisk cada vez que arranca su sistema, puede automatizar el proceso agregando algunos comandos a su script de inicio /etc/rc. local. Aquí están las líneas que agregué: Conclusión Ahora has visto cómo configurar y usar un ramdisk en tu sistema GNU / Linux. ¿Cuál es un disco de RAM inicial? El disco de RAM inicial (initrd) es un sistema de archivos raíz inicial que se monta antes de cuando el sistema de archivos raíz real está disponible . El initrd está enlazado al kernel y cargado como parte del procedimiento de arranque del kernel. El núcleo entonces monta este initrd como parte del proceso de arranque en dos etapas para cargar los módulos para hacer que los sistemas de archivos reales estén disponibles y llegar al sistema de archivos raíz real. El initrd contiene un conjunto mínimo de directorios y ejecutables para lograr esto, como la herramienta insmod para instalar los módulos del kernel en el kernel. En el caso de los sistemas Linux de escritorio o servidor, el initrd es un sistema de archivos transitorio. Su vida útil es corta, sirviendo sólo como un puente hacia el sistema de archivos raíz real. En los sistemas embebidos sin almacenamiento mutable, el initrd es el sistema de archivos raíz permanente. Este artículo explora ambos contextos. Anatomía del initrd La imagen initrd contiene los ejecutables y archivos de sistema necesarios para soportar el arranque de segunda etapa de un sistema Linux. Dependiendo de la versión de Linux que esté ejecutando, el método para crear el disco RAM inicial puede variar. Antes de Fedora Core 3, el initrd se construye utilizando el dispositivo de bucle. El dispositivo de bucle es un controlador de dispositivo que le permite montar un archivo como un dispositivo de bloque y luego interpretar el sistema de archivos que representa. El dispositivo de bucle puede no estar presente en su kernel, pero puede habilitarlo a través de la herramienta de configuración de kernels (make menuconfig) seleccionando Device Drivers gt Block Dispositivos gt Loopback Device Support. Puede inspeccionar el dispositivo de bucle como sigue (su nombre de archivo initrd variará): Listado 1. Inspección del initrd (anterior a FC3) Ahora puede inspeccionar el subdirectorio / mnt / initrd para el contenido del initrd. Tenga en cuenta que incluso si su archivo de imagen initrd no termina con el sufijo. gz, es un archivo comprimido, y puede agregar el sufijo. gz para armarlo. Comenzando con Fedora Core 3, la imagen initrd predeterminada es un archivo comprimido de cpio. En lugar de montar el archivo como una imagen comprimida utilizando el dispositivo de bucle, puede utilizar un archivo cpio. Para inspeccionar el contenido de un archivo cpio, utilice los siguientes comandos: Listado 2. Inspección del initrd (FC3 y posterior) El resultado es un pequeño sistema de archivos raíz, como se muestra en el Listado 3. El pequeño, pero necesario, conjunto de aplicaciones Presente en el directorio ./bin, incluyendo nash (no una shell, un intérprete de scripts), insmod para cargar módulos del kernel, y lvm (herramientas lógicas de gestor de volúmenes). Listado 3. Estructura de directorios predeterminada de initrd de Linux De interés en el Listado 3 es el archivo de inicio en la raíz. Este archivo, al igual que el proceso de arranque Linux tradicional, se invoca cuando se descomprime la imagen initrd en el disco RAM. Bueno explorar esto más adelante en el artículo. Herramientas para crear un initrd Con el comando cpio, puede manipular archivos cpio. Cpio es también un formato de archivo que es simplemente una concatenación de archivos con encabezados. El formato de archivo cpio permite archivos ASCII y binarios. Para la portabilidad, utilice ASCII. Para un tamaño de archivo reducido, utilice la versión binaria. Permite ahora volver al principio para comprender formalmente cómo se construye la imagen initrd en primer lugar. Para un sistema Linux tradicional, la imagen initrd se crea durante el proceso de creación de Linux. Numerosas herramientas, como mkinitrd. Puede ser usado para construir automáticamente un initrd con las bibliotecas y módulos necesarios para puentear al sistema de archivos raíz real. La utilidad mkinitrd es en realidad un script de shell, por lo que puede ver exactamente cómo logra su resultado. Theres también la utilidad YAIRD (Yet Another Mkinitrd), que permite la personalización de todos los aspectos de la construcción initrd. Construcción manual de un disco RAM inicial personalizado Debido a que no hay unidad de disco duro en muchos sistemas embebidos basados ​​en Linux, el initrd también sirve como sistema de archivos raíz permanente. El Listado 4 muestra cómo crear una imagen initrd. Im usando un escritorio estándar de Linux para que pueda seguir sin un objetivo incrustado. Aparte de la compilación cruzada, los conceptos (como se aplican a la construcción initrd) son los mismos para un objetivo incrustado. Listado 4. Utilidad (mkird) para crear un initrd personalizado Una distribución de Linux initrd Un interesante proyecto de código abierto que fue diseñado para ser una distribución de Linux que encaja dentro de un initrd es Minimax. Su tamaño de 32 MB y utiliza BusyBox y uClibc por su tamaño ultra pequeño. A pesar de su pequeño tamaño, es un kernel 2.6 de Linux con una gran variedad de herramientas útiles. Para crear un initrd, comience creando un archivo vacío, usando / dev / zero (una secuencia de ceros) como entrada escribiendo en el archivo ramdisk. img. El archivo resultante tiene 4 MB de tamaño (4000 bloques 1K). A continuación, utilice el comando mke2fs para crear un sistema de archivos ext2 (segundo extendido) utilizando el archivo vacío. Ahora que este archivo es un sistema de archivos ext2, monte el archivo en / mnt / initrd utilizando el dispositivo de bucle. En el punto de montaje, ahora tiene un directorio que representa un sistema de archivos ext2 que puede rellenar para su initrd. Gran parte del resto del script proporciona esta funcionalidad. El siguiente paso es crear los subdirectorios necesarios que forman su sistema de archivos raíz: / bin, / sys, / dev y / proc. Sólo se necesita un puñado (por ejemplo, no hay bibliotecas presentes), pero contienen bastante funcionalidad. Alternativa al sistema de archivos ext2 Mientras ext2 es un formato de sistema de archivos Linux común, existen alternativas que pueden reducir el tamaño de la imagen initrd y los sistemas de archivos montados resultantes. Los ejemplos incluyen romfs (sistema de archivos ROM), cramfs (sistema de archivos de ROM comprimido) y squashfs (sistema de archivos de alta lectura altamente comprimido). Si necesita transitoriamente escribir datos en el sistema de archivos, ext2 funciona bien. Finalmente, e2compr es una extensión del controlador de sistema de archivos ext2 que soporta la compresión en línea. Para que su sistema de archivos raíz sea útil, utilice BusyBox. Esta utilidad es una sola imagen que contiene muchas utilidades individuales comúnmente encontradas en sistemas Linux (como ash, awk, sed, insmod, etc.). La ventaja de BusyBox es que embala muchas utilidades en una mientras que comparte sus elementos comunes, dando por resultado una imagen mucho más pequeña. Esto es ideal para sistemas embebidos. Copie la imagen BusyBox desde su directorio de origen en su raíz en el directorio / bin. A continuación, se crean varios enlaces simbólicos que apuntan a la utilidad BusyBox. BusyBox calcula qué utilidad se invocó y realiza esa funcionalidad. Un pequeño conjunto de vínculos se crean en este directorio para admitir su script init (con cada enlace de comando apuntando a BusyBox). El siguiente paso es la creación de un pequeño número de archivos de dispositivos especiales. Copiar éstos directamente de mi subdirectorio actual / dev, utilizando la opción - a (archivo) para conservar sus atributos. El penúltimo paso es generar el archivo linuxrc. Después de que el kernel monte el disco RAM, busca un archivo init para ejecutarlo. Si no se encuentra un archivo de inicio, el kernel invoca el archivo linuxrc como su secuencia de comandos de inicio. Haces la configuración básica del entorno en este archivo, como montar el sistema de archivos / proc. Además de / proc, también monto el sistema de archivos / sys y emite un mensaje a la consola. Finalmente, invoco ceniza (un clon de Bourne Shell) para poder interactuar con el sistema de archivos raíz. A continuación, el archivo linuxrc se ejecuta utilizando chmod. Finalmente, el sistema de archivos raíz está completo. Su desmontado y luego comprimido con gzip. El archivo resultante (ramdisk. img. gz) se copia en el subdirectorio / boot para poder cargarlo a través de GNU GRUB. Para construir el disco RAM inicial, simplemente invoca mkird. Y la imagen se crea automáticamente y se copia en / boot. Prueba del disco RAM inicial personalizado Soporte Initrd en el kernel Linux Para que el kernel Linux soporte el disco RAM inicial, el kernel debe ser compilado con las opciones CONFIGBLKDEVRAM y CONFIGBLKDEVINITRD. Su nueva imagen initrd está en / boot, así que el siguiente paso es probarla con su kernel predeterminado. Ahora puede reiniciar su sistema Linux. Cuando aparezca GRUB, presione la tecla C para habilitar la utilidad de línea de comandos dentro de GRUB. Ahora puede interactuar con GRUB para definir el kernel específico y la imagen initrd a cargar. El comando kernel le permite definir el archivo del kernel y el comando initrd le permite especificar el archivo de imagen initrd particular. Cuando se definen, utilice el comando boot para arrancar el kernel, como se muestra en el Listado 5. Listado 5. Inicializando manualmente el kernel y el initrd usando GRUB Después de que el kernel se inicie, comprueba si una imagen initrd está disponible (más sobre esto Posteriormente) y, a continuación, carga y lo monta como el sistema de archivos raíz. Puede ver el final de este arranque Linux en particular en el Listado 6. Cuando se inicia, el shell de cenizas está disponible para introducir comandos. En este ejemplo, exploro el sistema de archivos raíz e interrogo una entrada del sistema de archivos proc virtual. También demuestro que se puede escribir en el sistema de archivos tocando un archivo (creándolo así). Tenga en cuenta que el primer proceso creado es linuxrc (comúnmente init). Listado 6. Iniciando un kernel de Linux con su initrd simple Iniciando con un disco de RAM inicial Ahora que ha visto cómo construir y usar un disco de RAM inicial personalizado, esta sección explora cómo el kernel identifica y monta el initrd como su sistema de archivos raíz. Camino a través de algunas de las funciones principales en la cadena de arranque y explicar lo que está sucediendo. El cargador de arranque, como GRUB, identifica el kernel que se va a cargar y copia esta imagen del kernel y cualquier initrd asociado en la memoria. Puede encontrar gran parte de esta funcionalidad en el subdirectorio ./init en su directorio de origen del kernel de Linux. Después de que las imágenes del kernel y del initrd sean descomprimidas y copiadas en memoria, el kernel es invocado. Varias inicializaciones se realizan y, finalmente, se encuentra en init / main. c: init () (subdir / file: function). Esta función realiza una gran cantidad de inicialización del subsistema. Aquí se hace una llamada a init / domounts. c: preparenamespace (). Que se utiliza para preparar el espacio de nombres (montar el sistema de archivos dev, RAID, o md, dispositivos, y, finalmente, el initrd). La carga del initrd se realiza mediante una llamada a init / domountsinitrd. c: initrdload (). La función initrdload () llama a init / domountsrd. c: rdloadimage (). Que determina la imagen del disco RAM para cargar a través de una llamada a init / domountsrd. c: identifyramdiskimage (). Esta función comprueba el número mágico de la imagen para determinar si es un minux, etc2, romfs, cramfs o formato gzip. Al regresar a initrdloadimage. Se realiza una llamada a init / domountsrd: crdload (). Esta función asigna espacio para el disco RAM, calcula la comprobación de redundancia cíclica (CRC) y, a continuación, descomprime y carga la imagen del disco RAM en la memoria. En este punto, tiene la imagen initrd en un dispositivo de bloque adecuado para el montaje. Montar el dispositivo de bloque ahora como root comienza con una llamada a init / domounts. c: mountroot (). Se crea el dispositivo raíz y se realiza una llamada a init / domounts. c: mountblockroot (). Desde aquí se llama init / domounts. c: domountroot (), que llama a fs / namespace. c: sysmount () para montar realmente el sistema de archivos raíz y luego chdir a él. Aquí es donde se ve el mensaje familiar que se muestra en el Listado 6: VFS: raíz montada (sistema de archivos ext2). Finalmente, regresa a la función init y llama a init / main. c: runinitprocess. Esto resulta en una llamada a execve para iniciar el proceso init (en este caso / linuxrc). El linuxrc puede ser un ejecutable o un script (siempre y cuando el intérprete de guiones esté disponible para ello). La jerarquía de funciones llamada se muestra en el Listado 7. No todas las funciones que están involucradas en copiar y montar el disco RAM inicial se muestran aquí, pero esto le da una visión general del flujo general. Lista 7. Jerarquía de las funciones principales en la carga y el montaje de initrd Boot de arranque sin disco Al igual que los escenarios de arranque incorporados, no es necesario un disco local (disquete o CD-ROM) para arrancar un sistema de archivos raíz de núcleo y ramdisk. El protocolo de configuración de host dinámico (o DHCP) se puede utilizar para identificar los parámetros de red, como la dirección IP y la máscara de subred. El Protocolo Trivial de Transferencia de Archivos (o TFTP) se puede usar para transferir la imagen del kernel y la imagen ramdisk inicial al dispositivo local. Una vez transferido, el kernel de Linux puede ser arrancado y montado initrd, como se hace en un arranque de imagen local. Reducir su initrd Cuando está construyendo un sistema incrustado y desea que la imagen initrd más pequeña sea posible, hay algunos consejos a considerar. La primera es usar BusyBox (demostrado en este artículo). BusyBox toma varios megabytes de utilidades y los reduce a varios cientos de kilobytes. En este ejemplo, la imagen de BusyBox está enlazada estáticamente para que no se requieran bibliotecas. Sin embargo, si necesita la biblioteca C estándar (para sus binarios personalizados), hay otras opciones más allá de la glibc masiva. La primera biblioteca pequeña es uClibc, que es una versión minimizada de la biblioteca C estándar para sistemas con limitación de espacio. Otra biblioteca ideal para ambientes con limitaciones de espacio es la dietlib. Tenga en cuenta que tendrá que volver a compilar los archivos binarios que desee en su sistema incrustado utilizando estas bibliotecas, por lo que se requiere algún trabajo adicional (pero vale la pena). Resumen El disco RAM inicial fue creado originalmente para soportar el puente del kernel al sistema de archivos raíz último a través de un sistema de archivos raíz transitorio. El initrd también es útil como un sistema de archivos raíz no persistente montado en un disco RAM para sistemas Linux incorporados. Recursos descargablesFastboot Fastboot Fastboot es el protocolo utilizado para actualizar el sistema de archivos flash en dispositivos Android desde un host a través de USB. Permite el parpadeo de imágenes de partición no firmadas. Está deshabilitado en los dispositivos G1 de producción, ya que el soporte USB está deshabilitado en el gestor de arranque1. Esto puede cambiarse si obtiene root en el dispositivo. Vea también 2 requisitos previos de Fastboot Para poder utilizar fastboot, necesita ejecutar un ADP1 o el Bootloader de ingeniería en su G1. Si se está desarrollando en un host linux, puede que necesite ajustar UDEV para reconocer el teléfono en el modo de inicio rápido. Es posible que ya haya hecho esto para que el teléfono sea reconocido en Eclipse, pero necesita hacerlo de nuevo para la inicialización rápida, ya que Fastboot utiliza un ID de dispositivo diferente: 0bb4: 0c01. La señal de advertencia es que el fastboot dice lt que espera el dispositivo gt para siempre, incluso cuando usted tiene el mensaje de FASTBOOT en el teléfono si esto sucede, intente agregar el ID de dispositivo 0bb4: 0c01 a su configuración de UDEV para Android. Para Opensuse 11.1 o Fedora 16, el siguiente archivo de configuración, guardado en /etc/udev/rules. d/11-android. rules funciona: NOTA: cambie mylogname a su ID de inicio de sesión de Linux. También tenga en cuenta que el bit de ID del producto es opcional (probablemente es más fácil dejarlo fuera), y debe cambiar 0bb4 al ID del proveedor para su teléfono si HTC no lo fabrica (cuyo ID de proveedor es 0bb4). Puede encontrar la identificación del proveedor utilizando lsusb. Una alternativa a esto es simplemente ejecutar fastboot como root, usando sudo. Inicio del Fastboot En el G1: Para iniciar el fastboot, primero llegue al cargador de arranque: apague el teléfono y mantenga presionado el botón de la cámara mientras lo vuelve a encender. Verá una pantalla blanca con bugdroids en monopatín. Si acaba de ver la pantalla de cargador de arranque multicolor normal, debe tener el lado del dispositivo de arranque rápido funcionando como se indicó anteriormente. Enchufe su teléfono en el usb y si usted ve serial0 golpeó la llave trasera. Ahora debe ver el arranque rápido en la pantalla. En el Samsung Galaxy: apague el teléfono y luego presione los dos botones de llamada. Tenga en cuenta que el modo de inicio rápido continuará reiniciando el teléfono después de 30 segundos de inactividad. Fastboot Binary Para hacer uso de fastboot, también necesita el programa de fastboot compilado para su computadora host. Si ya ha creado Android, ya tendrá este archivo. Su ubicación debe ser: Si no se ha construido Fastboot, puede compilar la fuente de Android o probar DarkriftXs precompilado fastboot (compilado en kubuntu x86) Comandos de Fastboot Aquí están los comandos que se pueden ejecutar en su host después de arranque rápido se ha iniciado en un Dispositivo conectado mediante USB. Esta es una pasta directamente de los binarios fastboot --help comando: use: fastboot ltoptiongt ltcommandgt Forzando el fastboot a cargar en cada arranque Los desarrolladores que están creando nuevas imágenes para probar muy a menudo pueden eliminar sus imágenes de arranque y recuperación que forzarán al teléfono a Entre en el modo bootloader cada vez que arranque. Para solucionar esto, se reflash las imágenes de inicio y recuperación de nuevo permitiendo que el teléfono para arrancar normalmente. Más información La totalidad o la mayor parte de esta información se obtuvo del sitio Desconecta.


No comments:

Post a Comment