Portage d'Alpine Linux vers RISC-V

Après des mois d'attente atroces, j'ai récemment reçu mon HiFive Unleashed , et c'est incroyablement cool. Pour ceux qui ne sont pas à jour, HiFive Unleashed est la première carte unique RISC-V avec prise en charge Linux, orientée vers le consommateur. S'il n'est pas encore clair, RISC-V est une architecture de jeu d'instructions ouverte et gratuite, et HiFive est un processeur ouvert qui l'implémente. Et le voici sur ma table à manger:


La planche est vraiment cool . Dans les mois à venir, j'essaierai de préparer tout le nécessaire pour le service d'intégration continue builds.sr.ht , à travers lequel le reste du port Alpine Linux sera automatisé, ainsi que l'installation de tout autre système d'exploitation (y compris non-Linux) et des programmes utilisateur que vous souhaitez port à RISC-V. Je suis certain que ce sera le premier projet de ce type sur les équipements RISC-V, ouvert au public.

Il y a deux étapes de portage du système d'exploitation vers la nouvelle architecture: bootstrap (bootstrapping) et ... en fait, portage. Faute d'un meilleur terme. Pour démarrer, nous avons besoin d'un compilateur croisé, nous devons porter libc et compiler de manière croisée les éléments de base. Bootstrap se termine lorsque le système est capable de s'auto-héberger , c'est-à-dire qu'il peut se compiler. Le processus de «portage» implique la compilation de tous les packages disponibles pour votre système d'exploitation. Le processus peut être long et généralement automatisé.

La première étape est un compilateur croisé. La prise en charge de RISC-V est apparue dans binutils 2.28 et gcc 7.1 il y a plusieurs versions, vous ne pouvez pas vous en soucier. Il suffit de collecter les deux compilateurs avec le paramètre --target=riscv64-linux-musl . Une autre partie importante est la bibliothèque C standard ou libc. Contrairement au compilateur C, cette étape a nécessité quelques efforts de ma part, car Alpine Linux est basé sur musl libc, et son port pour RISC-V n'est pas encore terminé et n'est pas inclus dans la branche principale.

Mais il existe un correctif pour prendre en charge RISC-V, bien qu'il n'ait jamais été testé à cette échelle. En conséquence, je suis tombé sur plusieurs bugs pour lesquels j'ai écrit plusieurs patchs ( 1 , 2 , 3 ). Avoir une distribution de travail basée sur le port RISC-V est un argument convaincant pour la maturité de la version portée, donc je suis content d'avoir attrapé ces bugs. Jusque-là, vous deviez ajouter manuellement le port et vos correctifs au package musl Alpine Linux.

Le compilateur C et l'implémentation libc ouvrent la porte au portage d'une énorme quantité de logiciels sur votre plateforme. L'étape suivante consiste à identifier et à transférer les packages nécessaires pour le système d'auto-hébergement. Ici, dans Alpine, il existe un excellent script qui prépare un compilateur croisé et construit le système de base. Beaucoup (sinon la plupart) de ces packages ont nécessité une réparation, une configuration et une intervention manuelle - ce n'est pas une solution toute faite, mais un outil incroyablement utile. Les packages les plus importants à ce stade sont les outils natifs (c'est-à-dire que le compilateur non seulement compile, mais s'exécute également sous RISC-V), le gestionnaire de mots de passe lui-même et diverses autres choses utiles, telles que tar, patch, openssl, etc.

Une fois que les packages nécessaires ont été compilés et que le système peut se compiler lui-même, un long processus de migration commence. Ici, il est généralement judicieux d'abandonner le compilateur croisé et de démarrer l'assemblage natif si le matériel est assez rapide. C'est un compromis car le système RISC-V est légèrement plus lent que ma machine de démarrage x86_64, mais de nombreux packages nécessitent beaucoup de configuration manuelle et de corrections pour la compilation croisée. Le temps économisé grâce à cela compense l'assemblage plus lent (bien qu'en fait, je suis très impressionné par la vitesse de HiFive Unleashed. Le principal goulot d'étranglement est le pilote mmcblk, mais dès que les fichiers entrent dans le cache du noyau, tout devient très rapide et agréable).

Il y a des milliers de packages, donc la prochaine étape pour moi (et tous ceux qui travaillent sur la migration) est d'automatiser le reste du processus. Pour moi, l'étape intermédiaire est l'intégration avec le service builds.sr.ht pour organiser mon propre travail et mettre des cycles à la disposition des autres personnes intéressées par RISC-V. Tous les packages ne seront pas portés automatiquement - mais beaucoup le seront! Une fois que vous portez vos langages de programmation - C, Python, Perl, Ruby (je l'ai déjà fait!), Etc. - la plupart des programmes open source sont assez portables entre les architectures. L'un de mes principaux objectifs chez sr.ht est d'encourager la distribution de logiciels portables!

Si l'un des lecteurs possède son propre matériel RISC-V ou veut l'essayer avec qemu, voici le référentiel Alpine Linux pour RISC-V . Quelque chose comme ça va l'installer dans / mnt:

 apk add \ -X https://mirror.sr.ht/alpine/main/ \ --allow-untrusted \ --arch=riscv64 \ --root=/mnt \ alpine-base alpine-sdk vim chrony 

Exécutez /bin/busybox --install et apk fix /bin/busybox --install au premier démarrage. Le travail est toujours en cours, donc la configuration du reste est un exercice pour le lecteur jusqu'à ce que j'efface le processus et fasse un script d'installation normal. Bonne chance



En conclusion: merci beaucoup d'avoir aidé les membres de la communauté #riscv sur Freenode, ainsi que les développeurs Debian et Fedora, qui ont largement ouvert la voie et publié des correctifs pour de nombreux programmes! Mais j'ai eu toute la joie de bouger musl, donc la route n'était pas complètement propre :)

Source: https://habr.com/ru/post/fr434382/


All Articles