Wpis z mikrobloga

Wygrzebałem z szafy starego NASa Seagate blackarmor 220. Zdecydowałem że potraktuję go jako platformę do zabawy z embedded linuxem.
Przylutowalem już kabelki i uzyskałem dostęp do uboota.
Planuje więc przegrać uboota na jakąś współczesną wersję (sprawdziłem - jest) i zainstalować jakiegoś minimalnego Linuxa (daje się zainstalować Debiana 10). Zrobiłem szybki przegląd internetu i ostatecznie porzuciłem nadzieję że zrobię z tego sprzętu NASa. Na 32MB pamięci programu i 128MB RAMu nie postawi się żadnego webservera.

Chciałbym więc w ramach zabawy spróbować zwiększyć ilość pamięci programu przez zajęcie części pamięci RAM i poleganiu na mechanizmie cache procesora dla programu w ramie.

Robił ktoś kiedyś coś takiego? Czy Linux ma wsparcie dla takich mechanizmów? Spotkałem się z takim rozwiązaniem na innej rodzinie procesorów ale rozwiązanie było bare metalowe i przy pisaniu kazdej funkcji decydowało się w której sekcji pamięci dana funkcja wyląduje.

#linux #programowanie #embedded
  • 15
@LazyInitializationException: Podaj proszę jeden działający soft NAS na takim sprzęcie.
Wszystko można pisać bare metalowo - to jest truizm. Ja chciałbym skorzystać z gotowego softu a nie tworzyć całość od zera.

Btw. Pracuję w embedded od kilku dobrych lat i wiem z doświadczenia że nawet na 32kB da się zmiescic sporo funkcjonalności.
@LazyInitializationException: Widzisz różnicę pomiędzy serwerem FTP a NASem? ( ͡º ͜ʖ͡º)

@keton22: Nie pomyślałem o openwrt! Dzięki za pomysł. Znalazłem już jakiś magików co ownCloud dali radę odpalić.

Btw. Ciągle chętnie usłyszę o możliwościach linuxa w temacie wykrzystania ramu jako pamięci programu (zakładam tu oczywiście że uboot musiałby jakoś sprytnie to powgrywać)
@weller: jak nie chcesz robić z tego routera to sprawdź jeszcze buildroot. OpenWRT to zestaw pakietów buildroot + pare tooli specyficznych dla routerów. A jak ci ciasno to zrób extroota i postaw rootfs na jakimś USB czy innej karcie SD. Pod OWRT są gotowe poradniki.
@keton22: Wiesz może jak działa extroot? Byłem przekonany że SOCe mogą wykonywać kod tylko umieszczony w fizycznej przestrzeni adresowej a tu widzę że kod można mieć nawet na karcie SD (której na 100% nie można zmapować do przestrzeni adresowej)
SOCe mogą wykonywać kod tylko umieszczony w fizycznej przestrzeni adresowej


@weller: mylisz SoC z MCU.
Tylko stage 1 bootloader jest wykonywany spod jakiegoś nanego adresu bo jakoś trzeba zacząć. Potem już ładuje się to co bootloader każe.
Nie wiem jaki dokładnie tam SoC siedzi ale na 99% to jest "execute from ram". Czyli wystarczy załadować kod do RAMu i skoczyć do adresu.
W ARMach masz tak że jak już załaduje się
@keton22: > Tylko stage 1 bootloader jest wykonywany spod jakiegoś nanego adresu bo jakoś trzeba zacząć. Potem już ładuje się to co bootloader każe.

Wg. mnie procesor nie jest w stanie pobrać instrukcji do wykonania której nie ma w przestrzeni adresowej (przecież instrukcja load ma w parametrze adres). Z tego co rozumiem bootloader w przypadku extroot pakuje część pamięci programu do ramu. Teraz weźmy przykład że SoC ma 128MB RAMu, wydzielamy
@keton22: Dla jasności - Nie neguję oczywiście możliwości przegrywania softu. Oczywistym jest że można wciągnąć go z dowolnego medium. Pytam właśnie o ten szczególny przypadek opisany wyżej
@weller: trochę znowu mieszasz 2 sprawy. W MCU "pamięć stała" czyli zwykle flash może być w przestrzeni adresowej CPU. W MCU także zdarza się system o właściwości "execute from flash" gdzie nie musisz kopiować programu do ramu.
W SoC storage nie istnieje dla CPU. Owszem CPU może mieć wczytany program który wykonując się obsłuży jakiś storage i skopiuje jego zawartość do RAM. Ale wykonanie kodu idzie z RAM. I wtedy masz
@keton22: Dzięki za wytłumaczenie. O tyle tą wysokopoziomową warstwę w miarę rozumiem (gdzie co się montuje, kto kogo startuje etc.), to działanie tych linuxowych driverów zarządzających pamięcią wymyka się w tej chwili moim możliwościom poznawczym. Znajdę jakąś książkę w temacie albo zerknę w dokumentację kernela.

W każdym razie, dzięki za tak obszerne odpowiedzi. Wychodzi na to że pewne rzeczy które są oczywiste w linuxie, w baremetalowych rozwiązaniach (w których pracuję) urastają