¿Cómo hacer mi propia ROM personalizada? ¿Qué lenguajes de programación necesito saber?

Puede crear una ROM personalizada (memoria de solo lectura) “grabando” una PROM (ROM programable) o EPROM (PROM borrable) o EEPROM (PROM borrable electrónicamente) o EAPROM (PROM modificable electrónicamente).

Normalmente su ROM contiene lenguaje de máquina sin procesar para un procesador dado. Para las CPU basadas en Intel ™ x86, esto normalmente sería (o al menos comenzaría) con el código para el modo “real” (sin protección).

Tenga en cuenta que las diversas variantes de las tecnologías PROM muestran una progresión hacia menos “solo lectura” y un mayor acceso para reescribir los contenidos de PROM. Las EPROM más antiguas se borraron por exposición cronometrada a la luz UV (ultravioleta) a una intensidad significativa. Esencialmente, la programación se derritió de ellos. Las EEPROM podrían eliminarse con una señal electrónica activada en ciertos pines durante un intervalo de tiempo específico; toda la ROM fue borrada por este procedimiento. EAPROMS (¿Qué es EAPROM?) Fueron modificables en bloques y básicamente evolucionaron a lo que hoy llamamos “memoria flash”.

Las ROM se distinguen de las “PROM” por métodos de fabricación y escala. Las ROM se producen en masa (para cada BIOS u otro programa / contenido dado), mientras que las PROM se diseñaron para ser programadas en el campo por un dispositivo especial, un programador PROM, que está diseñado para aplicar una señal de alto voltaje sobre las líneas en una dirección dada y por lo tanto “sople el fusible” en esa ubicación de bits. Las EPROM requerían dispositivos similares para la programación y una luz UV para el borrado.

Cuando pregunta sobre la grabación de ROM personalizadas, existe la suposición oculta de que su intención es crear ROM de arranque personalizadas.

Teóricamente, podría colocar cualquier contenido que desee en una ROM y hackear algún tipo de tarjeta de expansión para que estos datos se mapeen en el espacio de direcciones de alguna arquitectura de computadora específica en una ubicación específica. Pero, en la práctica, hay muy poco uso de ROM en la computación de propósito general que no sea el “código de arranque”.

Por lo tanto, cualquier lenguaje de programación que pueda compilarse en lenguaje de máquina nativo debería ser suficiente. Tenga en cuenta que esto no es tan simple como podría pensar.

Cuando compila programas normales para que se ejecuten en su sistema, se vincula a algún código de “tiempo de ejecución” y, por lo general, a algunas bibliotecas estándar (generalmente código de objeto compartido … archivos en Linux, archivos .dynlib en MacOS X y . Archivos DLL en MS Windows, entre otros). Pero el código que inicia en una ROM de inicio no se ejecuta en un entorno de sistema operativo. Los supuestos, los puntos de entrada al código, los encabezados de los ejecutables (ELF para Linux, COFF para algunas versiones muy antiguas de Linux y Unix, etc.) y, por supuesto, cualquier referencia a llamadas al sistema y funciones de biblioteca compartida no son válidas para ROM de arranque.

En su mayor parte, debe suponer que va a escribir código para PROM en C (no en C ++) o en el lenguaje ensamblador de su arquitectura.

Para obtener más información sobre las ROM en hardware real, convencional y de uso general, puede estudiar coreboot y su fork, Libreboot o TianoCore (UEFI), que son esfuerzos para proporcionar reemplazos que podría usar en PC (escritorios y servidores … ¿principalmente?).

Otro artículo que le parezca interesante sería uno sobre cómo escribir un controlador serial / TTY “sala de pánico” para usar en el BIOS virtualizado VMWare en el ensamblaje 8086: Elaboración de un BIOS desde cero. Esto debería darle una pista sobre el tipo de consideraciones que encontraría al escribir cualquier otro código que pueda poner en una ROM de arranque de hardware. Aquí hay otra respuesta a una pregunta similar sobre StackOverflow que vale la pena leer: escribir mi propio BIOS.

Ese es probablemente un buen punto de partida. Tenga en cuenta que cualquier intento de escribir un programa práctico para su implementación en una ROM será un esfuerzo muy extenso. Buena suerte.

Suponiendo que está hablando de Android (los otros sistemas operativos convencionales no están abiertos), para construir un roam:

  1. tomar un kernel de Linux (escrito en C).
  2. haz los cambios que quieras
  3. Agregue sus servicios mínimos del sistema operativo (C)
  4. agregar aplicaciones opcionales (Java).
  5. compilar: debe configurar los parámetros apropiados de su teléfono objetivo para el compilador de C.
  6. empaquete sus fragmentos en un formato apropiado (por ejemplo, zip)
  7. flashear su teléfono