реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Запуск linux at91sam9x25, Ядро зависает после распаковки
Vull
сообщение Jul 16 2012, 10:08
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 16-09-08
Из: Екатеринбург
Пользователь №: 40 230



Добры день!

Пытаюсь запустить ядро linux на своей плате.

Исходные данные
Плата на основе процессора at91sam9x25-cu, память DDR2 1 Gbit шина данных 16 бит (64 МБайта), схема в части подключений памяти взята из кита Atmel.
Подключения NAND, Dataflash, Sdcard аналогично

ПО
at91Bootstrap_5seriez_1.2 - взято с at91com/linux4sam - добавлены небольшие изменения для копирования файла образа с sd-карты в оперативную память
u-boot-2010.06 - взято с at91com/linux4sam - по их инструкции наложены патчи для поддержки процессора и кита
linux-2.6.39 - взято с at91com/linux4sam - по их инструкции наложены патчи для поддержки процессора и кита - внесены изменения в конфиг для отключени
не используемого оборудования (lcd, isi и т.д.).

Для отладки я не стал использовать SAM-BA, а решил использовать sd-карту, благо теперь процессор позволяет
загружать bootstrap и с нее. Порядок такой:

1. Стартует ROM код процессора и начинает обходить устройства с которых может загрузиться
2. Доходит до SD-карты копирует bootstrap в sram и передает управление туда
3. Стартует bootstrap инициализирует процессор и оперативную память, отладочную консоль и mmc, копирует ядро в ОЗУ, настраивает теги для
корректного старта ядра linux и передает управление ядру.
4. Ядро начинает распаковку...

Первоначально планировалась загрузка ядра только с использованием bootstrap, однако ядро останавливается после начала распаковки.
Используется формат сжатия ядра gzip.
Опции early_printk и low_level_debug включены

Uncompressing Linux...

uncompression error

-- System halted


Если изменить формат упаковки ядра на lzo то ядро успешно распаковывается и после этого нет ни одного вывода

Uncompressing Linux... done, booting the kernel.

Все теги для загрузки ядра из bootstrap'a устанавливаются корректно и в памяти сохраняются нормально, образ ядра
копирутеся тоже полностью (проверяю путем подсчета crc32)

Я попробовал скомпилировать u-boot, т.к. в основном все загружают ядро через него.
Вот вывод из отладочного порта

оU
B-oo t02010. 6J(lu1 40221- 1 :0511:)2

пDRAM: ЯоiM
BoNAND: *** Warning - bad CRC, using default environment

In: #reai
lOut: #reai
lErr: Net: ,
)tia ynk yet otspoa tubooo:t н
н
U-Boot> ?

U-Boot> ?

U-Boot> help

U-Boot>

На команды он не реагирует, очень похоже на несовпадение скоростей по отладочному порту,
но непонятно почему символы меняются местами, такое впечетление что они так в памяти лежат,
но при этом часть слов выводится нормально, а часть нет.

И еще один момент, когда bootstrap копирует ядро в ОЗУ, если последний блок образа ядра
меньше сектора sd-карты (512 байт), то все слова в двойном слове развернуты

Пример:
Так байты лежат на sd карте
AA BB CC DD

После копирования в ОЗУ
BB AA DD CC

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

После обнаружения вышеописанного, был добавлен тест памяти в bootstrap,
все тесты прошли успешно для всего адрессного пространства.

Используемые компиляторы

ELDK-4.2 он основан на gcc-4.2.2, компилятор старый, но я его использ0овал для сборки системы для процессора at91sam9260 (bootstrap+linux+programms)
и все работает без проблем.

g++ arm-2010q1-202
g++ arm-2011.09-70
Все компиляторы выдают один и тот же результат


Прошу помочь, может кто сталкивался с подобным поведением? Или знает где я ошибся?
Заранее спасибо!
Прикрепленные файлы
Прикрепленный файл  kernel_linux_config.txt ( 34.05 килобайт ) Кол-во скачиваний: 43
 
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 16 2012, 13:36
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



,
Цитата(Vull @ Jul 16 2012, 14:08) *
at91Bootstrap_5seriez_1.2 - взято с at91com/linux4sam - добавлены небольшие изменения для копирования файла образа с sd-карты в оперативную память


он разве не поддерживает прямую загрузку с SD ? вижу там такое - at91sam9x5sd_defconfig
вообще атмеловский бутсрам - та еще штучка, например эта ошибка у них с незапамятных времен и они ее копипастят от версии к версии
Цитата
/*
* Enable External Reset
*/
writel(AT91C_RSTC_KEY_UNLOCK
|| AT91C_RSTC_URSTEN, AT91C_BASE_RSTC + RSTC_RMR);

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

Сообщение отредактировал sasamy - Jul 16 2012, 13:46
Go to the top of the page
 
+Quote Post
Vull
сообщение Jul 17 2012, 02:19
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 16-09-08
Из: Екатеринбург
Пользователь №: 40 230



Спасибо за ответ!

Цитата
он разве не поддерживает прямую загрузку с SD ? вижу там такое - at91sam9x5sd_defconfig
вообще атмеловский бутсрам - та еще штучка, например эта ошибка у них с незапамятных времен и они ее копипастят от версии к версии


Я ее и использую, но там все равно первым грузится бутстрап для настройки процессора, а дальше можно все что угодно загрузить от одиночной программы до ядра

Цитата
не пробовали их готовые бинарные сборки ?


Пробовал, вылетает с тем же -- System halted

Если это проблемы с памятью, то чем можно диагноз поставить? Моделированием?

И если это проблемы с памятью, то ни одна программа не должна работать в ОЗУ, я пробовал загрузить одиночное приложение из примеров Atmel
светодиод мигает исправно с заданным периодом.


Сообщение отредактировал Vull - Jul 17 2012, 02:33
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 17 2012, 07:36
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Vull @ Jul 17 2012, 06:19) *
Пробовал, вылетает с тем же -- System halted


а u-boot работает нормально ? там есть тестер памяти mtest - так что он в первую очередь интересен к тому же бинарники они в любом случае тестировали и ерунду с несовпадением скорости уарта точно заметили бы.

Цитата
Я ее и использую, но там все равно первым грузится бутстрап для настройки процессора, а дальше можно все что угодно загрузить от одиночной программы до ядра


я к тому что там ничего менять не нужно - все через конфиг задается, кстати его через menuconfig можно смотреть/изменять
make at91sam9x5sd_defconfig
make CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig

префикс кросскомпилятора свой укажите

Сообщение отредактировал sasamy - Jul 17 2012, 07:42
Go to the top of the page
 
+Quote Post
kurtis
сообщение Jul 19 2012, 08:44
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



1.
Цитата
Uncompressing Linux... done, booting the kernel.

У вас UART правильно настроен?
Ядро запускается в 2 этапа, сначала запускается распаковщик, он выводит такую надпись, затем передается управление самому ядру, которое уже (в вашем случае) ничего не выводит.

2. Когда ядро делает printk, то сообщение попадает в буфер, к этому буферу можно получить доступ из загрузчика. Я это делаю из uboot, но у вас он вроде не очень работает, но вроде как есть возможность получить доступ к более раннему загрузчику. Буфер называется __log_buf, узнать его адрес можно так
Код
$ grep __log_buf System.map
805d2140 b __log_buf

У вас соответственно будет другое значение, но учтите что адрес 0x805d2140 это логический адрес, для моей платформы физический будет 0x705d2140.
Зная адрес, в убуте можно сделать
Код
md.l 0x705d2140 1000

и посмотреть что ядро пыталось выводить, может там будет какой-то kernel panic и проблему удастся легко локализировать.

3. По поводу убута, может у вас настройки терминала "специфические"? На других, заведомо рабочих платах, консоль себя так не ведет?
Go to the top of the page
 
+Quote Post
Vull
сообщение Jul 24 2012, 11:35
Сообщение #6





Группа: Участник
Сообщений: 12
Регистрация: 16-09-08
Из: Екатеринбург
Пользователь №: 40 230



Всем БОЛЬШОЕ спасибо за советы и помощь!

Проблему удалось локализовать и исправить, дело было в железе оказались попутаны между собой сигналы DQM1 и DQM0.

После небольшого пропатчивания плат, все завелось с пол оборота!

Прошу модераторов пометить тему как РЕШЕНО

Сообщение отредактировал Vull - Jul 24 2012, 11:39
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016