Distro linux tertanam terkecil?

19

Saya ingin bertanya kepada para ahli di luar sana .. Untuk apa distro linux tertanam terbaik:

  • Memori flash ~ 700Kb
  • Ram ~ 256Kb
  • Prosesor: High end arm cortex M3 (sesuatu dari keluarga STM32 misalnya)

Modul yang diperlukan: - Inti kernel - Kumpulan driver dasar: USB / Jaringan (untuk WiFi - Tanpa AP, hanya klien, tanpa keamanan) / SPI / Uart / I2C

Apakah ini mungkin atau apakah saya bermimpi?

Idenya adalah untuk menggunakan CortexM3 high-end $ 5 dan tidak menggunakan memori eksternal sehingga saya dapat menikmati driver yang siap untuk SDIO / WiFi dll.

  • Saya memperbarui pertanyaan dengan klarifikasi tentang WiFi. WiFi dalam arti bahwa itu adalah, sederhana menjalankan klien pabrik. Tidak ada yang mewah, mungkin menangis jika saya bisa cocok.

  • Pembaruan lain: Bagaimana dengan uCLinux?

jujur
sumber

Jawaban:

26

Saya akan mengatakan Anda sedang bermimpi. Masalah utama adalah keterbatasan RAM.

Pada tahun 2004, Eric Beiderman berhasil mendapatkan boot kernel dengan RAM 2.5MB , dengan banyak fungsi dihapus.

Namun, itu pada x86, dan Anda sedang berbicara tentang ARM. Jadi saya mencoba membangun kernel ARM sekecil mungkin, untuk platform 'serbaguna' (salah satu yang paling sederhana). Saya mematikan semua opsi yang dapat dikonfigurasi, termasuk yang Anda cari (USB, WiFi, SPI, I2C), untuk melihat seberapa kecil yang didapat. Sekarang, aku hanya mengacu pada kernel di sini, dan ini tidak termasuk setiap komponen userspace.

Berita baiknya: ini akan cocok dengan flash Anda. zImage yang dihasilkan 383.204 bytes.

Berita buruknya: dengan 256kB RAM, itu tidak akan bisa di-boot:

$ size obj/vmlinux
  text     data     bss     dec     hex filename
734580    51360   14944  800884   c3874 obj/vmlinux

Segmen .text lebih besar dari RAM Anda yang tersedia, sehingga kernel tidak dapat mendekompresi, apalagi mengalokasikan memori untuk boot, apalagi menjalankan apa pun yang bermanfaat.

Salah satu solusinya adalah menggunakan dukungan execut-in-place (CONFIG_XIP), jika sistem Anda mendukungnya (yaitu, ia dapat mengambil instruksi langsung dari Flash). Namun, itu berarti kernel Anda harus sesuai dengan yang tidak terkompresi dalam flash, dan 734kB> 700kB. Selain itu, bagian .data dan .bss total 66kB, meninggalkan sekitar 190kB untuk yang lainnya (yaitu, semua struktur data yang dialokasikan secara dinamis di kernel).

Itu hanya kernel. Tanpa driver yang Anda butuhkan, atau ruang pengguna apa pun.

Jadi, ya, Anda akan membutuhkan sedikit lebih banyak RAM.

Jeremy Kerr
sumber
1
Jawaban yang bagus .. Saya terkejut melihat bahwa kernel linux telanjang ini sangat berat .. Saya punya semacam pertanyaan lanjutan .. Apakah ada pembungkus di luar sana yang memungkinkan saya untuk menggunakan driver linux dengan OS lain? Apa yang saya sukai tentang Linux adalah ketersediaan driver .. Setiap perangkat keras yang saya sentuh memiliki driver linux dan selalu sakit untuk port ini, satu-satunya alasan saya tertarik pada Linux adalah driver yang sebenarnya, maka pertanyaannya.
Frank
Hanya sebuah catatan di sana tentang tautan boot kernel, saya melihat dalam posting berikut oleh Eric bahwa ia berhasil mendapatkan image kernel yang dikompresi ke 190K dan tidak terkompresi di sekitar 360K sehingga secara teoritis Anda mungkin memasukkannya ke dalam flashdisk Anda tanpa kompresi. Info lebih lanjut: elinux.org/Linux_Tiny namun saya tidak tahu apa status proyek.
Mihailo
5

IMO, Anda sedang bermimpi. Apalagi dengan USB, jaringan dan 802.11 / wifi. Saya hanya tidak berpikir Anda bisa melakukan itu dan M3 benar-benar peregangan.

OpenWRT adalah salah satu distro Linux terkecil dan paling dapat ditanam yang saya tahu untuk jaringan dan sulit untuk mendapatkannya di bawah 2MB, terutama dengan Wifi.

Cobalah melihat ke chip ARM yang lebih tinggi-end jika itu yang Anda inginkan atau pergi dengan Broadcom atau Atheros SoC yang saat ini umum di router.

nemik
sumber
Anda mungkin benar, namun saya memperbarui pertanyaan dengan klarifikasi tentang WiFi .. Saya tidak akan memerlukan semua protokol, dchp / ip dan soket dasar ..
Frank
4

Apakah Anda memiliki MMU pada prosesor? Jika tidak, Anda mungkin ingin melihat: http://www.uclinux.org/ yang seharusnya memberi Anda ukuran kernel yang jauh lebih kecil daripada yang disebutkan. Ia bekerja untuk beberapa chip CortexM3 Atmel jadi mungkin bekerja untuk Anda. Saya belum menggunakannya jadi ini hanya spekulatif. Doh, saya baru saja melihat bahwa pertanyaan telah diperbarui - yah jika Anda tidak memiliki MMU (yang mungkin tidak Anda lakukan), Anda tidak dapat menggunakan kernel "normal" dan Anda harus menggunakan ucLinux.

Mihailo
sumber
@mihalo terima kasih untuk menunjukkan uclinux 1 untuk itu. Saya telah mengajukan pertanyaan tentang itu .. Menghargai jika Anda dapat membantu ..
Frank
Sayangnya saya tidak punya banyak pengalaman dengan ini, saya melihat port ucLinux dan semua papan disebutkan memiliki RAM eksternal. Terkecil kernel (terkompresi) saya melihat itu untuk ADI Blackfin - sesuatu seperti 400kb tapi itu tidak ARM dan ARM bisa secara signifikan lebih besar. Untuk mikroprosesor Atmels ARM sekitar 1,5 MB dan mereka semua menggunakan RAM eksternal.
Mihailo
Mihailo terima kasih telah meluangkan waktu untuk melihat-lihat ..
Frank
2

Anda mungkin ingin mempertimbangkan NuttX sebagai alternatif jika Anda benar-benar ingin kepatuhan POSIX dalam platform kecil, non-MMU.

Thor
sumber
3
Itu terlihat cukup rapi, tetapi mungkin layak termasuk beberapa pro / kontra dibandingkan dengan Linux untuk membuatnya menjadi jawaban yang lebih lengkap.
PeterJ
2

Saya tidak ingat secara spesifik, tetapi ada perusahaan yang membuat papan dengan STM32F4 menjalankan uCLinux, perangkat lunak ini dapat diunduh, tetapi mereka memiliki RAM eksternal dan flash pada papan itu.

Sebagai catatan tambahan harganya sangat tinggi sehingga Anda lebih baik mendapatkan Pi atau Pine64, kecuali jika Anda menginginkan ini sebagai pengalaman belajar. Perusahaan kami melihat ke dalamnya dan mempertimbangkan biaya pengembangan dan memutuskan bahwa jika kami menjalankan apa pun di Linux tertanam menggunakan stm32f4 tidak layak secara ekonomi, hanya menghitung biaya komponen.

Jan Dorniak
sumber
Artikel luar biasa yang mencakup biaya BOM untuk menjalankan uClinux pada M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman
0

uCLinux mungkin akan berfungsi. Namun Anda tidak akan memiliki perlindungan memori pada sistem karena Anda tidak memiliki MMU. Ini berarti setiap kerusakan pada aplikasi apa pun dapat menjatuhkan seluruh sistem. Anda juga dapat mengalami masalah fragmentasi memori tanpa MMU. Mengapa tidak melihat salah satu TI Sitaras? Mereka masih cukup murah dan Anda dapat menjalankan Linux penuh pada mereka yang akan jauh lebih fleksibel.

fret basset
sumber