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
Odpowiedz
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.
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 –
- 1. Jak napisać kod niezależny od platformy w Haskell (ghc)?
- 2. Czy mogę skompilować uniwersalny kod za pomocą GCC Macports?
- 3. Wyodrębnij colormap matplotlib w formacie szesnastkowym
- 4. Kod formatu w formacie Doxia Apt
- 5. Jak mogę zobaczyć drzewo parse, kod pośredni, kod optymalizacyjny i kod zespołu podczas kompilacji?
- 6. Niezależny od urządzenia piksel
- 7. Niezależny od zamówienia algorytm skrótu
- 8. Optymalizowanie kodu za pomocą Intel® Intel SSE do wektoryzacji
- 9. Kod Pierwsza migracja za pomocą ciągów połączenia
- 10. Jak zmodyfikować kod źródłowy za pomocą Roslyn?
- 11. Jak zminimalizować kod ES6 za pomocą Webpacka?
- 12. file_get_contents i kod php
- 13. W jaki sposób kompilujesz kod Pythona 3.5 za pomocą Mingw?
- 14. Jak dokumentować kod Ruby za pomocą Doxygen?
- 15. Wyświetlanie XML za pomocą Google-kod-prettify
- 16. Jak przesłać kod za pomocą gitg?
- 17. jak uprościć mój kod za pomocą jquery?
- 18. Dlaczego gcc tworzy redundantny kod zespołu?
- 19. Czy kod wyjściowy gcc C po przerobieniu?
- 20. Kod oddzielający od funkcji DB
- 21. gcc nie ostrzega o martwy kod
- 22. Kompresuj kod CSS i JS za pomocą PHPStorm?
- 23. Śledzenie kompilacji gcc i jaki kod ją zwalnia
- 24. uruchom kod w zależności od pory dnia
- 25. Jak mogę dołączyć dane do std :: string w formacie szesnastkowym?
- 26. Instrukcja JMP - kod heksadecymalny
- 27. Kod dla malloc i bezpłatny
- 28. SecurityException od I Kod/O w równoległym strumieniu
- 29. GCC rolki montaż: ograniczenia rejestrów Intel 86_64
- 30. Dane w formacie HTML za pomocą PHP
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
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ć? –
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