Ingeniería en InformáticaIngeniería en Informática Sistemas Operativos MBUM (MultiBootloader de...

48
Ingeniería en Informática Sistemas Operativos MBUM (MultiBootloader de la Universidad de La Matanza) Alvarez Matías 33.081.870 Equipo Barrett Guillermo 33.676.599 De Leguizamón Romina 28.053.350 Investigación Otero Andrea 28.350.661

Transcript of Ingeniería en InformáticaIngeniería en Informática Sistemas Operativos MBUM (MultiBootloader de...

  • Ingeniería en Informática

    Sistemas Operativos

    MBUM

    (MultiBootloader de la Universidad de La Matanza)

    Alvarez Matías

    33.081.870 Equipo Barrett Guillermo 33.676.599

    De Leguizamón Romina 28.053.350 Investigación Otero Andrea 28.350.661

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    2/48

    Índice

    TEMAS RELACIONADOS ...................................................................................................................................... 3

    OBJETIVOS ............................................................................................................................................................ 10

    DESARROLLO ....................................................................................................................................................... 10

    Instalación del MBUM ...................................................................................................................................... 10 Estructura de la partición del BUM .................................................................................................................. 11 Funciónamiento del MBUM .............................................................................................................................. 11

    Gestor de particiones ................................................................................................................................................................. 13 Restricciones .................................................................................................................................................... 14

    CONCLUSIONES.................................................................................................................................................... 14

    Pendientes: ....................................................................................................................................................... 14 Booteo directo de Linux. ........................................................................................................................................................... 14 Reconocimiento de varios discos.............................................................................................................................................. 15 Reconocer Windows sin que la partición este marcada como activa. ..................................................................................... 15 File system para la partición del BUM. .................................................................................................................................... 15 Booteo desde pendrive. ............................................................................................................................................................. 16

    APENDICE A .......................................................................................................................................................... 17

    Organización de archivos ................................................................................................................................. 17 Estructuras de datos utilizadas: ........................................................................................................................ 17

    stuCHS: ...................................................................................................................................................................................... 17 stuDiskAddressPacket ............................................................................................................................................................... 17 stuPartitionBootRecord ............................................................................................................................................................. 18 stuComando ............................................................................................................................................................................... 18

    Descripción del contenido de los subdirectorios del proyecto. .......................................................................... 18 ./bum ..................................................................................................................................................................................... 18 . /bum/bs_instalador ............................................................................................................................................................. 18 . /bum/include/multiboot ..................................................................................................................................................... 18 ./bum/mbr_hdd ..................................................................................................................................................................... 18 ./bum/pbr_hdd ...................................................................................................................................................................... 18 ./libInit16 .............................................................................................................................................................................. 18

    Variables, constantes y funciones definidas en algunos de los archivos intervinientes ....................................... 18 Directorio /bum/ ........................................................................................................................................................................ 18

    Archivo: bum.c .................................................................................................................................................................... 18 Archivo: bum.h .................................................................................................................................................................... 19 Archivo: config.c ................................................................................................................................................................. 19 Archivo: comandos.c ........................................................................................................................................................... 20 Archivo: consola.c ............................................................................................................................................................... 26

    Directorio / libInit16/ ................................................................................................................................................................ 27 Archivo: bios.c ..................................................................................................................................................................... 27 Archivo: consola.c ............................................................................................................................................................... 31 Archivo: floppy.c ................................................................................................................................................................. 37 Archivo: mem.c.................................................................................................................................................................... 39 Archivo: part.c ..................................................................................................................................................................... 40 Archivo: puertos.c ................................................................................................................................................................ 45 Archivo: string.c .................................................................................................................................................................. 45

    GLOSARIO.............................................................................................................................................................. 47

    BIBLIOGRAFÍA: .................................................................................................................................................... 48

    Internet ............................................................................................................................................................. 48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    3/48

    Temas Relacionados

    Master Boot Record

    De todos los sectores de una unidad de disco, el primero de la primera cabeza del primer cilindro

    tiene una gran importancia ya que es el sitio al que se dirige la BIOS cuando busca si existe en el

    sistema un dispositivo cargable. Sus 512 bytes contienen tres bloques con información sobre la

    arquitectura física y lógica del disco: el código maestro de carga, la tabla de particiones y la firma.

    Código maestro de carga: Si el disco es "bootable", los primeros 446 bytes del MBR (sector de arranque), están ocupados por un pequeño trozo de código denominado código maestro

    de carga MBC ("Master Boot Code") o cargador inicial (bootstrap loader), que es cargado

    por la BIOS para comenzar el proceso de carga. El bootstrap loader repasa la tabla maestra

    de particiones buscando una partición activa. En caso de encontrarla, busca su sector

    inicial, carga su código en memoria, y le transfiere el control. Dicho código es ya capaz de

    cargar y ejecutar cualquier otro programa situado en cualquier partición del disco. Que a

    su vez inicializará directamente el SO, o tal vez una utilidad conocida como gestor de

    arranque, que permite elegir entre distintas alternativas.

    Tabla de particiones: A continuación del MBC, se sitúa la tabla maestra de particiones MPT ("Master Partition Table"). Está constituida por cuatro trozos de 16 bytes (4 entradas) que contienen información sobre las particiones definidas en la unidad. Para que un disco

    "maestro" (cuyo MBR pueda ser accedido por el proceso de carga de la BIOS) sea

    "bootable", se precisa que alguna de las entradas de la tabla contenga un 80h en el bit de

    estado, señalando cual es partición activa

    Firma: Los dos últimos bytes del sector de arranque (MBR) contienen dos caracteres (55h, AAh). que son denominados firma del sector de carga ("Boot record signature")

    GracielaCross-Out

    GracielaReplacement Textbyte

    GracielaNoteAccepted set by Graciela

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    4/48

    Particiones

    La estructura lógica de segundo nivel que puede encontrarse en un disco físico es la partición

    primaria. En realidad, una partición no es más que un artificio por el que el sistema puede

    considerar dividida la unidad física en varias partes, que pueden incluso tener distinta estructura.

    De hecho, cada una de estas particiones puede albergar un sistema de archivos distinto. Por

    ejemplo, un sistema FAT de DOS/Windows y un sistema ext2 Linux. Además de otras ventajas,

    las particiones ofrecen la posibilidad de montar distintos sistemas operativos, lo que a su vez,

    permite al equipo adoptar "personalidades" distintas según el SO que se cargue en cada momento.

    En cada unidad se puede tener una partición primaria y una extendida. La partición primaria

    consume 4 posibilidades del disco, por su parte la extendida consume otras 4 posibilidades.

    Estructuras:

    La parte superior corresponde al MBR ("Master Boot Record"). A continuación siguen tres

    particiones primarias que son de estructura muy sencilla; solo tienen sector de carga ("Boot

    sector") y área de datos. El área de datos tiene composición análoga en todos los casos; comienza

    con las tablas FAT; sigue con la estructura del directorio raíz y a continuación los datos

    propiamente dichos [6].

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    5/48

    En principio una partición extendida xDp no debería ser distinta de las demás particiones primarias

    de la unidad. Sin embargo, se le incluyeron algunas estructuras adicionales para poder subdividir

    su espacio en partes más pequeñas denominadas volúmenes lógicos VL. Lo mismo que la

    información de la pDp y de cualquier otra partición primaria que se hubiese definido en la unidad,

    la información básica sobre la xDp está en la entrada correspondiente de la MPT del sector de

    arranque. A su vez, el primer sector de la xDp es de funciónalidad y estructura semejantes a las

    del bloque de carga MBR, aunque en este caso se denomina EBR ("Extended Boot Record"). La

    imagen anterior muestra la organización interna de una partición extendida que contiene tres

    volúmenes lógicos. La tabla de particiones del EBR se denomina tabla de partición extendida xPT

    ("Extended Partition table"), y tiene la misma disposición interna que la tabla MPT. Aunque la

    xPT solo utilizan las dos primeras entradas. La figura muestra el detalle de la estructura interna de

    una partición extendida con tres volúmenes lógicos.

    GracielaNotequitar acento

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    6/48

    La primera entrada de la xPT señala a su propio sector de carga "Boot sector". La segunda señala

    al EBR del siguiente volumen lógico (si no existiera ningún otro, contiene ceros). Las 2 entradas

    restantes no se utilizan (contienen ceros). El segundo volumen lógico tiene una estructura similar

    al primero. La segunda entrada de su xPT señala a la EBR del siguiente y así sucesivamente.

    Puede verse que la estructura de los VLs es una cadena de enlaces que comienza en la MPT, y que

    cada volumen lógico contiene su propio EBR.

    Cuando se declara una xDp, inicialmente el espacio está vacío, pero puede habilitarse

    construyendo en su interior una o varias particiones lógicas ("Logical partitions"), también

    denominadas volúmenes lógicos VL. Posteriormente los sistemas DOS/Windows las referencian

    con una letra, de la C a la Z, como si fuesen discos distintos. Las letras A y B se reservan para

    designar los sistemas de fichero de los disquetes (que no admiten particiones). Durante el proceso

    de carga, el SO realiza una exploración ordenada de las unidades de disco y sus volúmenes

    lógicos. Los sistemas DOS/Windows asignan sucesivamente una letra a cada volumen

    encontrado. Por esta razón, en una xDp pueden declararse hasta 24 volúmenes lógicos si no se está

    usando una pDp, o 23 en caso contrario. El factor limitador es la letra que se asigna a cada VL

    (empiezan por C y terminan con la Z). Por supuesto que salvo circunstancias excepcionales, es

    muy raro que se definan tal número de VLs en una partición extendida DOS.

    GRUB

    El GRand Unified Bootloader (GRUB) es un gestor de arranque múltiple que se usa comúnmente

    para iniciar dos o más sistemas operativos instalados.

    Mientras los gestores de arranque convencionales tienen una tabla de bloques en el disco duro,

    GRUB es capaz de examinar el sistema de archivos. Actualmente, soporta los siguientes sistemas

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    7/48

    de archivos:

    ext2/ext3 usado por los sistemas UNIX y su variante GNU/Linux

    ext4 en versiones de pruebas.

    ReiserFS.

    XFS de SGI (aunque puede provocar problemas).

    UFS.

    VFAT, como FAT16 y FAT32 que son usados por Windows 9.x

    NTFS usado por los sistemas Windows NT (a partir de Windows NT v.3.51).

    JFS de IBM.

    HFS de Apple Inc.

    Otros ejemplos de cargadores multi arranque son LILO y SYSLINUX.

    La configuración del grub está basada en tres archivos que se describen a continuación:

    /boot/grub/menú.lst

    Este archivo contiene toda la información acerca de las particiones o de los sistemas operativos

    que se pueden arrancar con GRUB. Sin esta información, el control del sistema no se puede pasar

    al sistema operativo.

    /boot/grub/device.map

    Este archivo traduce los nombre de los dispositivos desde GRUB y la notación del BIOS a

    nombres de dispositivo s de Linux.

    /etc/grub.conf

    Este archivo contiene los parámetros y las opciones que necesita GRUB para instalar el gestor de

    arranque de forma correcta.

    GRUB 2 está basado en un proyecto llamado PUPA cuya meta era desarrollar un GRUB más

    “limpio”, seguro, robusto y potente así como más portable y con soporte para diferentes idiomas.

    Sin embargo Grub2 es un paquete nuevo que permite:

    Permitir scripting, condicionales, bucles, variables y funciones.

    Interfaz gráfica.

    Extensibilidad mediante carga dinámica de módulos.

    Portabilidad a distintas arquitecturas.

    Internacionalización. Soporte para caracteres fuera del conjunto ASCII, mensajes

    localizados, etc.

    Mejor administración de memoria.

    Marco de trabajo modular, jerárquico y orientado a objetos para sistemas de archivo, archivos, dispositivos, unidades, terminales, comandos, tablas de partición y cargadores de

    SO.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    8/48

    Instalación multiplataforma.

    Modo de rescate para casos en los cuales es imposible iniciar.

    Corregir errores de diseño de la versión anterior de GRUB, que no pueden resolverse debido a compatibilidad inversa, por ejemplo el numerado de las particiones

    PROCESO DE INICIO DE GRUB 1 [01]

    1. El BIOS busca un dispositivo de inicio, como el disco duro, y lee el MBR del disco (Master Boot Record, los primeros 512 bytes del disco duro, mira últimos 2 bytes para

    verificar si el MBR), para pasarle el control.

    2. El MBR contiene la fase 1 de GRUB. Como el MBR es pequeño (512 bytes), la fase 1 sólo carga la siguiente fase del GRUB, ubicado físicamente en cualquier parte del disco duro.

    La fase 1 puede cargar ya sea la fase 1.5 o directamente la etapa 2.

    3. La fase 1.5 GRUB está ubicada en los siguientes 30 kilobytes del disco duro ( “DOS compact Space” inmediatamente después de la MBR). La fase 1.5 carga la fase 2.

    4. La fase 2 GRUB recibe el control, y presenta al usuario el menú de inicio de GRUB. Etapa contiene la mayor parte de la lógica de GRUB. Se carga el archivo menu.lst y ejecuta las

    instrucciones, por lo general proporciona un menú para el usuario.

    5. GRUB carga el kernel seleccionado por el usuario en la memoria y le pasa el control.

    PROCESO DE INICIO DE GRUB 2 [03]

    La estructura de GRUB ha cambiado un poco con la versión 2. En lugar de la etapa 1, etapa de 1,5

    y la fase 2 tiene una colección de módulos que se pueden combinar de diferentes maneras. Para

    reflejar la funciónalidad original de las etapas del GRUB como se describe anteriormente, se tiene

    por ejemplo:

    stage 1 = boot.img

    stage 1.5 = diskboot.img+kernel.img+pc.mod+ext2.mod (la imagen principal)

    stage 2 = normal.mod+_chain.mod

    El proceso de arranque del grub2 es más flexible y sería el siguiente:

    1. El BIOS lee el MBR de un disco (mira últimos 2 bytes para verificar si MBR).

    2. Inicia la ejecución de código del bootloader (boot.img).

    GRUB

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    9/48

    3. Esto carga el primer sector de la imagen principal (diskboot.img), cuya ubicación se guarda en un lugar determinado en el boot.img en el momento de la instalación de GRUB y por lo

    general apunta a la imagen principal situada en el “DOS compact Space” inmediatamente

    después de la MBR. Diskboot.img a su vez carga y ejecuta el resto de la imagen principal.

    4. Estos módulos de la imagen principal buscan y cargan el normal.mod

    El normal.mod carga el archivo grub.cfg y ejecuta las sentencias, por lo general proporciona un

    menú para el usuario, etc.

    Diferencias entre GRUB y GRUB 2:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    10/48

    Objetivos

    SODIUM es un sistema operativo didáctico desarrollado por alumnos de la Materia. Hoy en día la

    instalación del mismo está en desarrollo y quizás muy pronta a concluirse e implementarse, por lo

    tanto es posible que SODIUM este conviviendo con otros sistemas operativos como Windows y

    Linux.

    Para los alumnos que necesiten o deseen ver su funciónamiento, esto puede ser un problema ya que

    los multibootloaders disponibles no lo reconocerían en el momento del booteo.

    Si bien ya existía un multibootloader desarrollado por alumnos de la materia que reconozca

    SODIUM, éste necesitaba algunas modificaciones y mejoras en su funciónamiento.

    Es por ello que como propuestas nos fijamos el objetivo de mejorarlo y agregarle funciónalidades

    como una instalación independiente del SODIUM, además encontrar la posibilidad de volver al

    estado anterior a su instalación, es decir, realizar un Backup del MBR.

    Dada la naturaleza de SODIUM de mejora continua nos propusimos desarrollar la mayor parte de

    lo implementado en lenguaje C, lo cual facilita futuras modificaciones.

    Además se implementaron estructuras y funciones para manejo de disco que pueden ser

    reutilizadas para otras aplicaciones dentro de SODIUM.

    Desarrollo

    El BUM es un bootloader que permite ejecutarse en modo Live y bootear los sistemas operativos

    encontrados en el disco primario (sólo es capaz de ver el disco marcado como primario). En ésta

    condición, permite instalarse de forma residente en la PC; pero para esto requiere crear una

    partición dedicada para él (ya se primaria como lógica). El propio BUM provee la funciónalidad

    necesaria para crear y borrar particiones.

    Instalación del MBUM

    Cuando se corre el BUM en modo LIVE este permite, entre otras funciones, la instalación del

    BUM de forma definitiva en el sistema.

    A continuación se resume el proceso de instalación:

    1. Al iniciar tanto en modo LIVE con desde disco el BUM recorre el disco y genera la tabla de particiones del sistema. El comando instalar recorre la tabla de particiones y las lista

    dando la opción al usuario de elegir en que partición desea instalar el BUM.

    2. Pregunta si se desea generar un Backup del MBR original del sistema en la partición elegida por el usuario. De ser así, lo copia en el segundo sector.

    3. Lee el archivo BUM.bin (funciónalidades y estructuras del BUM) del diskette y lo copia en la partición a partir del cuarto sector de la partición.

    4. Copia el archivo PBR.bin del diskette al primer sector de la partición.

    5. Lee el archivo BUMMBR.bin del diskette (este contiene el MBR del BUM) y lo copia en el primer sector del disco. Antes de copiar el MBR le pega la tabla de particiones, la cual se

    obtiene del MBR original.

    6. Por último cambia el tipo del partición a 0x12 (partición tipo BUM)

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    11/48

    Estructura de la partición del BUM

    Como resultado de la instalación del BUM, la partición queda con una configuración como se

    muestra en la figura.

    A continuación se enumeran los archivos/sectores arriba mostrados:

    PBR BUM: contiene el código capaz de cargar el BUM.bin

    Backup MBR original: contiene una copia del MBR al momento de la instalación.

    Sector reservado para el archivo de configuración: de crearse un archivo de configuración, aquí se ubicara. Este archivo permite fijar el tiempo de la cuenta regresiva para el arranque,

    cambiar el sistema operativo por defecto y asignar etiquetas a los SOs.

    BUM.bin: segunda etapa del BUM. Es el BUM propiamente dicho. Al cedérsele la ejecución, se encarga de todas las funciones (buscar los SOs ejecutables, crear/borrar

    particiones, ejecutar algún sistema operativo, provee la consola, etc)

    Se deduce que esta partición no posee un sistema de archivos popular y estándar como FAT; queda

    para una futura mejora implementarlo.

    Funciónamiento del MBUM

    El BUM es un cargador de 2 etapas y media. El BIOS carga el MBR del disco (que corresponde al

    MBR copiado durante la instalación) en la posición 0x000:0x7C00 y le cede la ejecución. Éste

    recorre el disco en busca de la etapa 2 del BUM: busca un partición primaria o lógica del tipo

    BUM (0x12). Al encontrarla, carga su primer sector (PBR BUM) en 0x000:0x7C00 y le cede la

    ejecución. Éste repite la búsqueda anterior para encontrarse a sí mismo, carga el BUM.bin (que se

    encuentra 3 sectores más adelante) en la dirección 0x8000:0x0000 y posicióna la pila al final de

    este segmento (que crece hacia abajo). Luego le cede la ejecución.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    12/48

    Se eliminaron las referencias explicitas a memoria ganando mayor flexibilidad y aprovechamiento

    de la misma.

    La segunda etapa recorre el disco (MPT y EBRs de haber particiones extendidas) y crea la tabla de

    particiones del sistema y la tabla de particiones ejecutables (ambas definidas de un tamaño

    máximo en un define). Una vez creadas estas 2 tablas, busca en el archivo de configuración el

    sistema operativo que debe cargar por defecto. De no existir un archivo de configuración, toma la

    primera partición ejecutable, espera el tiempo indicado el archivo de configuración o el que tiene

    por defecto y ejecuta la partición indicada. Si no encuentra ninguna partición ejecutable, pasa a la

    consola.

    En ésta versión del BUM, el criterio utilizado para decidir si una partición es ejecutable se indica a

    continuación (esto se realiza consultando el byte de tipo):

    Partición tipo SODIUM.

    Partición tipo BUM que tenga un backup del MBR (se fija la firma). Esto se realiza para permitir la ejecución del MBR anterior. IMPORTANTE: esto se realiza cediéndole la

    ejecución tal como está, con la MPT vieja, por lo que pueden aparecer inconsistencias en

    caso de haber formateado el disto después de realizar el backup.

    Partición tipo Windows marcada como activa (para entender por qué se pide que esté marcada como activa, ver sección Pendientes:Reconocer Windows sin que la partición esté

    marcada como activa)

    Como se ve, el BUM no permite que una partición tipo Linux sea ejecutable. Para entender el

    motivo, dirigirse a la sección Pendientes:Booteo directo de Linux. Sin embargo, se permite bootear

    Linux (o cualquier otro sistema operativo que haya estado instalado y booteando en la maquina al

    momento de la instalación del BUM, a través del backup del MBR).

    MBR

    Partición Primaria

    Partición Extendida

    Partición MBUM

    Partición Primaria

    Extendida

    Extendida Extendida MBUM

    AA55

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    13/48

    Gestor de particiones

    Finalmente, mencionar que la consola provee una serie de facilidades, entre las que se encuentra

    un gestor de particiones que permite crear y borrar particiones primerias y lógicas. La explicación

    de su funciónamiento merecería un capítulo aparte. Confiamos que el código se encuentra lo

    suficientemente documentado (a través de doxygen) y autodocumentado como para permitir su

    comprensión. Pidiendo disculpas por el capítulo que vamos a deber y con el objetivo de

    alivianarlas un poco, comentamos rápidamente algunos detalles que creemos que pueden ayudar a

    su comprensión:

    Para su funciónamiento, copia la tabla de particiones creada para manipularla sin riesgo de afectar la actividad normal de BUM.

    El disco se puede ver como una tira de sectores. Las particiones son un invento de los programas/SOs. Ellos las crean y sólo ellos las entienden; por lo tanto, lo único que se hace

    es seguir la forma que implementó DOS originalmente (por cuestiones de compatibilidad)

    con todos sus aciertos y errores. La manipulación de particiones (crear, borrar, mover, etc)

    sólo consiste en escribir el número adecuado en el sector correcto siguiendo la estructura

    apropiada.

    El puntero a sí mismo del EBR está dado de forma relativa al comienzo de la partición lógica (o sea, el sector que nos encontramos leyendo). En cambio, el puntero a la partición

    siguiente se encuentra dado en forma relativa al comienzo de la partición extendida.

    A continuación de cada EBR se repite la región de compatibilidad de DOS que se observa a continuación del MBR (no se usa ningún sector hasta la siguiente pista).

    Para crear una partición, debe existir un espacio libre en el disco. Para su cálculo se buscan sectores libres (que superen un mínimo especificado) entre el fin y el inicio de particiones

    consecutivas y entre el fin e inicio del disco. Esto se realiza teniendo en cuenta las

    siguientes consideraciones:

    o Tanto las entradas de la MPT las particiones lógicas no tienen que estar en orden (por ejemplo, la primer entrada de la MPT puede apuntar a una partición posterior a

    la segunda así como una partición lógica puede encontrarse seguida de otra que se

    comienza en un sector menor). Es por esto que la tabla de particiones se ordena por

    sector de comienzo (ignorando las particiones extendidas).

    o El primer/último sector disponible de la primer/última partición lógica es el primer/último sector de la partición extendida en donde se encuentra.

    o El primer/último sector disponible de la primer/última partición primaria o extendida es el primer/último sector del disco rígido. Para ejemplificar este punto y

    el anterior, se incluye el siguiente gráfico.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    14/48

    o Los últimos 5104 sectores del disco no se utilizaron ya que DOS no los utiliza (y no reconoce bien las particiones creadas y se tienen en cuenta). Con el GParted se

    observó una limitación semejante, pero de menor cantidad de sectores.

    No se incluyó la posibilidad de redimensionar por el peligro que supone cambiar el tamaño de la partición sin conocer el sistema de archivos (se desconoce el último sector utilizado).

    Se permite elegir el tamaño de la partición a crear, pero siempre empezará al principio del “hueco” encontrado, dejando el espacio restante al final.

    Esperemos que con estas pequeñas consideraciones sea suficiente para “echar un poco de luz”

    sobre esta funciónalidad del BUM. Volvemos a pedir disculpas por la falta de una explicación más

    profunda.

    Restricciones

    Para la instalación del MBUM es necesario contar con las extensiones del BIOS, las cuales se

    utilizarán para leer y escribir en disco. Se agregó una validación que avisa de la imposibilidad de

    utilizar el bootloader en caso de no tenerlas.

    Conclusiones

    Una vez desarrollado el mBum y viéndolo funciónar, observamos que hemos llegado a una forma

    sencilla de instalar un multibootloader capaz de reconocer, por defecto, SODIUM sin necesidad de

    realizar modificaciones al SO. Permite la carga de varios Sistemas Operativos facilitando de esta

    manera la tarea de prueba de SODIUM en entornos reales mientras se sigue desarrollando, dejando

    a la PC completamente utilizable para realizar otras tareas.

    El hecho de que gran parte este programado en C va a facilitar futuras modificaciones. Además

    durante el desarrollo se crearon varias estructuras y funciones para manejo de disco que pueden ser

    fácilmente aplicadas a SODIUM, un ejemplo de ello es el comando fdisk que se implementó.

    Pendientes:

    Booteo directo de Linux.

    En este momento, el BUM no es capaz de bootear de forma directa a Linux debido a ciertas

    particularidades del mismo que obligan a añadir inteligencia al bootloader. Tanto en Windows

    como en SODIUM, el BUM carga en 0x0000:0x7C00 el primer sector de la partición donde se

    encuentran instalados y le cede la ejecución. Esto no es posible en Linux. En este sistema

    operativo debemos buscar al kernel en el sistema de archivos para poder cargarlo en memoria y

    cederle la ejecución. Para esto es necesario, minimamente, ser capaces de identificar el sistema de

    archivos (información disponible en el byte de tipo de la entrada correspondiente en el MBR o EBR, según sea primaria o lógica) y, en función del mismo, buscar los archivos necesarios para

    cargar el sistema operativo.

    Basicamente, para que el BUM pueda bootear Linux en forma directa es necesario desarrollar

    funciones para leer y buscar dentro del árbol de subdirectorios para cada uno de los file system que

    puede utilizar Linux para su instalación. Entre los file system más comunes de Linux se encuentran

    ext2, ext3 y ext4 entre muchos otros. Cabe destacar que todas estas funciones deben realizarse

    utilizando los servicios de la BIOS ya que el BUM se ejecuta en modo real.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    15/48

    También es necesario investigar si existen diferencias para bootear las distintas distribuciones de

    Linux, el nombre cada archivo, etc.

    Reconocimiento de varios discos.

    Esta versión del BUM sólo trabaja con el disco configurado como primario en el BIOS. Se podría

    modificar para que sea capaz de leer y trabajar con todos los discos permitiendo tanto la

    instalación del BUM (aunque después sea necesario marcarlo como primario para que arranque

    una vez instalado) como el booteo de un sistema operativo en cualquiera de ellos.

    La modificación para realizar esta tarea no es excesivamente compleja, aunque requiere modificar

    muchas líneas de código.

    Reconocer Windows sin que la partición este marcada como activa.

    Básicamente, la pregunta podría generalizarse de la siguiente manera: “¿En una partición dada, hay

    un sistema operativo instalado?”. Algo que parece tan sencillo, no lo es. Esto se debe a que la

    única información que poseemos acerca del contenido de una partición (sin verificar dentro de ella,

    ya que esto depende de lo que haya ahí) es el byte de tipo de la entrada del MBR o EBR. Sin

    embargo, el valor es totalmente arbitrario y cada uno lo usa como quiere (no está regulada una

    correspondencia entre números y sistemas de archivos, sólo se “saben” usos conocidos de ciertos

    números (ver http://www.win.tue.nl/~aeb/partitions/partition_types-1.html)). Además, el tipo sólo

    identifica el sistema de archivos, pero no da información alguna sobre la existencia de un sistema

    operativo dentro. Por ejemplo: es habitual que todos tengamos una partición para Windows y otra

    para nuestros datos. En el caso de que ambas estén formateadas en NTFS, tendrán los mismos

    números (aunque en una haya un SO instalado y en la otra no).

    Como resumen, para identificar si existe un SO (tanto Windows como Linux) se debe buscar algún

    patrón que nos dé una pista sobre ello. En el caso de Windows se puede buscar algún archivo

    característico (si se sabe leer el sistema de archivos) o algún patrón que se repita en los primeros

    sectores. Por ejemplo, nosotros encontramos que los primeros caracteres del segundo sector de la

    partición donde se encuentra un gestor de arranque de Windows (que, en definitiva, es lo que nos

    interesa) corresponden al nombre del gestor correspondiente (NTLDR, BOOTMGR, etc). Sin

    embargo, esto no fue investigado lo suficiente como para asegurar que sea siempre así. En el caso

    de Linux, basta con buscar la existencia de un kernel (pero para esto debemos ser capaces de leer

    el sistema de archivos, al igual que para bootearlo).

    File system para la partición del BUM.

    Actualmente el BUM se instala en una partición de tipo BUM (0x12), la cual no tiene un file

    system. Los archivos que componen el BUM se copian en sectores definidos arbitrariamente por

    nosotros (como se mostró en la sección Estructura de la partición tipo BUM). Si bien esto no

    produce grandes inconvenientes, la existencia de un file system para esta partición le daría al BUM

    un grado mayor de flexibilidad. Además, permitiría cambiar el archivo de configuración actual del

    BUM por un archivo de texto plano que contenga la configuración para el BUM y que pueda ser

    modificado desde cualquier SO que pueda leer el file system del BUM, de manera similar al

    archivo menu.lst que posee el GRUB.

    Para poder implementar este cambio es necesario desarrollar un PBR para el BUM que pueda leer

    el file system elegido y funciones para el BUM que permitan leer y escribir en dicho file system.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    16/48

    Booteo desde pendrive.

    La idea principal de esta mejora es cambiar el dispositivo desde el que bootea el BUM. Como

    todos sabemos hace años que los disketes son obsoletos debido a su limitada capacidad de

    almacenamiento y a su corta vida útil. Hoy en día, la mayoría de las maquinas permiten bootear

    desde un pendrive y cada vez son menos las maquinas que cuentan con disquetera. Aún más, cada

    vez son menos los SO que dan soporte a ese medio de almacenamiento.

    Mientras se estaba desarrollando el BUM, otro de los proyectos en desarrollo consistía en

    investigar e implementar el booteo desde pendrive para SODIUM. El proceso para poder bootear

    el BUM debería ser muy similar y gran parte de lo desarrollado para el SODIUM debería poder

    utilizarse en el BUM sin grandes dificultades.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    17/48

    APENDICE A

    Organización de archivos

    El BUM se encuentra desarrollado por dos ramas diferentes. Por un lado la del BUM propiamente

    dicho (bajo el directorio bum) y por otro, una biblioteca de funciones (bajo el directorio libinit16)

    que proveen una API basada en los servicios del BIOS para realizar acciones como escribir en

    pantalla, leer del teclado, etc.

    Ambos proyectos son, a pesar de lo que pueda parecer, independientes. Se busca que la libinit16

    provea una serie de servicios que sean utilizados por el BUM o cualquier otro proyecto que los

    necesite con sólo incluir la biblioteca compilada.

    Estructuras de datos utilizadas:

    stuCHS Estructura que contiene la geometria del disco, si no estan las

    extensiones de la int 13h

    stuCHSExt StuCHSExt Estructura que contiene la geometria del disco, que se

    utiliza con las extensiones de la int 13h

    stuDiskAddressPacket Estructura utilizada para leer el disco utilizando las extensiones del BIOS

    stuEntradaTablaParticion Entrada Tabla Particion

    stuPartitionBootRecord Estructura del MBR

    stuComando Estructura referente a la linea de comando

    stuEncabezadoConfig StuEncabezadoConfig Estructura que constituye el encabezado del

    arch de config

    stuEntradaConfig StuEntradaConfig Estructura que constituye una entrada en el arch

    de config

    stuCHS:

    unsigned char H (8 bits de H)

    unsigned char C_S (2 ultimos bits de C y los 6 de S)

    unsigned char C (Primeros 8 bits de C)

    stuDiskAddressPacket

    unsigned char Size

    unsigned char SinUso1

    unsigned char CantidadSectores

    unsigned char SinUso2

    unsigned int SegmentOffsetBuffer

    unsigned int SectorLBALow

    unsigned int SectorLBAHigh

    ../Downloads/BUM_v2.14/libInit16/docs/html/structstu_c_h_s.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_c_h_s_ext.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_disk_address_packet.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_entrada_tabla_particion.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_partition_boot_record.html../Downloads/BUM_v2.14/bum/docs/html/structstu_comando.html../Downloads/BUM_v2.14/bum/docs/html/structstu_encabezado_config.html../Downloads/BUM_v2.14/bum/docs/html/structstu_entrada_config.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_c_h_s.html../Downloads/BUM_v2.14/libInit16/docs/html/structstu_disk_address_packet.html

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    18/48

    stuPartitionBootRecord

    unsigned char BootFlag

    stuCHS SectorInicialParticionCHS

    unsigned char TipoParticion

    stuCHS UltimoSectorParticionCHS

    unsigned int SectorInicialParticionLBA

    unsigned int LongitudParticionLBA

    stuComando

    char comando [LONG_CMD_MAX]

    void(* ayuda )()

    void(* func )(int)

    Descripción del contenido de los subdirectorios del proyecto.

    A continuación se listan los subdirectorios con una breve descripción de cada uno.

    ./bum

    Se encuentran los archivos que implementan las funciónalidades del MBUM.

    . /bum/bs_instalador

    boot sector disquete para ejecutar el modo live

    . /bum/include/multiboot

    Contien las funciones principales, así como también, constantes y variables referentes al

    funciónamiento de la consola. Se encuentran los headers que declaran las distintas estructuras y

    funciónalidades provistas por el mbum.

    ./bum/mbr_hdd

    MBR que irá en el disco cuando se instale el MBUM.

    ./bum/pbr_hdd

    PBR que irá en el disco cuando se instale el MBUM.

    ./libInit16

    Se encuentran distintas estructuras y funciónalidades provistas para el manejo de servicios del

    BIOS.

    Variables, constantes y funciones definidas en algunos de los archivos intervinientes

    A continuación se listan los archivos con sus correspondientes variables, constantes y funciones

    significativas con una breve descripción de cada uno.

    Directorio /bum/

    Archivo: bum.c

    ../Downloads/BUM_v2.14/libInit16/docs/html/structstu_partition_boot_record.html../Downloads/BUM_v2.14/bum/docs/html/structstu_comando.html

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    19/48

    Contiene el proceso principal del MBUM. Se cargan las tablas de comandos, se crea la lista de

    particiones ejecutables y se inicializa el archivo de configuración.

    Dependencia entre archivos:

    Relación entre funciones:

    Funciones:

    vfnInicializarTodo: En esta función se encuentran las inicializaciones de todas las variables globales.

    vfnCrearTablaDeParticiones: Crea la tabla de particiones ejecutables.

    Archivo: bum.h

    Contiene las constantes, variables globales, estructuras y funciones principales.

    Archivo: config.c

    Contiene el codigo de las funciones declaradas en bum.h Se compila en 16 bits (modo real)

    Relación de archivos:

    Relación de funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    20/48

    Funciones:

    ifnLeerArchivoConfig: Función que provee la funciónalidad de hacer lectura de la entrada del archivo de configuración.

    Parámetros de entrada:

    o int iPos o stuEntradaConfig *pstuEntrada

    Devuelve: Int

    ifnLeerEncabezado: Función que provee la funciónalidad de hacer LECTURA del encabezado del archivo de configuración

    Parámetros de entrada:

    o stuEncabezadoConfig *pstuEncabezado Devuelve: Int

    ifnEscribirEncabezado : Función que provee la funciónalidad de hacer la escritura del encabezado del archivo de configuración

    Parámetros de entrada:

    o stuEncabezadoConfig *pstuEncabezado Devuelve: Int

    fnEscribirArchivoConfig : Función que provee la funciónalidad de hacer LECTURA del encabezado del archivo de configuración

    Parámetros de entrada:

    o int iPos o stuEntradaConfig *pstuEntrada

    Devuelve: Int

    Archivo: comandos.c

    Contiene los comandos que permite ejecutar el MBUM.

    Dependencia entre archivos:

    Dependencia entre funciones:

    ../Downloads/BUM_v2.14/bum/docs/html/bs__bum_8asm.html#a5dd9aecb72bebe5f884acecab9c8f251../Downloads/BUM_v2.14/bum/docs/html/structstu_entrada_config.html../Downloads/BUM_v2.14/bum/docs/html/structstu_encabezado_config.html../Downloads/BUM_v2.14/bum/docs/html/structstu_encabezado_config.html../Downloads/BUM_v2.14/bum/docs/html/bs__bum_8asm.html#a5dd9aecb72bebe5f884acecab9c8f251../Downloads/BUM_v2.14/bum/docs/html/structstu_entrada_config.html

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    21/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    22/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    23/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    24/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    25/48

    Funciones:

    vfnComandosCls: Función que limpia la pantalla.

    vfnLlenarTablasComandos: Función que Obtiene el parámetro cNumParam-esimo que se encuentra en el comando ejecutado Se asume que el primer parámetro es el parámetro.

    vfnAyudaArchc: Función que lista la ayuda.

    vfnAyudaComs: Función que llama a la ayuda del comando ingresado por pantalla.

    vfnComandoComs: Función que llama al comando ingresado por pantalla.

    vfnAyudaEjecutar: Función que lista la ayuda del comando Ejecutar.

    vfnAyudaListar: Función que lista la ayuda del comando Listar.

    vfnAyudaCls: Función que lista la ayuda del comando cls.

    vfnAyudaInstalar: Función que lista la ayuda del comando instalar.

    vfnAyudaDesinstalar: Función que lista la ayuda del comando Desinstalar.

    vfnAyudaRepararMBR: Función que lista la ayuda del comando repararmbr.

    vfnAyudaGestorParticiones: Función que lista la ayuda sobre el comando de particiones.

    vfnComandoAyuda: Función que lista la ayuda.

    vfnComandoAyuda: Función que Intenta ejecutar el comando escrito por el usuario.

    cfnComandoEjecutar: Función que Ejecuta la partición pasada como parámetro.

    Devuelve: Char

    vfnComandoArchc: Función destinada para el arch de config.

    vfnComandoListar: Función que Lista y muestra en pantalla la particiones ejecutables encontradas.

    vfnComandoInstalar: Función que Ejecuta el instalador del BUM.

    vfnComandoDesinstalar: Función que Ejecuta el Desinstalador del BUM.

    vfnComandoRepararMBR: Función que copia el archivo binario del MBR del disket en el MBR del disco.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    26/48

    vfnObtenerParamNum: Función que Obtiene el parámetro cNumParam-esimo que se encuentra en el comando ejecutado Se asume que el primer parámetro es el parámetro 0.

    Parámetros de entrada

    o cNumParam variable que contiene el comando ejecutado

    o iValor variable puentero al comando ejecutado

    Devuelve: 0 si encuentra el espacio que buscaba, de lo contrario devuelve 1

    vfnObtenerNombreComando: Función que obtiene el nombre del comando que se desea ejecutar Se asume que el nombre del comando es la cadena que termina con el primer espacio

    en blanco.

    Parámetros de entrada:

    o strResultado contiene la cadena de la linea de comandos

    Devuelve: Devuelve 1 por defecto

    cfnObtenerParamStr: Función que el parámetro cNumParam-esimo que se encuentra en el comando ejecutado Se asume que el primer parámetro es el parámetro 0.

    Parámetros de entrada:

    o cNumParam parámetro asociado al comando ejecutado

    o strResultado contiene la cadena de la linea de comandos

    Devuelve: Char

    vfnComandoGestorParticiones: Administrador de particiones.

    cPedirConfirmacion: Pide confirmación para realizar una acción mostrando la leyenda pasada por parámetro.

    Parámetros de entrada:

    o char *leyenda (leyenda a ser mostrada.)

    Devuelve: Char (1 si en caso de aceptar, 0 si no acepto.)

    Archivo: consola.c

    Contiene las funciones que manejan la consola del MBUM.

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    27/48

    Funciones:

    cfnMostrarMenu: Función que muestra el menú, con las particiones ubicadas en el disco.

    Parámetros de entrada:

    o ucTipoPart indica el tipo de partición

    o strEtiqueta indica si existe alguna partición

    o ucTimeout timeout de respuesta

    Devuelve: Char

    Directorio / libInit16/

    Archivo: bios.c

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    28/48

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    29/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    30/48

    Funciones

    ifnLeerSectorLBA : Si están las extensiones se leen con LBA, si no están, lee con CHS.

    Parámetros de entrada:

    o buf es una region de 512 bytes para guardar el sector buscado

    o uiLBA es el numero LBA del sector a leer

    Devuelve: Si pudo leer devuelve un 1, si no pudo un 0

    ifnLeerSectorCHS : Lee un sector con la direccion CHS.

    Parámetros de entrada:

    o char * buf, es una region de 512 bytes para guardar el sector buscado

    o stuCHS * stu_CHS, es la direccion CHS del sector a leer

    Devuelve: Si pudo leer devuelve un 1, si no pudo un 0

    ifnEscribirSectorLBA : Escribe en un sector 512 bytes.

    Parámetros de entrada:

    o char *buf, unsigned int uiLBA

    Devuelve: Int

    vfnInicializarInt13 : Verifica que estén disponibles las extensiones y obtiene la geometría del disco.

    vfnVerificarExtensionesInt13 : Se utiliza para funciónar con LBA Pone el resultado en la variable global cExtPresentes.

    vfnObtenerGeometriaCHS : Si están las extensiones la guarda en la variable global stuCHSGeomtriaDiscoExt. Si no están las extensiones la guarda en la variable global

    stuCHSGeomtriaDisco.

    Parámetros de entrada:

    o cEexten dice si estan o no las extensiones

    Devuelve: Si estan vale 1, si no vale 0

    ifnConvertirCHSALBAExt : Convierte una direccion CHS a una LBA.

    Parámetros de entrada:

    o *puiLBADestino es la direccion en donde se guardara la direccion LBA

    o *pstuCHSExtOrigen es la direccion CHS

    Devuelve: 1 si pudo realizar la conversion y 0 si no pudo

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    31/48

    ifnConvertirLBAACHS : Esta función convierte de LBA a CHS, por si las extensiones del BIOS no se encuentran presentes.

    Parámetros de entrada:

    o *pstuCHSDestino es la stuCHS en donde se va guardar el resultado, si se pudo hacer la conversion

    o uiLBAOrigen es la direccion LBA origen.

    Devuelve: 1 si pudo hacer la conversion y 0 si no pudo

    cfnDelay : Función que define el delay utilizado.

    Parámetros de entrada:

    o iSegs parámetro que define la cantidad de segundos del delay

    Devuelve: Si pudo leer el cTiempo, devuelve 1, sino, devuelve 0. Tambien devuelve

    0 si iSegs esta mal (

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    32/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    33/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    34/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    35/48

    Funciones

    vfnImprimirAVentana : Función que posee la misma funciónalidad que 'printf', en el sentido en que usa las coordenadas actuales para imprimir el string.

    Parámetros de entrada:

    o *str es la cadena a imprimir

    o cCarNum variable que indica si lo que se imprime es caracter o numero

    vfnImprimirStr : La función imprime un Str en la iFila y iCol especificada. Si paso -1 a iFila y columna, imprime según las coords actuales. Se imprimirá el Str mientras no se encuentre un o

    mientras la cantidad de caracteres impresos sea menor a lo especificado en el parámetro siCant.

    Parámetros de entrada:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    36/48

    o *str cadena a imprimir

    o iFila fila a imprimir

    o iCol columna a imprimir

    o cCarNum Imprime el string en forma de caracteres o numeros

    hexadecimales segun se setee 1 o 0 en cCarNum, respectivamente.

    o siCant cantidad maxima de caracteres a imprimir

    vfnEscribirCar: Función que permite escribir los caracteres en la línea de comandos.

    Parámetros de entrada:

    o iCar se pasa por parámetro para definir el caracter que quiero imprimir

    o iPos se pasa por parámetro para indicar la posición en la pantalla

    vfnEscribirCarColor: Función que permite escribir los caracteres en la línea de comandos.

    Parámetros de entrada:

    o iCar se pasa por parámetro para definir el caracter que quiero imprimir

    o iPos se pasa por parámetro para indicar la posición en la pantalla

    o cColor se pasa por parámetro para indicar el color a imprimir en la pantalla

    cfnLeerMemVideo: Función que permite leer la memoria del video.

    Parámetros de entrada:

    o uiOffset es el parámetro que se pasa a la función para indicar el desplazamiento de acceso a la posición de memoria

    Devuelve: Char

    cfnEscribirMemVideo: Función que permite escribir la memoria del video.

    Parámetros de entrada:

    o cByte el byte a escribir

    o uiOffset es el parámetro que se pasa a la función para indicar el desplazamiento de acceso a la posición de memoria

    cfnHexToChar: Función que traduce un Hexa a Char.

    Parámetros de entrada:

    o cNum parámetro a traducir

    Devuelve: Char

    cfnCls:Función que limpia la pantalla.

    Devuelve: Char

    vfnSubirFila: Función que sube una iFila lo que hay en pantalla.

    cfnTeclaPresionada: Función que me indica si se presiona una tecla.

    Devuelve: Char

    cfnLeerTecla: Función que me permite leer la cTecla que se presiono.

    Devuelve: Char

    cfnImprimirTecla: Función que me permite Imprimir lo que haya ingresado el usuario.

    Parámetros de entrada:

    o cModo es un parámetro que responde al modo de impresion de la tecla

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    37/48

    o cTeclaP tecla a imprimir, si se pasa 0 se lee la tecla del bufer.

    Devuelve: Char (la tecla que imprimio.)

    vfnBorrarCaracter: Función que me permite borrar los caracteres de la línea de comandos, retrocediendo las coordenadas; si las mismas valen cero, no se borra nada. Solo se permite

    borrar hasta que se llega al prompt.

    vfnNuevaLinea: Función que me permite obtener una nueva línea.

    vfnTabulador: Función que provee la funciónalidad de un tabulador que permite avanzar hasta el siguiente tab stop.

    vfnActualizarCoords: Función que actualiza las coordenadas.

    vfnActualizarCursor: Función que actualiza las coordenadas del cursor.

    cfnSetPromptPos: Función que permite setear la posición del prompt.

    Parámetros de entrada:

    o iFila parámetro correspondiente a la fila de la coordenada

    o Columna parámetro correspondiente a la columna de la coordenada

    Devuelve: si se le pasa un cualquiera devuelve cero, de lo contrario uno

    vfnImpNum : Función que imprime un numera en la ubicación correspondiente.

    Parámetros de entrada:

    o unsigned long int uliDir

    o int iFila

    o int iCol

    ifnLeerStr : Función que lee un string desde el teclado mientras lo ingresado sea menor a iTamMax y mientras no se encuentre un caracter igual a cStop.

    Parámetros de entrada:

    o *strDestino variable puntero que

    o iTamMaxtamanio maximo del caracter ingresado

    o cStop indica el tamanio que puedo ingresar como comando

    Devuelve: Devuelve cero si el tamanio maximo es menor a cero, de lo contrario

    devuelve iCont, que es el tamnio del string ingresado

    Archivo: floppy.c

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    38/48

    Funciones

    ifnLeerDeDiskette : lee n sectores del disket

    Parámetros de entrada:

    o cantSect cantidad de sectores a leer

    o sectInicial sector del diskete apartir del cual se comienza a leer

    o *buf region de memoria donde se almacenan los sectores leidos

    Devuelve: 0 si puedo leer, 1 si ocurrio algun error

    ifnCargarDirRaiz : lee el directorio raíz y lo guarda en la variable pasada por parameto

    Devuelve: Int - 0 si pudo leer, 1 si ocurrio algun error.

    ifnCargarFatDiskette : carga la posición en pcCargaFat

    Devuelve: Int - 0 si pudo leer, 1 si ocurrio algun error.

    ifnGrabarArchivoADisco : lee "archivo" del disket y lo graba en el disco

    Parámetros de entrada:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    39/48

    o entrada nombre del archivo a copiar en formato 8+3 (8 caracteres para el nombre y 3 de extencion) ejemplo (BUM BIN)

    o sectorInicial sector del disco en LBa a partir del cual de quiere grabar el archivo.

    Devuelve: 1 si no ocurre ningun error, -1 si no encuentra el archivo o no puede

    leerlo, -2 si no puede grabarlo.

    uifnCalcularSecSig : busca en al fat el siguiente sector

    Parámetros de entrada:

    o sector actual

    Devuelve: unsigned int (siguiente sector a leer o finDeArchivo (0x0FFF).)

    ifnBuscarEntradaDirRaiz : busca una entrada en el directorio Raíz

    Parámetros de entrada:

    o entrada nombre del archivo buscado en formato 8+3

    Devuelve: int - nro de entrada si la encuentra o -1 si no la encuentra

    uifnBuscarPrimerSector : busca en la entrada del directorio raíz el primer sector del archivo

    Parámetros de entrada:

    o nroEntrada entrada en el directorio raiz correspondiente al archivo que se quiere leer

    Devuelve: unsigned int (sector inicial del archivo)

    Archivo: mem.c

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    40/48

    Funciones

    ifnDireccionAbsoluta : Calcula la direccion absoluta (esto es, adicionarle el DS) del puntero que se le pasa como parámetro.

    Parámetros de entrada:

    o *pvVariable variable de la que quiero averiguar su direccion absoluta

    Devuelve: unsigned int (Direccion absoluta de la variable que se pasa por

    parámetro)

    ifnCopiarADirAbs: Esta función copia memoria.

    Parámetros de entrada:

    o *ucpDestino puntero al destino dirDestino Direccion absoluta de memoria uiTamanio cantidad de bytes a copiar

    Devuelve: int (Siempre 1)

    Archivo: part.c

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    41/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    42/48

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    43/48

    Funciones

    pstufnNuevaParticion : Función que me permite alocar memoria para el array particiones.

    Devuelve: Devuelve un puntero a la nueva entrada. 0 si no hay mas lugar.

    pstufnNuevaParticionEjec : Función que me permite alocar memoria para el array de particiones ejecutables.

    Devuelve: Devuelve un puntero a la nueva entrada. 0 si no hay mas lugar.

    cfnTodosLosCamposEnCero : Verifica si una entrada de la tabla tiene todos los campos en cero.

    Parámetros de entrada:

    o *entrada entrada a analizar

    Devuelve: Si esta toda en cero: 1, si no: 0

    vfnPonerTodosLosCamposEnCero : pone todos los campos de una entrada de la tabla en cero.

    Parámetros de entrada:

    o *entrada entrada a limpiar

    vfnCederEjecucion : Cede la ejecución al PBR apuntado por el parámetro pstuEntrada.

    Parámetros de entrada:

    o *entrada que contiene la direccion del PBR al que se le cedera la ejecucion

    ifnExplorarExtendida : Explora la partición extendida recibida por parámetro en busca de particiones lógicas y las agrega a la tabla de particiones.

    Parámetros de entrada:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    44/48

    o *pstuEntrada es la entrada de la particion extendida.

    Devuelve: int (1 si fue exitoso, 0 si hubo error (de lectura de disco o EBRs no

    firmados))

    vfnHacerSalto : Hace un salto a 0x0000:0x7C00.

    vfnCopiarPartTable : Copia la tabla de particiones del MBR origen al MBR destino.

    Parámetros de entrada:

    o stuPartitionBootRecord * MBR original stuPartitionBootRecord * MBR

    destido

    vfnCrearTablaDeParticiones : Genera la tabla de particiones del sistema. Guarda las entradas de todas las particiones primarias y lógicas en la tabla de particiones. La tabla de

    particiones tiene cCantParticiones Particiones y es apuntada por la Var. gloabal

    astuTablaParticiones.

    vfnListarTablaDeParticiones : Función que recorre las cCantParticiones (Var. global) de la tabla de particiones apuntada por la Var. global astuTablaParticiones y la lista por pantalla.

    Muestra el tipo de partición y su tamaño.

    cfnCalcularEspacioNoUsado : crea una tabla de espacios no asignado en el disco de tamaño mayor a una constante definida en la función.

    Parámetros de entrada:

    o pstuTablaHuecos puntero donde se almacenara la tabla de espacios libres.

    Devuelve: char (devuelve la cantidad de espacios libres encontrados (cantidad de

    entradas en la tabla).)

    vfnCrearParticionPrimaria : crea una partición

    Parámetros de entrada:

    o particion es un puntero a una estructura que contiene los datos de la

    particion a crear.

    vfnCrearParticionLogica : crea una partición lógica

    Parámetros de entrada:

    o particion es un puntero a una estructura que contiene los datos de la

    particion a crear.

    o numExtendida es la entrada en la tabla de particiones que corresponde a la

    particion extendida dentro de la cual se creara la nueva particion logica. *pstuExtendida

    vfnBorrarParticionPrimaria: borra una partición

    Parámetros de entrada:

    o stuParticionABorrar entrada de la tabla astuTablaParticiones a borrar.

    vfnBorrarParticionLogica : borra una partición lógica

    Parámetros de entrada:

    o stuParticionABorrar entrada de la tabla astuTablaParticiones a borrar

    pcfnObtenerDescTipoParticion : devuelve una descripción relacionada al tipo de partición.

    Parámetros de entrada:

    o tipo numero que identifica el tipo de particion.

    Devuelve: puntero a un string que contiene la descripcion del tipo.

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    45/48

    ifnSonEntradasIguales : verifica si 2 entradas son iguales. Compara campo por campo y verifica que sean iguales, si algún campo es distinto las entradas son distintas

    Parámetros de entrada:

    o punteros a la entradas a comparar

    Devuelve: int (1 si son iguales, 0 si son distintas)

    Archivo: puertos.c

    Relación entre funciones:

    Funciones

    outb: función que escribe un cByte en un puerto determinado (implementada en assembler)

    Parámetros de entrada:

    o iValor parámetro a escribir en el puerto puerto donde escribir

    Archivo: string.c

    Relación entre archivos:

    Relación entre funciones:

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    46/48

    Funciones

    ifnCopiarMemoria : Esta función copia memoria.

    Parámetros de entrada:

    o *ucpDestino puntero al destino

    o *ucpOrigen puntero al origen

    o uiTamanio cantidad de bytes a copiar

    Devuelve: int (Siempre 1)

    ifnAtoI : Convierte un string ASCII a Integer.

    Parámetros de entrada:

    o char *strA

    o int iBase

    Devuelve: Devuelve el entero correspondiente

    cfnStrCat : Concatena el origen con destino y el resultado queda en destino.

    Parámetros de entrada:

    o *dest cadena destino

    o *org cadena origen

    Devuelve: char (siempre 1)

    ifnStrLen : Devuelve la longitud de un string.

    Parámetros de entrada:

    o *str,es el string que se va a analizar

    Devuelve: int (Longitud del string que se mando por parámetro)

    cfnStrIguales: Verifica la igualdad de dos strings.

    Parámetros de entrada:

    o *a string 1

    o *b string 2

    Devuelve: Si son iguales: 1, si son distintos: 0

    pcFnIntToString : Convierte un entero a string en la base especificada.

    Parámetros de entrada:

    o iNum el numero a convertir

    o pcStr puntero a char que apunta a la region de memoria donde se guardara el numero convertido. IMPORTANTE: el usuario de la función se debe

    encargar de la reserva de memoria necesaria para convertir el numero.

    o iBase base del numero convertido. Debe estar entre 2 y 16 (inclusive). La función NO verifica limites.

    Devuelve: char * (puntero al string convertido. Tiene el mismo valor que pcStr.)

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    47/48

    Glosario

    BIOS: Basic Input Output System

    BUM: ver MBUM

    CHS: Cilinder-Head-Sector

    EBR: Extended Boot Record

    GRUB: GRand Unified Bootloader

    LBA: Logical Bolck Address

    MBC: Master Boot Code

    MBR: Master Boot Record

    MBUM: MultiBootloader de la Universidad de La Matanza

    MPT: Master Partition Table

    PBR: Partition Boot Record

    SO: Sistema Operativo

    SODIUM: Sistema Operativo del Departamento de Ingeniería de la Universidad de La Matanza

  • SISTEMAS OPERATIVOS-UNLAM 2010 – DOCUMENTACIÓN DEL MBUM

    48/48

    Bibliografía:

    [01] Bootloaders – an introduction

    Barry Nauta. December 3, 2008.

    [02] the GNU GRUB manual

    Version 0.97. May 8, 2005

    Internet

    [03] Details of GRUB on the PC (2005)

    http://www.pixelbeat.org/docs/disk/

    [04] SUSE Documentación de LINUX. Capítulo 29. Cargador de arranque / 29.3. Arranque con GRUB (Novell Inc.)

    http://www.mafuso.net/susemanual//index.html

    [05] Sitio Oficial de Grub, http://www.gnu.org/software/grub/

    [06] Manual de Grub desde GNU, http://www.gnu.org/software/grub/manual/html_node/

    [07] http://www.zator.com/Hardware/H8_1_2c.htm

    [08] http://mirror.href.com/thestarman/asm/mbr/index.html

    http://www.zator.com/Hardware/H8_1_2c.htm