Depois de meses de meses excruciantes de espera, recebi recentemente o meu
HiFive Unleashed , e é incrivelmente legal. Para quem não está atualizado, o HiFive Unleashed é a primeira placa única
RISC-V com suporte a Linux, orientada para o consumidor. Se ainda não estiver claro, o RISC-V é uma
arquitetura aberta e gratuita do
conjunto de instruções e o HiFive é um processador aberto que a implementa. E aqui está ele na minha mesa de jantar:
O conselho é muito
legal . Nos próximos meses, tentarei preparar tudo o que for necessário para o serviço de integração contínua
builds.sr.ht , através do qual o restante da porta Alpine Linux será automatizado, bem como a instalação de quaisquer outros sistemas operacionais (incluindo não Linux) e programas de usuário que você deseja porta para RISC-V. Tenho certeza de que este será o primeiro projeto desse tipo em equipamentos RISC-V, aberto ao público.
Existem dois estágios de portar o sistema operacional para a nova arquitetura: bootstrap (bootstrapping) e ... na verdade, portar. Por falta de um termo melhor. Para inicializar, precisamos de um compilador cruzado, precisamos portar a libc e compilar os elementos básicos.
O Bootstrap termina quando o sistema é capaz de se
auto-hospedar , ou seja, pode se compilar. O processo de "portar" envolve compilar todos os pacotes disponíveis para o seu sistema operacional. O processo pode ser demorado e geralmente automatizado.
O primeiro passo é um compilador cruzado. O suporte ao RISC-V apareceu nos binutils 2.28 e gcc 7.1 várias versões atrás, você não pode se preocupar com isso. Basta coletar os dois compiladores com o parâmetro
--target=riscv64-linux-musl
. Outra parte importante é a biblioteca C padrão ou libc. Diferentemente do compilador C, essa etapa exigiu alguns esforços da minha parte, pois o Alpine Linux é baseado no musl libc e sua porta para o RISC-V ainda não está completa e não está incluída no ramo principal.
Mas há um
patch para oferecer suporte ao RISC-V, embora nunca tenha sido testado nessa escala. Conseqüentemente, me deparei com vários bugs para os quais escrevi vários patches (
1 ,
2 ,
3 ). Ter uma distribuição funcional baseada na porta RISC-V é um argumento convincente para a maturidade da versão portada, por isso estou feliz por ter detectado esses bugs. Até aquele momento, você tinha que adicionar manualmente a porta e seus patches ao pacote musl do Alpine Linux.
O compilador C e a implementação libc abrem as portas para portar uma enorme quantidade de software para sua plataforma. O próximo passo é identificar e transferir os pacotes necessários para o sistema de hospedagem automática. Aqui no Alpine, há um ótimo
script que prepara um compilador cruzado e cria o sistema básico. Muitos (se não a maioria) desses pacotes exigiam correção, configuração e intervenção manual - essa não é uma solução pronta, mas uma ferramenta incrivelmente útil. Os pacotes mais importantes nesse estágio são ferramentas nativas (ou seja, o compilador não apenas compila, mas também é executado no RISC-V), o próprio gerenciador de senhas e várias outras coisas úteis, como tar, patch, openssl e assim por diante.
Depois que os pacotes necessários foram compilados e o sistema pode se compilar, um longo processo de migração é iniciado. Aqui, geralmente é aconselhável abandonar o compilador cruzado e iniciar o assembly nativo se o hardware for rápido o suficiente. Isso é um compromisso, porque o sistema RISC-V é um pouco mais lento que minha máquina de inicialização x86_64, mas muitos pacotes exigem muitas configurações e correções manuais para compilação cruzada. O tempo economizado devido a isso compensa a montagem mais lenta (embora na verdade eu esteja muito impressionado com a velocidade do HiFive Unleashed. O principal gargalo é o driver mmcblk, mas assim que os arquivos entram no cache do kernel, tudo fica muito rápido e agradável).
Existem milhares de pacotes, portanto, o próximo passo para mim (e para todos que trabalham na migração) é automatizar o restante do processo. Para mim, a etapa intermediária é a integração com o serviço builds.sr.ht para organizar meu próprio trabalho e disponibilizar ciclos para outras pessoas interessadas no RISC-V. Nem todos os pacotes serão portados automaticamente - mas muitos serão! Depois de portar suas linguagens de programação - C, Python, Perl, Ruby (eu já fiz isso!), Etc. - a maioria dos programas de código aberto é razoavelmente portátil nas arquiteturas. Um dos meus principais objetivos no sr.ht é incentivar a distribuição de software portátil!
Se algum dos leitores tiver seu próprio hardware RISC-V ou quiser experimentá-lo com o qemu, aqui está
o repositório Alpine Linux para RISC-V . Algo assim irá instalá-lo em / mnt:
apk add \ -X https://mirror.sr.ht/alpine/main/ \ --allow-untrusted \ --arch=riscv64 \ --root=/mnt \ alpine-base alpine-sdk vim chrony
Execute
/bin/busybox --install
e
apk fix
na primeira inicialização. O trabalho ainda está em andamento, portanto, configurar o restante é um exercício para o leitor até que eu limpe o processo e faça um script de instalação normal. Boa sorte
Conclusão: muito obrigado por ajudar os membros da comunidade #riscv no Freenode, bem como os desenvolvedores Debian e Fedora, que em grande parte abriram caminho e lançaram patches para muitos programas! Mas eu tive toda a alegria de mudar musl, então a estrada não estava completamente limpa :)