Hilo para intentar portar Ubuntu Touch (UBPorts) a otros terminales

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #1

Tras el anuncio de la Fundación UBPorts de lanzar ya una versión cuasi-estable de UBPorts (es decir, Ubuntu Touch en su versión no-Canonical), me ha picado el gusanillo. Tengo un terminal por ahí tirado en casa (un Motorola Moto E 2015 4G-LTE), del cual, me encantaría hacer un port de este sistema operativo. La "gracieta" está en que tengo una pequeña base de la cual inspirarme (tiene un port funcional de Sailfish OS): forum.xda-developers.com/moto-e-2015/dev...-e-2015-lte-t3623141

Sin embargo, voy un tanto perdido. Voy a basarme en esto ( docs.ubports.com/en/latest/porting/introduction.html ) para investigar el cómo podría hacer una compilación funcional de UBPorts para mi terminal. Puede que salga, puede que no, pero me voy a tomar esto como una experiencia de aprendizaje más, sencillamente. Iré actualizando conforme vaya conociendo más detalles.


Un saludo
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #2

Bien, tras informarme de cómo va el asunto, creo que estoy en condiciones de describir todos los pasos que voy haciendo a este respecto. Si todo lo que voy a postear aquí sale bien, es posible que salga un tutorial nuevo para la sección de Tutoriales, pero poco a poco... Todo este proceso lo voy a realizar en Linux Mint 18.3 (Ubuntu 16.04) para garantizar la mayor compatibilidad posible.

En primer lugar, antes de intentar hacer algún intento de portado de Ubuntu Touch, nos tenemos que asegurar de que el intermediario entre las librerías de abstracción hardware de Android (HAL) y la distro móvil a portar se entiendan perfectamente. De esto se encarga el proyecto Halium ( halium.org/ ), el cual, a través de sus librerías (libhybris), hace posible la magia:


Para mi Moto E, el asunto es bastante sencillo, en el hecho de que este terminal cumple con los requisitos mínimos para que Halium funcione correctamente (kernel de versión posterior a 3.10; 3.10.49 en mi caso, 1 giga de RAM y un almacenamiento suficiente).

Para preparar todo el sarao (como dirían aquellos que hacen tazas de unicornios ;) ), en principio, hay documentados dos distribuciones (Ubuntu y Arch Linux). Voy a describir las instrucciones para Ubuntu y derivados (en Arch es posible realizar esto ). Empezamos.

Para Ubuntu, en primer lugar, hay que tener en cuenta que el proceso se realiza bajo aplicaciones de 32 bits. Por tanto, si tienes una versión de 64 bits, no te olvides de hacer permitir al sistema trabajar en modo 32 bits con este comando:
sudo dpkg --add-architecture i386

Una vez hecho esto, instalamos las dependencias requeridas para realizar el proceso de compilación:
sudo apt install git gnupg flex bison gperf build-essential \
  zip bzr curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw-w64-i686-dev tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386 schedtool \
  repo liblz4-tool bc lzop

Y hasta aquí el primer capítulo de la aventura. Conforme vaya viendo, escribiré más.


Un saludo
Última Edición: 5 años 7 meses antes por impreza233.
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #3

Una vez hecho esto, voy a pasar a la siguiente fase. Vamos a descargar el "source tree" de Halium en una nueva carpeta, la cual estará en un directorio a discreción del lector. Yo lo voy a poner en /home/impreza233/Descargas (mi carpeta de Descargas, y en la cual, vamos a trabajar). Abre esta carpeta en un Terminal y teclea:

mkdir halium && cd halium

Llamaré a esta carpeta BUILDDIR en el resto de la guía, para así evitar confusiones y problemas varios.

Como mi terminal (Moto E 2015, alias surnia) tiene disponible una compilación estable de Lineage OS 14.1 (Android 7.1.2), inicializaré el repositorio de Halium 7.1 a través del siguiente comando:
repo init -u https://github.com/Halium/android -b halium-7.1 --depth=1

Pon tu nombre y tu correo electrónico cuando te lo pregunte la Terminal. Comprueba tu identidad y dale a y (Yes). También comprueba si quieres letras de comandos en color y pon y (Yes) o N (No) si quieres o no activar esta característica, la cual, puede ser de utilidad.

Si todo ha ido bien, debería salir algo como esto:
repo has been initialized in /home/impreza233/Descargas/halium

Ahora, simplemente, sincroniza el código local de Halium con el del servidor usando este comando (tardará un buen ratico, por lo que podrás hacer otras actividades, tales como tomarte un café, pasear un rato, ver "Cachitos de Hierro y Cromo" xD)
repo sync -c -j 16

Enhorabuena. Has completado la primera fase de esta "intención de tutorial". Para seguir adelante, ve al siguiente post.



ANEXO: Si tu terminal no tiene Android 7.0 o superior, o Lineage OS 14.1, pero tiene soporte para Android 5.1 o CyanogenMod 12.1, usa este comando en vez del anterior que se ha indicado. El resto de los pasos son iguales:
repo init -u https://github.com/Halium/android -b halium-5.1 --depth=1


Un saludo
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #4

Una vez descargados los sources de Halium (son unos 12 gigas, de ahí lo de la paciencia a la hora de descargarlas), vamos a añadir el código específico del dispositivo en cuestión, y a configurar el sistema de compilación para integrar Halium en Android. Ésta será la parte en la que más fallos podrás cometer, pero tranquil@, con paciencia y una caña podrás configurar este paso correctamente ;)

En primer lugar, hay que encontrar los repositorios para tu dispositivo. Aquí me voy a basar en Lineage OS ( github.com/lineageos ) para realizar el proceso. Generalmente, estos repositorios vienen de la forma LineageOS/android_device_marca_nombredeldispositivo. En mi caso, es el siguiente:

android_device_motorola_surnia

El cual está en este enlace: github.com/LineageOS/android_device_motorola_surnia

En este enlace, existirá un archivo conocido como lineage.dependencies (si el dispositivo contaba con CyanogenMod, aparecerá como cm.dependencies). Quédate con la copla de este archivo, ya que lo necesitaremos luego ;)

Esta parte es un poco más complicada, pero no te asustes. En tu carpeta donde hayas descargado los archivos de Halium:

Ve a
halium/devices/manifests
y crea el archivo
marca_nombredeldispositivo.xml

Por suerte, en mi caso, parece que ya estaba creado...
motorola_surnia.xml

En caso de que no lo tengas, simplemente, tras crearlo, con tu editor de textos favorito, copia y pega estas indicaciones:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

</manifest>

Y ahora rellenaremos el espacio entre <manifest> y </manifest> con información :) Más o menos deberá quedar como esto (que ya está hecho por otros, dicho sea de paso...)

Bien, cada una de estas líneas representan los siguientes componentes:
<project path="device/[marca]/[modelodeldispositivo]" name="[mombredelrepositorio]" remote="[remote]" revision="[revision]" />
Esta línea de código representa el repositorio del dispositivo al cual quieres hacer referencia. Si no existe, se debe crear (no voy a abordar eso porque ya existe, en mi caso).
<project path="[target_path]" name="[repository]" remote="[remote]" revision="[revision]" />
El famoso archivo de lineage.dependencies o cm.dependencies. Sustituye las barras bajas por barras curvas y problema resuelto ;)

Y, finalmente, los archivos propietarios de cada terminal. En este GitHub ( github.com/TheMuppets ) podrás ver los archivos propietarios de cada fabricante, y, así añadir los necesarios al manifest.xml

En cuanto a "remotes", no voy a meterme mucho en estos lares, pero sirven para configurar el servidor en donde se van a descargar.

Para finalizar ya este apartado (con mi manifest.xml ya completo), copio y pego este comando a un terminal:
./halium/devices/setup surnia
cambiando surnia por el terminal de tu elección. Esto descargará las fuentes específicas de tu dispositivo, y ya tendremos las cosas necesarias para trabajar en esto en condiciones:


Un saludo
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #5

ANEXO: Si queréis ver el progreso del port, podéis verlo aquí: github.com/Halium/projectmanagement/issues/97


Un saludo

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #6

Ahora que ha terminado el proceso de descarga de los componentes específicos de surnia (mi terminal), vamos con la "parte divertida" del proceso jejeje.

Entramos al directorio BUILDDIR indicado en posts anteriores (si has hecho secuencialmente todos los pasos indicados en este post, seguirás en la misma carpeta, no te preocupes ;) ), y ejecutamos:

source build/envsetup.sh

Te saldrá algo como esto:

Y ahora vamos a "pintar el carro":


Ejecutamos, en la misma carpeta BUILDDIR:
breakfast surnia

Dado que estamos en Halium-7.1, simplemente con breakfast (nombre del dispositivo) sobra. En Halium-5.1, pon simplemente lunch y arreglado.

Te saldrá algo como esto:

Ya estamos cerca del final de este primer proceso. Estad atentos a futuros posts.


Un saludo
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #7

Ahora toca la parte de compilación y comprobación (para ver si todo funciona bien antes de proceder al "port" en sí de Ubuntu Touch) de libhybris. Modificaremos la configuración del kernel para que funcione con systemd, y se pueda compilar y hacer funcionar correctamente. Usaremos, para ello, el "mer-hybris-check", el cual se descarga con este comando:

git clone https://github.com/mer-hybris/mer-kernel-check

Conociendo la ruta del kernel de tu dispositivo vía:
grep "TARGET_KERNEL_CONFIG" device/<marca>/<nombredeldispositivo>/BoardConfig.mk

Sabrás esa ruta, y podrás ponerla en los siguientes comandos:
cd mer-kernel-check
./mer_verify_kernel_config <ruta a la configuración del kernel obtenida antes>

Seguramente te salga algo como esto:
TARGET_KERNEL_CONFIG := surnia_defconfig

Y aquí estoy teniendo problemas. En cuanto los solucione, sigo con el post.


Un saludo

Por favor, Identificarse para unirse a la conversación.

  • shelllavie
  • Avatar de shelllavie
  • Conectado
  • Navegador Iniciado
  • Navegador Iniciado
  • Halof!!!
Más
5 años 7 meses antes #8

Apasionante, a ver si hay suerte, ;)


Halof!!!
El siguiente usuario dijo gracias: impreza233

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #9

Tras solucionar el pequeño problema que he tenido, vamos a seguir adelante. Vamos a editar las variables de configuración del kernel. Esto variará según el kernel de tu dispositivo. Como guía, prueba a usar esta imagen:


Lo importante, para que todo compile y cargue bien, es que los parámetros CONFIG_IKCONFIG y CONFIG_IKCONFIG_PROC estén configurados en "y", sino, no arrancará la imagen generada.

En mi caso, todos los parámetros del defconfig estaban bien, por lo que pasaremos al siguiente caso. Si alguno de ellos no estuviese bien, se corregirían según los parámetros del programa en cuestión (por ejemplo, CONFIG_NLS_UTF8=y)

Ahora comprobaremos si los puntos de montaje son los correctos. Para ello, comprobaremos si el dispositivo está incluido en:
<BUILDDIR>/halium/hybris-boot/fixup-mountpoints

Si está, pasaremos al siguiente paso. Si no lo está, sigue estos pasos: docs.halium.org/en/latest/porting/build-...in-fixup-mountpoints

Como en mi caso, surnia no estaba, he tenido que hacer un apaño:



Cortesía de github.com/maikelwever/hybris-boot-surnia

La indentación DEBE ser la misma en todo el documento para evitar problemas luego.

Y ahora realizamos estos tres comandos:
make mkbootimg
make hybris-boot
make systemimage

Y rezamos a Yevon para que no nos dé errores el proceso:


Un saludo
Última Edición: 5 años 7 meses antes por impreza233.

Por favor, Identificarse para unirse a la conversación.

  • impreza233
  • Avatar de impreza233 Autor del tema
  • Conectado
  • Navegador Platino
  • Navegador Platino
  • ¿Quién es Homer? Yo me llamo tipo de incógnito
Más
5 años 7 meses antes #10

Bien, sigamos con el tema. Una vez hayamos sacado el hybris-boot y el systemimage, será momento de ponernos ya con Ubuntu como los cánones mandan. Hasta ahora habíamos hecho una simple prueba para comprobar que todo podría ser compilado de buena manera con la configuración existente en el sistema operativo Linux en cuestión.

Ahora viene lo bueno. En primer lugar, sabed que SELinux no pinta absolutamente nada para Ubuntu Touch, ni para halium-boot (el derivado de hybris-boot que construiremos ahora). Por tanto, hay que cargarse todo lo referente a "context=" y sustituir los sistemas de archivos f2fs por ext4 en el fstab. Y, pequeño saltamontes, me preguntarás, ¿qué carajo es el fstab? Pues, amig@, el fstab es, ni más ni menos, el esquema de particiones que lleva el terminal o tablet al cual estás portando el sistema operativo. Suele estar en la ruta

BUILDDIR/device/MANUFACTUER/CODENAME/rootdir/etc
y estar nombrado como fstab.qcom o fstab.devicename. Suele estar ya en la rama de LineageOS, si lo tiene el terminal. En caso de que no lo tenga, habría que comprobarlo vía root en Android (eso podría explicarlo en un Anexo aparte a este tutorial). Sirva como ejemplo la siguiente imagen, de mi dispositivo:
Guarda los cambios cuando hayas acabado con el fstab, siempre cercionándote de que esté en el mismo orden en el que te lo encontraste (en mi caso, tal como se muestra en la imagen, con sus espacios y todo). Este paso es VITAL, ya que, si no lo respetas, podrías liarla bien parda en el sistema de particiones de tu dispositivo, haciendo difícil su recuperación.

Y, en el próximo post, vendrá la parte más escabrosa de todo este proceso de compilación de Halium, de ahí que lo considere por separado.


Un saludo
El siguiente usuario dijo gracias: shelllavie

Por favor, Identificarse para unirse a la conversación.

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto

Vea nuestra política de cookies y enlaces de interés aquí