2017-01-20 20 views
7

Nie jestem pewien, czy jest to specyficzne dla procesora, którego używam, więc o ile warto, używam Cortex M0 +. Zastanawiam się: jeśli wygeneruję plik hex za pomocą gcc przy użyciu -fPIC, stworzę ... Niezależny kod pozycji. Jednak format pliku hex intel, który mam poza objcopy zawsze ma informacje adresowe na nagłówku każdej linii. Jeśli próbuję napisać bootloader, czy po prostu zignoruję te informacje, pomijam powiązane z nim bajty i ładuję rzeczywisty kod do pamięci, gdzie tylko chcę, czy też muszę to w jakiś sposób śledzić?Kod w formacie szesnastkowym Intel i kod niezależny od pozycji za pomocą gcc

+1

dobrze dla bootloadera wystarczy zająć się tylko jedną rzeczą. Że nie przecina się z adresem programu, który ma załadować. Na przykład, jeśli bootloader ma uruchomić jądro, nie powinien przecinać się z pamięcią jądra (gdzie obraz jądra jest umieszczony w pamięci) lub devicetree. – theadnangondal

+0

Ale oprócz tego, pytanie brzmiało: czy mogę usunąć plik heksadecymalny z jego informacjami adresowymi i sumą kontrolną, a następnie po prostu zrzucić resztę pod jakimś adresem i przeskoczyć do miejsca, w którym zaczyna? A może są segmenty do pliku szesnastkowego, o których muszę wiedzieć, więc muszę się dowiedzieć, do czego skoczyć? –

+0

Tak, myślę, że możesz usunąć te informacje. Nie widzę żadnego wykorzystania tych adresów w każdym razie ... Skoki są obliczane inaczej, niezależnie od tych adresów .... Może ta pomoc w zrozumieniu http://stackoverflow.com/questions/5024387/trying-to-load- niezależny od pozycji kod na kortex-m3 – theadnangondal

Odpowiedz

1

Format intel-HEX został specjalnie zaprojektowany do programowania PROM, EPROMS lub procesorów z wewnętrznym EPROM i jest zwykle używany z programatorami do tych urządzeń. Adresy na początku zapisów nie mają bezpośredniego związku z kodem programu. Wskazują, na który adres PROM zostaną zapisane dane. Pamiętaj także, że PROM można odwzorować w dowolnym miejscu w przestrzeni adresowej procesora, dlatego ostateczny adres i tak może się zmienić.

Dopóki nie chcesz programować PROM, musisz usunąć wszystko poza danymi z rekordów. (Nie zapomnij o sumie kontrolnej na końcu ;-)

Ponieważ rozumiem format intel-HEX, zapisy nie mogą być ciągłe, między nimi mogą występować dziury.

Kilka uwag:

Parametr PIC -f nie ponosi odpowiedzialności za formacie Intel-HEX. Myślę, że gdzieś w twoich liniach poleceń znajdziesz -O ihex. Jeśli chcesz mieć plik, który można wykonać, objcopy zapewnia lepiej dopasowane formaty wyjściowe.

Dopóki sam nie napiszesz wcześniejszych etapów rozruchu, nie ładujesz programu rozruchowego - zostanie on załadowany. Adres, pod którym to nastąpi, jest zwykle poprawny i nie można go zmienić. Nie ma więc potrzeby kodu niezależnego od pozycji, ale to też nie boli.

+0

Będziemy, to stare pytanie, ale rozwiązałem to. Sekcje mają znaczenie i są umieszczane na ich adresach określonych przez plik Linker. Segmenty danych i BSS nie są niezależne od pozycji, chyba że wykonuję również relokowalny kod. Tak długo, krótko mówiąc, aby po prostu załadować kod adres nie są istotne, ale niech kod i dane mają znaczenie –

Powiązane problemy