Powiedziałbym, że śnisz. Głównym problemem będzie ograniczona pamięć RAM.
W 2004 roku Ericowi Beidermanowi udało się uruchomić jądro z 2,5 MB pamięci RAM i usunięto wiele funkcji.
Było to jednak na x86 i mówisz o ARM. Próbowałem więc zbudować najmniejsze możliwe jądro ARM dla „wszechstronnej” platformy (jednej z najprostszych). Wyłączyłem wszystkie konfigurowalne opcje, w tym te, których szukasz (USB, WiFi, SPI, I2C), aby zobaczyć, jak małe będą. Odnoszę się tutaj do jądra, które nie obejmuje żadnych komponentów przestrzeni użytkownika.
Dobra wiadomość: zmieści się w twojej pamięci flash. Wynikowy zImage ma 383204 bajtów.
Zła wiadomość: przy 256 kB pamięci RAM nie będzie możliwe uruchomienie:
$ size obj/vmlinux
text data bss dec hex filename
734580 51360 14944 800884 c3874 obj/vmlinux
Segment .text jest większy niż dostępna pamięć RAM, więc jądro nie może się rozpakować, nie mówiąc już o przydzieleniu pamięci do rozruchu, ani tym bardziej uruchomieniu niczego użytecznego.
Jednym obejściem byłoby użycie obsługi wykonania w miejscu (CONFIG_XIP), jeśli twój system to obsługuje (tzn. Może pobierać instrukcje bezpośrednio z Flasha). Oznacza to jednak, że twoje jądro musi zmieścić się w nieskompresowanym flashu i 734kB> 700kB. Ponadto sekcje .data i .bss mają łącznie 66 kB, pozostawiając około 190 kB dla wszystkich innych elementów (tj. Wszystkich dynamicznie alokowanych struktur danych w jądrze).
To tylko jądro. Bez potrzebnych sterowników ani przestrzeni użytkownika.
Tak, potrzebujesz trochę więcej pamięci RAM.
IMO, śnisz. Zwłaszcza z USB, siecią i 802.11 / wifi. Po prostu nie sądzę, że możesz to zrobić, a M3 to naprawdę odcinek.
OpenWRT to jedna z najmniejszych i najbardziej możliwych do osadzenia dystrybucji Linuksa, jaką znam do pracy w sieci, i ciężko jest uzyskać ją poniżej 2 MB, szczególnie w przypadku Wi-Fi.
Spróbuj spojrzeć na wysokiej klasy układy ARM, jeśli tego naprawdę chcesz, lub zastosuj układy Broadcom lub Atheros SoC, które są obecnie powszechne w routerach.
źródło
Czy masz procesor MMU? Jeśli nie, możesz zajrzeć na: http://www.uclinux.org/, który powinien dać ci znacznie mniejszy rozmiar jądra niż wspomniano. Działa z niektórymi układami CortmelM3 Atmel, więc może działać z twoim. Nie korzystałem z niego, więc jest to tylko spekulacja. Doh, właśnie widziałem, że to pytanie zostało zaktualizowane - cóż, jeśli nie masz MMU (czego prawdopodobnie nie masz), nie możesz użyć „normalnego” jądra i musisz użyć ucLinux.
źródło
Możesz rozważyć NuttX jako alternatywę, jeśli naprawdę chcesz zgodności z POSIX na małej platformie innej niż MMU.
źródło
Nie pamiętam szczegółów, ale jest firma, która produkuje płyty z STM32F4 z systemem uCLinux, oprogramowanie można pobrać, ale mają one zarówno zewnętrzną pamięć RAM, jak i flash na tych płytach.
Na marginesie, cena jest tak wysoka, że lepiej jest zdobyć Pi lub Pine64, chyba że chcesz, aby to było doświadczenie edukacyjne. Nasza firma przyjrzała się temu i zastanowiła się nad kosztami rozwoju i zdecydowała, że jeśli będziemy uruchamiać cokolwiek na wbudowanym Linuksie przy użyciu stm32f4, jest to niewykonalne ekonomicznie, po prostu licząc koszt części.
źródło
uCLinux prawdopodobnie będzie działać. Jednak nie będziesz mieć ochrony pamięci w systemie, ponieważ nie masz MMU. Oznacza to, że każda awaria w dowolnej aplikacji może doprowadzić do awarii całego systemu. Możesz również napotkać problemy z fragmentacją pamięci bez MMU. Dlaczego nie spojrzeć na jeden z Titar Sitar? Są one nadal dość tanie i można na nich uruchomić pełny system Linux, który będzie znacznie bardziej elastyczny.
źródło