Obraz vs zImage vs uImage

86

Jaka jest różnica między nimi?

Wiem, że u-boot potrzebuje jądra w formacie uImage.

System, którego używam, najpierw uruchamia się z programu ładującego etapu 1, a następnie wywołuje u-boot. Chcę odrzucić u-boot i uruchomić bezpośrednio z programu ładującego etapu 1. Jakiego typu obrazu jądra muszę używać?

yildizabdullah
źródło
electronics.stackexchange.com/questions/106958/ ... czy możesz mi pomóc w tym kontekście?
user3217310
Wygląda na to, że problem dotyczy sposobu, w jaki postępujesz podczas tworzenia pliku BOOT.BIN. Używam też ZedBoard, ale nie miałem takiego problemu.
yildizabdullah
tak, użyłem złej wersji u-boot.elf do utworzenia pliku BOOT.bin
user3217310
1
Ostateczne pytanie supersetu
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

119

Jaka jest różnica między nimi?

Obraz : ogólny plik obrazu binarnego jądra Linuksa.

zImage : skompresowana wersja samorozpakowującego się obrazu jądra Linuksa.

uImage : plik obrazu z opakowaniem U-Boot (zainstalowanym przez narzędzie mkimage ), które zawiera typ systemu operacyjnego i informacje o module ładującym.
Bardzo powszechną praktyką (np. Typowy plik Makefile jądra Linuksa) jest użycie pliku zImage. Ponieważ plik zImage jest samorozpakowujący się (tj. Nie potrzebuje zewnętrznych dekompresorów), opakowanie wskazywałoby, że to jądro nie jest skompresowane, mimo że tak jest.


Zauważ, że autor / opiekun U-Boot uważa (powszechne) użycie zImage wewnątrz uImage za wątpliwe:

Właściwie to dość głupie używać zImage wewnątrz uImage. Znacznie lepiej jest użyć normalnego (nieskompresowanego) obrazu jądra, skompresować go za pomocą samego gzip i użyć go jako poayload dla mkimage. W ten sposób U-Boot dekompresuje zamiast dołączać kolejny dekompresor do każdego obrazu jądra.

(cytat z https://lists.yoctoproject.org/pipermail/yocto/2013-October/016778.html )


Jakiego typu obrazu jądra muszę używać?

Możesz wybrać cokolwiek chcesz zaprogramować.
Ze względu na oszczędność pamięci prawdopodobnie powinieneś wybrać skompresowany obraz zamiast nieskompresowanego.
Uważaj, wykonanie jądra (prawdopodobnie jądra Linuksa) wymaga czegoś więcej niż tylko załadowania obrazu jądra do pamięci. W zależności od architektury (np. ARM) i wersji jądra Linuksa (np. Z DTB lub bez), istnieją rejestry i bufory pamięci, które mogą być przygotowane dla jądra. W jednym przypadku wystąpiła również inicjalizacja sprzętu wykonana przez U-Boot, która musiała zostać zreplikowana.

UZUPEŁNIENIE

Wiem, że u-boot potrzebuje jądra w formacie uImage.

Dotyczy to wszystkich wersji U-Boot, które mają tylko polecenie bootm .
Ale nowsze wersje U-Boot mogą również mieć polecenie bootz, które może uruchomić zImage.

trociny
źródło
1
Moje rozumowanie to zImage = skompresowany obraz uImage = Image + opakowanie uBoot, popraw mnie, jeśli się mylę, opakowanie uBoot zawiera nagłówek uBoot i dodatkowe informacje, takie jak adres ładowania urządzenia rozruchowego, punkt wejścia, ale nie mogłem znaleźć referencji pokazujących całość format uImage, czy mógłbyś udostępnić linki na ten temat
Mouin
Dziękuję za opinię, znalazłem zasoby dotyczące formatu nagłówka uImage . Czego nie rozumiem to: 1 - gdzie mogę znaleźć adres ładowania (adresy ładowania urządzenia rozruchowego) i punkt wejścia w uImage (nie istnieją w nagłówku) 2 - czy zImage zawiera te informacje (adres ładowania i punkt wejścia), dlatego pytam o formaty zarówno zImage, jak i uImage
Mouin
„Czego nie zrozumiałem…” - Nie próbuj rozpoczynać dyskusji w komentarzach. Zadaj nowe pytanie.
trociny
OK: link
Mouin