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.
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.
sumber
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.
sumber
Anda mungkin ingin mempertimbangkan NuttX sebagai alternatif jika Anda benar-benar ingin kepatuhan POSIX dalam platform kecil, non-MMU.
sumber
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.
sumber
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.
sumber