Dynamicznie ladowany kod do ram w ARM7

Witam.

Poszukuje czegoś co pozwoli mi uzyskac prymitywną formę ładowania do pamięci kodu dynamicznego. Zakładam, że "plik" z kodem jest dostepny w postaci ciagu bajtów, posiadam rownież wystarczającą ilośc RAM (powiedzmy 3x wielkośc kodu). W zasadzie poszukuje jakiegoś relokatora który potrafi kod przenieśc poprawnie w dowolne miejsce RAM. Próbuje googlać ale jakoś nie widzę tego na ARM7. Czy taki projekcik powstał? W drugiej kolejności szukam jakiejś koncepcji wołania z tego kodu mojego API zaszytego we flash. W zasadzie nie jest mi to bardzo potrzebne i traktuje to jako ciekawostkę z ktorej moze się coś urodzi. Ma ktoś jakiś namiar na cos ciekawego w tym temacie? bardzo korci mnie aby logika sterowania byla na karcie SD a "system operacyjny" we flash.

Reply to
Sebastian Biały
Loading thread data ...

Wystarczy wygenerować kod, który będzie relokowalny. Można go potem uruchomić w dowolnym kawałku pamięci.

Paweł

Reply to
Paweł

W zasadzie to połowa sukcesu, interesują mnie jeszcze "resources". Nie wiem jak ze wskaźnikami na takie dane, są rownież względne? Powiedzmy, że mam const char* foo="\33\56\0"; Wymagają relokacji czy nie?

Reply to
Sebastian Biały

Czy problem polega na tym, że nie wiesz jak napisać relokowalny kod ?

Paweł

Reply to
Paweł

Problem w tym, że nie wiem jak to poprawnie zrobić. Czy wymaga to wsparcia "systemu operacyjnego", czy też kod bedzie na dzień dobry calkowicie relokowalny: zarówno kod maszynowy jak i "wskaźniki na dane" symulowane choćby const char*. Nie mam dużych doswiadczeń w ARM i nie wiem czy np. nie pojawią się problemy przekraczania odległości względych adresów, brak możliwości skokow poza jakiś zakres, itd. Wole zapytać niż błądzić po omacku.

Reply to
Sebastian Biały

Sebastian Biały pisze:

W zagadnieniu tworzenia kodu relokowalnego są dwie podstawy:

- po pierwsze cały kod wykonywalny stosuje tylko względne skoki i pobrania (względem pc)

- po drugie wszystkie dostępy do danych wymagają adresu bazowego, który wcześniej (przed uruchomieniem kodu) trzeba wpisać do któregośtam rejestru; po szczegóły zapraszam do lektury dokumentacji gcc, szukaj w okolicy flagi -fpic.

Reply to
Adam Dybkowski

Ze swojej strony proponuje zobaczyc/zajzec jak to zostalo zrobine eCosie. Paczka nazywa sie objloader (ecos/packages/services/objloader) i umozliwia zaladowanie object file z romu. (eCos mozna siaciagnac z CVS - info

formatting link
:
formatting link

Reply to
cepu69

cepu69 pisze:

A może w ogóle nie kombinować aż tak tylko napisać normalny loader/relokator? Struktura pliku ELF jest bardzo prosta a w praktyce kod ARM7 kompilowany przez gcc używa 3-4 typów relokacji (i dodatkowo kolejnych 2 trybu Thumb). Wtedy można pozwolić sobie na pełny luz i ładować bezpośrednio pliki ELF. Dla oszczędności miejsca/transferu mogą być np. spakowane ZIPem (gotowa biblioteka zlib).

Reply to
Adam Dybkowski

Zwyklem byl zawsze zagladac jak to robia inni, zeby nie popelnic nadmiernych herezji;) Powyzsza implementacja jest dla systemu embbeded tak wiec jest mala i przenosna (i386/ppc/arm) tak wiec uwazam, ze jest warta uwagi.

Raczej powinno to byc oczywiste - ladujemy foo.o (object file w formacie elf). Zabawy z binarka (kod/dane bez wszelkich informacji dostarczane przez elfa) odrazu bym sobie darowal.

Reply to
cepu69

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.