Después de meses de insoportables meses de espera, recientemente recibí mi
HiFive Unleashed , y es increíblemente genial. Para aquellos que no están actualizados, HiFive Unleashed es la primera placa única
RISC-V con soporte de Linux, orientada al consumidor. Si aún no se comprende, RISC-V es una
arquitectura de conjunto de instrucciones abierta y libre, y HiFive es un procesador abierto que la implementa. Y aquí está él en mi mesa de comedor:
El tablero es realmente
genial . En los próximos meses intentaré preparar todo lo necesario para el servicio de integración continua
builds.sr.ht , a través del cual se automatizará el resto del puerto Alpine Linux, así como la instalación de cualquier otro sistema operativo (incluidos los que no sean Linux) y los programas de usuario que desee. puerto a RISC-V. Estoy bastante seguro de que este será el primer proyecto de este tipo en equipos RISC-V, abierto al público.
Hay dos etapas para portar el sistema operativo a la nueva arquitectura: bootstrap (bootstrapping) y ... en realidad, portar. Por falta de un mejor término. Para arrancar, necesitamos un compilador cruzado, necesitamos portar libc y compilar los elementos básicos.
Bootstrap finaliza cuando el sistema es capaz de
autohospedarse , es decir, puede compilarse. El proceso de "portabilidad" implica compilar todos los paquetes disponibles para su sistema operativo. El proceso puede llevar mucho tiempo y, en general, automatizarse.
El primer paso es un compilador cruzado. El soporte RISC-V apareció en binutils 2.28 y gcc 7.1 hace varios lanzamientos, no puede preocuparse por eso. Es suficiente recopilar ambos compiladores con el parámetro
--target=riscv64-linux-musl
. Otra parte importante es la biblioteca C estándar o libc. A diferencia del compilador de C, este paso requirió algunos esfuerzos de mi parte, ya que Alpine Linux se basa en musl libc, y su puerto para RISC-V aún no está completo y no está incluido en la rama principal.
Pero hay un
parche para admitir RISC-V, aunque nunca se ha probado en esta escala. En consecuencia, me encontré con varios errores para los que escribí varios parches (
1 ,
2 ,
3 ). Tener una distribución funcional basada en el puerto RISC-V es un argumento convincente a favor de la madurez de la versión portada, así que me alegro de haber detectado estos errores. Hasta ese momento, tenía que agregar manualmente el puerto y sus parches al paquete de musl Alpine Linux.
El compilador de C y la implementación de libc abren la puerta para portar una gran cantidad de software a su plataforma. El siguiente paso es identificar y transferir los paquetes necesarios para el sistema de autohospedaje. Aquí en Alpine hay un gran
script que prepara un compilador cruzado y construye el sistema base. Muchos (si no la mayoría) de estos paquetes requerían reparación, configuración e intervención manual; esta no es una solución preparada, sino una herramienta increíblemente útil. Los paquetes más importantes en esta etapa son las herramientas nativas (es decir, el compilador no solo compila, sino que también se ejecuta bajo RISC-V), el administrador de contraseñas en sí y varias otras cosas útiles, como tar, parche, openssl, etc.
Una vez que se han compilado los paquetes necesarios y el sistema puede compilarse, comienza un largo proceso de migración. Aquí, generalmente es aconsejable abandonar el compilador cruzado e iniciar el ensamblaje nativo si el hardware es lo suficientemente rápido. Esto es un compromiso porque el sistema RISC-V es un poco más lento que mi máquina de arranque x86_64, pero muchos paquetes requieren mucha configuración manual y correcciones para la compilación cruzada. El tiempo ahorrado debido a esto compensa el ensamblaje más lento (aunque, de hecho, estoy muy impresionado con la velocidad de HiFive Unleashed. El principal cuello de botella es el controlador mmcblk, pero tan pronto como los archivos entran en el caché del núcleo, todo se vuelve muy rápido y agradable).
Hay miles de paquetes, por lo que el siguiente paso para mí (y para todos los que trabajan en la migración) es automatizar el resto del proceso. Para mí, el paso intermedio es la integración con el servicio builds.sr.ht para organizar mi propio trabajo y hacer que los ciclos estén disponibles para otras personas interesadas en RISC-V. No todos los paquetes serán portados automáticamente, ¡pero muchos sí! Una vez que transfiere sus lenguajes de programación (C, Python, Perl, Ruby (¡ya lo he hecho!), Etc.), la mayoría de los programas de código abierto son bastante portátiles en todas las arquitecturas. ¡Uno de mis objetivos principales en sr.ht es fomentar la distribución de software portátil!
Si alguno de los lectores tiene su propio hardware RISC-V o quiere probarlo con qemu, aquí está
el repositorio Alpine Linux para RISC-V . Algo como esto lo instalará en / mnt:
apk add \ -X https://mirror.sr.ht/alpine/main/ \ --allow-untrusted \ --arch=riscv64 \ --root=/mnt \ alpine-base alpine-sdk vim chrony
Ejecutar
/bin/busybox --install
y
apk fix
en el primer arranque. El trabajo aún está en curso, por lo que configurar el resto es un ejercicio para el lector hasta que borre el proceso y realice un script de instalación normal. Buena suerte
En conclusión: ¡muchas gracias por ayudar a los miembros de la comunidad #riscv en Freenode, así como a los desarrolladores de Debian y Fedora, que en gran medida despejaron el camino y lanzaron parches para muchos programas! Pero obtuve toda la alegría de mover musl, por lo que el camino no estaba completamente limpio :)