Sebastian BiaĹy
Guest
Tue Aug 25, 2009 5:48 pm
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.
PaweĹ
Guest
Tue Aug 25, 2009 7:30 pm
Quote:
W zasadzie poszukuje jakiegoś relokatora
który potrafi kod przenieśc poprawnie w dowolne miejsce RAM.
Wystarczy wygenerować kod, który będzie relokowalny. Można go potem
uruchomić w dowolnym kawałku pamięci.
Paweł
Sebastian BiaĹy
Guest
Tue Aug 25, 2009 7:45 pm
Paweł wrote:
Quote:
Wystarczy wygenerować kod, który będzie relokowalny. Można go potem
uruchomić w dowolnym kawałku pamięci.
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?
PaweĹ
Guest
Tue Aug 25, 2009 8:20 pm
Quote:
Wystarczy wygenerować kod, który będzie relokowalny. Można go potem
uruchomić w dowolnym kawałku pamięci.
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?
Czy problem polega na tym, że nie wiesz jak napisać relokowalny kod ?
Paweł
Sebastian BiaĹy
Guest
Tue Aug 25, 2009 9:22 pm
Paweł wrote:
Quote:
Czy problem polega na tym, że nie wiesz jak napisać relokowalny kod ?
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.
Adam Dybkowski
Guest
Tue Aug 25, 2009 11:30 pm
Sebastian Biały pisze:
Quote:
Czy problem polega na tym, że nie wiesz jak napisać relokowalny kod ?
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.
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
cepu69
Guest
Wed Sep 02, 2009 3:19 pm
Sebastian Biały wrote:
Quote:
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.
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
http://ecos.sourceware.org/anoncvs.html)
oraz :
http://en.wikipedia.org/wiki/Loader_(computing)#Relocating_loaders
Adam Dybkowski
Guest
Wed Sep 02, 2009 9:01 pm
cepu69 pisze:
Quote:
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.
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
http://ecos.sourceware.org/anoncvs.html)
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).
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
cepu69
Guest
Thu Sep 03, 2009 11:34 am
Adam Dybkowski wrote:
Quote:
cepu69 pisze:
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
http://ecos.sourceware.org/anoncvs.html)
A może w ogóle nie kombinować aż tak tylko napisać normalny
loader/relokator?
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.
Quote:
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.
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.