-
1. Data: 2009-08-25 16:48:46
Temat: Dynamicznie ladowany kod do ram w ARM7
Od: Sebastian Biały <h...@p...onet.pl>
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.
-
2. Data: 2009-08-25 18:30:35
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Paweł <p...@n...pl>
>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ł
-
3. Data: 2009-08-25 18:45:32
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Sebastian Biały <h...@p...onet.pl>
Paweł wrote:
> 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?
-
4. Data: 2009-08-25 19:20:42
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Paweł <p...@n...pl>
>> 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ł
-
5. Data: 2009-08-25 20:22:13
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Sebastian Biały <h...@p...onet.pl>
Paweł wrote:
> 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.
-
6. Data: 2009-08-25 22:30:38
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Adam Dybkowski <a...@4...pl>
Sebastian Biały pisze:
>> 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.
-
7. Data: 2009-09-02 14:19:16
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: cepu69 <c...@t...pl>
Sebastian Biały wrote:
> 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)#Relo
cating_loaders
-
8. Data: 2009-09-02 20:01:09
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: Adam Dybkowski <a...@4...pl>
cepu69 pisze:
>> 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.
-
9. Data: 2009-09-03 10:34:53
Temat: Re: Dynamicznie ladowany kod do ram w ARM7
Od: cepu69 <c...@t...pl>
Adam Dybkowski wrote:
> 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.
> 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.