Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
U-boot и загрузка образа ядра. прошу подсказать.
Franky
Добавлено 02.09.2014 09:45
0
Сообщение: 1
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
Немного запутался с u-boot и адресами загрузки ядра.

как связаны между собой переменная loaddr в u-boot окружении и адреса Load address и Entry Point в заголовке образа, добавляемого утилитой mkimage?

на моей плате образ лежит во флеш по адресу 0x08040000. SD-RAM начинается с адреса 0xD0000000.

Немного непонятно что куда грузить для старта Linux.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.09.2014 10:38 Редактировалось 02.09.2014 10:53 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

как связаны между собой переменная loaddr в u-boot окружении и адреса Load address и Entry Point в заголовке образа, добавляемого утилитой mkimage?


образ будет скопирован с носителя в RAM по адресу loadaddr если адрес не указан в команде чтения явно , затем перемещен по адресу Load address из заголовка, упраление будет передано на адрес Entry Point. Для ядра Linux (zImage) - Load address и Entry Point совпадают, в старых ядрах этот адрес прописан в arch/arm/mach-MACH/Makefile.boot, например

zreladdr-y := 0x70008000

http://lxr.free-electrons.com/source/arch/arm/mach-at91/Makefile.boot?v=3.0#L11

на ARM с чем я встречался

zreladdr-y = DRAM phys_addr + 0x8000
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 02.09.2014 10:57 Редактировалось 02.09.2014 11:07 Сообщение: 3
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
Спасибо большое за ответ. В сети не так много форумов, где могут помосчь с u-boot и linux.

У меня ядро лежит по адресу 0x08040000
если я укажу loaddr=0xD0000000
Load address = 0xD0008000
Entry point - 0xD0008000
должно запуститься?

По каким критериям выбирают эти адреса? я, например видел такое:
Load address = 0xD0008000
Entry point - 0xD0008001
не понятно почему писали именно так
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.09.2014 11:23 Редактировалось 02.09.2014 11:24 Сообщение: 4
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

если я укажу loaddr=0xD0000000
Load address = 0xD0008000
Entry point - 0xD0008000
должно запуститься?


нет - при перемещении образа 0xD0000000 --> 0xD0008000 вы испортите память с образом, сделайте например

loaddr=0xD1000000
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 02.09.2014 13:05 Сообщение: 5
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
что можно сказать по такому логу

## Booting kernel from Legacy Image at 08040000 ...
Image Name: Linux-2.6.33-arm1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 738336 Bytes = 721 kB
Load Address: c0008000
Entry Point: c0008001
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

UNHANDLED EXCEPTION: HARD FAULT
R0 = 00000000 R1 = 00000ea6
R2 = c0000000 R3 = 00000003
R12 = 00000020 LR = 0000de7d
PC = c0200000 PSR = 61000000
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.09.2014 16:11 Редактировалось 02.09.2014 16:31 Сообщение: 6
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Исходники надо смотреть - я с ucLinux не работал, там естественно своя специфика есть

Load Address: c0008000
Entry Point: c0008001

наверно из-за извратов с thumb, если вы на своей плате запускаете

Цитата

SD-RAM начинается с адреса 0xD0000000.


то естественно работать не будет. Исходники можно посмотреть ?
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 02.09.2014 16:31 Редактировалось 02.09.2014 16:31 Сообщение: 7
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
простите, это я уже пробовал "и так и сяк", перепутал C и D в адресах

сегодня удалось добиться вот чего:

U-Boot 2010.03 (Sep 02 2014 - 11:03:44)


## Booting kernel from Legacy Image at 08040000 ...
Image Name: Linux-2.6.33-arm1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 738336 Bytes = 721 kB
Load Address: d0008000
Entry Point: d0008001
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...
(далее тишина)

U-boot встал хорошо, даже сеть работает.
не хочет грузится ядро. MACHINE_NUMBER в U-boot и ядра совпадают, в файле борды и конфиге ядра выставлен USART1 (как в U-boot). DEBUG_LL и EARLY_PRINTK тоже выставлены.

Возможны такие симптомы из-за неверной конфигурации PLL?

Измучился в поисках, готов уже заплатить за консультацию.

Исходники посмотреть можно, куда их выложить?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.09.2014 16:38 Редактировалось 02.09.2014 17:02 Сообщение: 8
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

куда их выложить?


На любой файлообменник - мне все равно :) еще сразу опишите как конфигурируются убут и ядро и каким кросскомпилятором собирать. Но я если что не обещаю ничего, если с наскоку не разберусь - долго разбираться не буду :) не имея платы и даже начальных сведений о процессоре и ucLinux это просто может затянуться.

Если это ваш пост

http://electronix.ru/forum/index.php?showtopic=122819

и такое выдает оригинальное ядро

Цитата

## Booting kernel from Legacy Image at 08040000 ...
Image Name: Linux-2.6.33-arm1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 772448 Bytes = 754.3 kB
Load Address: 08020040
Entry Point: 08020041


то там возможно XIP ядро - тут еще дополнительно надо разбираться...

если исходники отсюда

https://github.com/EmcraftSystems

можете не выкладывать :)
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 02.09.2014 17:08 Редактировалось 02.09.2014 17:10 Сообщение: 9
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
У меня плата в STM32F429, 32Mb SD-RAM и 24Mhz кварцем

https://yadi.sk/d/feiaDzP8asj7Z - ссылка на u-boot, к нему сейчас претензий нет.
Конфиг u-boot содержится в include/configs/stm32f429-discovery.h
сейчас там исправлена частота кварца на 24Mhz и размер SDRAM 32MB. так как нужно. всё работает.
Сборка uboot: make ARCH=arm CROSS_COMPILE=arm-2010q1/bin/arm-uclinuxeabi-


Ядро брал отсюда:
https://github.com/jserv/stm32f429-linux-builder

там описано как собрать (ядро подгружается автоматически и обрабатывается через mkimage) и есть ссылка на кросскомпилятор.
Это ядро для платы с 8MB SDRAM и 8Mhz кварцем
Сейчас знаю, что как минимум PLL настроена не правильно, где это настраивается не могу найти. Папка для борды: arch/arm/mach-stm-32
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.09.2014 17:22 Редактировалось 02.09.2014 17:27 Сообщение: 10
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Сейчас знаю, что как минимум PLL настроена не правильно, где это настраивается не могу найти.


по кварцам настройки как понимаю тут

/*
* Select HSE (external oscillator) freq value depending on the
* platform we're running on
*/

https://github.com/robutest/uclinux/blob/master/arch/arm/mach-stm32/clock.c#L258
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux