2 votos

¿Es posible crear un sistema operativo para dispositivos Android?

¿Es posible ejecutar un sistema operativo que no sea Android en los dispositivos Android? Sé que el bootloader está codificado en el firmware y que aunque lo intentes no puedes cambiar lo que hace pero ¿qué pasa si desde ese bootloader usas el núcleo que carga a cargar otro sistema operativo . Algo así como un cargador de arranque secundario . ¿Es posible? ¿Podría usted compilar su propio sistema operativo y instalarlo en un dispositivo Android si se cumplen todos los requisitos necesarios? ¿Y un sistema operativo "Hello World"? ¿Es eso posible también al menos? Y No lo sé. significa Linux.

0 votos

@beeshyams se que puedes hacerlo pero me refiero literalmente a tu propio Sistema operativo que usted compilado con su propio bibliotecas. Gracias por intentar ayudar.

1 votos

Seguirías necesitando controladores para un dispositivo concreto. Éstos se asignarían a un conjunto de chips y, en el caso de Android, a una versión concreta del kernel de Linux. Podrías hacer algo como Escribir un SO para Raspberry Pi en C pero la cuestión es cuánto más allá de la E/S serie está disponible para TU SO sin replicar un kernel tipo Linux para soportar la pantalla/táctil/red wifi//etc.

3 votos

4voto

Jack Wade Puntos 231

Algo así como un cargador de arranque secundario . ¿Es eso posible?

Sí, es posible. Como has mencionado, dado que la cadena de arranque hasta la etapa del gestor de arranque es de código cerrado y los binarios están firmados con las claves privadas del OEM, no es posible reemplazar o modificar el gestor de arranque. Sin embargo, si el gestor de arranque es desbloqueable, es posible arrancar un kernel personalizado (tu propio sistema operativo). Pero el lo primero es que hay que seguir el formato estándar de boot.img (es decir, desplazamientos fijos y formatos de archivo para el binario del núcleo, ramdisk, DTB, etc.) como especificado en Android (AOSP).

En segundo lugar construir un núcleo "Hola Mundo" (o incluso un cargador de arranque ) para un PC es bastante simple porque muchos de los buses y el hardware conectado a ellos ya son reconocidos por BIOS/UEFI. Sin embargo, la mayoría de los dispositivos Android están basados en ARM, por lo que no tienen ACPI como en BIOS/UEFI. En su lugar, el mapeo de hardware se proporciona en forma de Árbol de dispositivos que proporciona el proveedor del SoC. La fuente del kernel de Android/Linux proporcionada por el OEM también incluye controladores para todos los componentes de hardware. Por lo tanto, necesitas incluir el Device Tree Blob (DTB) y las partes relevantes del código fuente del kernel con tu kernel personalizado.

El propio gestor de arranque está construido con el DTB para utilizar componentes de hardware como eMMC/UFS, pantalla, USB, etc. para poder flashear particiones, mostrar la pantalla de inicio, conectarse al PC, etc. Por ejemplo, splash_region o freamebuffer en DTB especifica las direcciones de memoria del hardware de la pantalla, que es necesario para imprimir, por ejemplo Hola Mundo en la pantalla.

En tercer lugar muchos de los las interfaces del kernel son propietarias (no está documentado) y no funcionan con las ioctls/syscalls estándar de Linux. Para hacer un uso completo de las características del hardware (cámara, gps, módem, etc.) necesitas blobs binarios propietarios ( HAL s) en el espacio de usuario, de nuevo proporcionado por el OEM del dispositivo. El marco de trabajo de Android utiliza HIDL para comunicarse con los HAL, por lo que también hay que contar con eso.

Así que lo que se obtiene no es una "que no sea Android" EL SISTEMA OPERATIVO. En gran parte hay que compartir el mismo código base, las especificaciones y los recursos que se ejecutan en el sistema operativo Android, ya sea el kernel o el espacio de usuario.

Para más detalles, véase:

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X