Porting Alpine Linux ke RISC-V

Setelah berbulan-bulan menunggu yang luar biasa, saya baru saja menerima HiFive Unleashed saya, dan itu sangat keren. Bagi mereka yang tidak up to date, HiFive Unleashed adalah single-board RISC-V pertama dengan dukungan Linux, yang berorientasi pada konsumen. Jika belum jelas, RISC-V adalah arsitektur set instruksi terbuka , dan HiFive adalah prosesor terbuka yang mengimplementasikannya. Dan di sini dia ada di meja makan saya:


Papannya sangat keren . Dalam beberapa bulan mendatang, saya akan mencoba menyiapkan segala sesuatu yang diperlukan untuk layanan integrasi terus-menerus builds.sr.ht , di mana seluruh port Alpine Linux akan diotomatisasi, serta pemasangan sistem operasi lain (termasuk non-Linux) dan program pengguna yang Anda inginkan port ke RISC-V. Saya cukup yakin bahwa ini akan menjadi proyek pertama pada peralatan RISC-V, terbuka untuk umum.

Ada dua tahap porting sistem operasi ke arsitektur baru: bootstrap (bootstrap) dan ... sebenarnya, porting. Karena tidak ada istilah yang lebih baik. Untuk bootstrap, kita memerlukan cross-compiler, kita perlu port libc dan cross-compile elemen dasar. Bootstrap berakhir ketika sistem mampu melakukan hosting sendiri , yaitu, ia dapat mengkompilasi dirinya sendiri. Proses "porting" melibatkan kompilasi semua paket yang tersedia untuk sistem operasi Anda. Prosesnya dapat memakan waktu dan umumnya otomatis.

Langkah pertama adalah cross-compiler. Dukungan RISC-V muncul di binutils 2.28 dan gcc 7.1 beberapa rilis yang lalu, Anda tidak bisa khawatir tentang itu. Sudah cukup untuk mengumpulkan kedua kompiler dengan parameter --target=riscv64-linux-musl . Bagian penting lainnya adalah library C standar atau libc. Tidak seperti kompiler C, langkah ini memerlukan beberapa upaya di pihak saya, karena Alpine Linux didasarkan pada musl libc, dan port-nya untuk RISC-V belum lengkap dan belum termasuk dalam cabang utama.

Tetapi ada tambalan untuk mendukung RISC-V, meskipun belum pernah diuji pada skala ini. Oleh karena itu, saya menemukan beberapa bug yang saya tulis beberapa tambalan ( 1 , 2 , 3 ). Memiliki distribusi yang berfungsi berdasarkan port RISC-V adalah argumen yang meyakinkan yang mendukung kematangan versi porting, jadi saya senang saya menangkap bug ini. Sampai saat itu, Anda harus secara manual menambahkan port dan tambalan Anda ke paket musl Alpine Linux.

Kompiler C dan implementasi libc membuka pintu untuk porting sejumlah besar perangkat lunak ke platform Anda. Langkah selanjutnya adalah mengidentifikasi dan mentransfer paket yang diperlukan untuk sistem hosting mandiri. Di sini, di Alpine ada skrip hebat yang menyiapkan cross-compiler dan membangun sistem basis. Banyak (jika tidak sebagian besar) dari paket ini memerlukan perbaikan, konfigurasi, dan intervensi manual - ini bukan solusi yang sudah jadi, tetapi alat yang sangat berguna. Paket yang paling penting pada tahap ini adalah alat asli (yaitu, kompiler tidak hanya mengkompilasi, tetapi juga berjalan di bawah RISC-V), pengelola kata sandi itu sendiri dan berbagai hal bermanfaat lainnya, seperti tar, patch, openssl dan sebagainya.

Setelah paket yang diperlukan telah dikompilasi dan sistem dapat mengkompilasi dirinya sendiri, proses migrasi yang panjang dimulai. Di sini, biasanya bijaksana untuk meninggalkan cross-compiler dan memulai rakitan asli jika perangkat kerasnya cukup cepat. Ini adalah kompromi karena sistem RISC-V sedikit lebih lambat dari mesin boot x86_64 saya, tetapi banyak paket membutuhkan banyak konfigurasi manual dan koreksi untuk kompilasi silang. Waktu yang dihemat karena kompensasi ini untuk perakitan yang lebih lambat (walaupun sebenarnya saya sangat terkesan dengan kecepatan HiFive Unleashed. Hambatan utama adalah driver mmcblk, tetapi segera setelah file masuk ke cache kernel, semuanya menjadi sangat cepat dan menyenangkan).

Ada ribuan paket, jadi langkah selanjutnya bagi saya (dan semua orang yang bekerja pada migrasi) adalah mengotomatiskan proses selanjutnya. Bagi saya, langkah perantara adalah integrasi dengan layanan builds.sr.ht untuk mengatur pekerjaan saya sendiri dan membuat siklus tersedia untuk orang lain yang tertarik pada RISC-V. Tidak semua paket akan diangkut secara otomatis - tetapi banyak juga yang akan diangkut! Setelah Anda port bahasa pemrograman Anda - C, Python, Perl, Ruby (Saya sudah melakukan ini!), Dll - sebagian besar program open source cukup portabel di seluruh arsitektur. Salah satu tujuan utama saya di sr.ht adalah untuk mendorong distribusi perangkat lunak portabel!

Jika ada pembaca yang memiliki perangkat keras RISC-V sendiri atau ingin mencobanya dengan qemu, berikut adalah repositori Alpine Linux untuk RISC-V . Sesuatu seperti ini akan menginstalnya di / mnt:

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

Jalankan /bin/busybox --install dan apk fix pada boot pertama. Pekerjaan masih berlangsung, jadi mengatur sisanya adalah latihan untuk pembaca sampai saya membersihkan proses dan membuat skrip instalasi yang normal. Semoga beruntung



Kesimpulannya: terima kasih banyak telah membantu anggota komunitas #riscv di Freenode, serta pengembang Debian dan Fedora, yang sebagian besar membuka jalan dan merilis tambalan untuk banyak program! Tapi saya mendapat semua kesenangan bergerak musl, jadi jalannya tidak sepenuhnya bersih :)

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


All Articles