Я пытаюсь понять процесс сборки и загрузки ядра Linux для ARM. Я взял vanila linux с сайта www.kernel.org и построил его после запуска конфигурации для AT91SAM9260. В сообщении, когда мы скомпилировали ядро, было показано, что:Загрузка ядра Linux в AT91SAM9260
=================================== =======
LD vmlinux
SORTEX vmlinux
SYSMAP System.map
OBJCOPY арка/руки/загрузки/Image
Ядро: арка/рука/ботинок/Изображение готово
GZIP арка/руки/загрузки/сжатый/piggy.gzip
AS арка/рука/загрузки/сжатый/piggy.gzip.o
Л.Д. арка/рука/загрузки/сжатый/vmlinux
OBJCOPY арка/руки/загрузки/zImage
Ядро: арка/рука/загрузки/zImage готов
UIMAGE арка/руки/загрузки/uImage
Название изображения: Linux-3.9.1 +
Создано: Сб ноябрем 23 18:15:58 2013
Тип изображения: ARM Linux Kernel Image (несжатый)
Размерданных: 1635544 байт = 1597,21 кБ = 1,56 MB
Нагрузка Адрес: 20008000
Точка входа: 20008000
аркой изображение/руки/загрузки/uImage повторно отовы
==========================================
Мои вопросы:
Тип изображения распаковывается, это означает, что мы не сжимают vmlinux к zImage?
Адрес загрузки: 20008000: это адрес декомпрессированного изображения = ZRELADDR, определенный в arch/arm/boot/Makefile? Этот адрес также является адресом ../arm/kernel/head.o? Кажется, что мы не используем адрес KERNEL_PHYS, этот метод является обычным способом или просто для семейства AT91SAM?
В основном, наши процедуры для создания и загрузки являются:
а. построение шагов ядра: vmlinux -> uImage (пропустить для создания zImage).
b.шаги загрузки ядра: DataFlash/NAND - load -> uImage (@ 0x22200000) --- распаковать -> несжатое изображение (@ 0x20008000).
В этом случае нет процесса zImage при загрузке, хотя в сообщении сборки я увидел создание zImage. Я не прав ?
4. Как насчет адреса 0xC0008000, который я нашел в /arch/arm/kernel/vmlinux.lds по строке: . = 0xC0000000 + 0x00008000; Используем ли мы его? Я путаю этот адрес с ZRELADDR.
С уважением.
Привет Christophe Ожье, В случае там zImage используется в процессе сборки, то процесс загрузки будет: ** uImage (DataFlash/NAND) ** --- load_to_RAM ---> ** uImage (@ 0x22200000) ** --- распаковать_uImage -> ** zImage (@ KERNEL_PHYS) ** --- распаковать_zImage ---> ** несжатое изображение (@ 0x20008000) **. Итак, где мы получаем ** KERNEL_PHYS **? Спасибо –
Я думаю, что адрес KERNEL_PHYS выше должен быть «ZTEXTADDR». Из команды: bootm $ {kernel_addr}, u-boot-код будет un-package uImage из kernel_addr в ZTEXTADDR, но я не могу получить ZTEXTADDR в любом месте. –
На самом деле я не думаю, что есть шаг распаковки_uImage. Как только uImage обрабатывается, его полезная нагрузка (ядро zImage) копируется на 0x22200000, а затем pc подпрыгивает по этому же адресу. Затем выполняется декомпрессия Linux, и окончательное изображение несжато в 0x20008000. –