Najmniejsza wbudowana dystrybucja Linuksa?

19

Chciałbym zapytać ekspertów tam. Jaka jest najlepsza dystrybucja linux dla:

  • Pamięć flash ~ 700 KB
  • Ram ~ 256 KB
  • Procesor: wysokiej klasy kora ramienia M3 (np. Z rodziny STM32)

Wymagane moduły: - rdzeń jądra - podstawowy zestaw sterowników: USB / sieć (dla Wi-Fi - bez AP, tylko klient, bez zabezpieczeń) / SPI / Uart / I2C

Czy to w ogóle możliwe, czy marzę?

Chodzi o to, aby użyć wysokiej klasy 5 $ CortexM3 i nie używać żadnych zewnętrznych pamięci, aby móc cieszyć się gotowymi sterownikami dla SDIO / WiFi itp.

  • Zaktualizowałem pytanie, wyjaśniając w sprawie Wi-Fi. WiFi w tym sensie, że jest to prosty, uruchamiany klient młyna. Nic szczególnego, być może płaczę, jeśli dam radę.

  • Kolejna aktualizacja: co powiesz na uCLinux?

Szczery
źródło

Odpowiedzi:

26

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.

Jeremy Kerr
źródło
1
Świetna odpowiedź ... Jestem zaskoczony, widząc, że samo jądro Linuksa jest tak ciężkie. Mam pytanie następcze .. Czy są jakieś opakowania, które pozwalają mi używać sterowników Linuksa w innych systemach operacyjnych? W Linuksie podoba mi się dostępność sterowników. Każdy dotykany przeze mnie sprzęt ma sterownik linuksowy i zawsze jest problem z portowaniem, jedynym powodem, dla którego interesuję się Linuksem, są sterowniki, stąd pytanie.
Frank
Tylko uwaga na temat linku rozruchowego jądra, widziałem w kolejnych postach Erica, że ​​udało mu się uzyskać skompresowany obraz jądra do 190K i rozpakować około 360K, więc teoretycznie możesz go zmieścić w swojej pamięci flash bez kompresji. Więcej informacji: elinux.org/Linux_Tiny jednak nie wiem, jaki jest status projektu.
Mihailo
5

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.

nemik
źródło
być może masz rację, ale zaktualizowałem to pytanie z wyjaśnieniem w sprawie WiFi .. Nie potrzebowałbym wszystkich protokołów, dchp / ip i podstawowych gniazd ..
Frank
4

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.

Mihailo
źródło
@mihalo dziękuję za wskazanie uclinux +1 za to. Zadałem pytanie na ten temat .. Doceń, czy możesz mi pomóc ...
Frank
Niestety nie mam z tym dużego doświadczenia, spojrzałem na porty ucLinux i wszystkie wymienione tam płyty mają zewnętrzną pamięć RAM. Najmniejsze jądro (nieskompresowane), które widziałem, było dla ADI Blackfin - coś w rodzaju 400 KB, ale to nie jest ARM, a dla ARM może być znacznie większy. W przypadku mikroprocesorów Atmels ARM było to około 1,5 MB i wszystkie używały zewnętrznej pamięci RAM.
Mihailo,
Mihailo, dziękuję za poświęcenie czasu na rozejrzenie się.
Frank
2

Możesz rozważyć NuttX jako alternatywę, jeśli naprawdę chcesz zgodności z POSIX na małej platformie innej niż MMU.

Thor
źródło
3
Wygląda to całkiem fajnie, ale może być warte włączenia niektórych zalet / wad w porównaniu z Linuksem, aby uczynić to bardziej kompletną odpowiedzią.
PeterJ
2

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.

Jan Dorniak
źródło
Doskonały artykuł, który zawiera koszty BOM za uruchomienie uClinux na M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman
0

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.

Fred Basset
źródło