Перейти к содержанию
    

SK-AT91SAM9XE512-S3E. Не стартует Linux.

Добрый день всем.

 

Осваиваю Linux на сабжевой плате.

Имеется:

u-boot-2010.09.

arm-2010q1-188-arm-none-eabi

linux-2.6.36

Конфиг ядра взят с сайта http://dmilvdv.narod.ru/AT91SAM9260/index.html

 

u-boot

Конфиг командной строки и аргументов ядра по умолчанию.

Исправлена частота 200МГц

#define AT91C_MAIN_CLOCK                200000000

Понизил частоту SPI (согласовать с Bootstrap):

#define AT91C_SPI_CLK        2000000

Установить адрес микросхемы физического интерфейса Ethernet в cpu/arm926ejs/at91sam9/ether.c:

macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x01);

 

Ядро

Никакие патчи не применял за исключением исправлений описанный на сайте (ссылка выше).

Собирал с ключем "arm-none-eabi-"

После сборки заливаю образ ядра по TFTP, вижу лог:

 

U-Boot> tftp
macb0: link up, 10Mbps half-duplex (lpa: 0x0020)
Using macb0 device
TFTP from server 192.168.0.34; our IP address is 192.168.0.107
Filename 'uImage.bin'.
Load address: 0x22000000
Loading: #################################################################
     ###############################################
done
Bytes transferred = 1635311 (18f3ef hex)
U-Boot> bootm
## Booting kernel from Legacy Image at 22000000 ...
   Image Name:   Linux Kernel Image 2.6.36
   Image Type:   ARM Linux Kernel Image (gzip compressed)
   Data Size:    1635247 Bytes = 1.6 MiB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK

Starting kernel ...

 

Дальше ничего не происходит или происходит но этого не видно.

Подскажите в чем может быть проблема? В какую сторону копать?

Читал на форуме что "Starting kernel ..." пишет уже распаковщик ядра, значит управление ему передалось...

Может надо было собирать компилером с префиксом "arm-none-linux-eabi-" ?

 

Аналогичная проблема уже подымалась, но ответа по данному вопросу нет:

http://electronix.ru/forum/index.php?showt...ng+kernel\

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте собрать bootstrap "рекомендуемым" компилятором, это ,кажется, версия 2007 года. Когда возился с платой от ATMEL'а собирал только им, а остальной софт более новой версией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Uncompressing Kernel Image ... OK

 

Starting kernel ...

 

Возможно у вас путаница с MACHINE ID - в убуте прописан один а ядро собрано с другим, по крайней мере при таком раскладе картина точно такая же бывает. А так - советую не копировать конфиги вслепую а менять их вдумчиво :)

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mdmitry bootstrap здесь нипричем, я свой первичный загрузчик написал и хорошо протестировал.

 

sasamy спасибо за наводку, посмотрю. MACHINE ID это некое число или текстовая строка?

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

Мне сейчас главное чтобы ядро хоть как-то задышало..

Пробовал запускать собраное ядро с сайта www.at91.com скомпиленное под фирмовую борду с кварцем 18.432, так оно показывает признаки жизни: после строки "Starting kernel ..." некоторое время еще что-то ероглифами в лог пишет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sasamy спасибо за наводку, посмотрю. MACHINE ID это некое число или текстовая строка?

Этот идентификатор передается ядру загрузчиком в регистре r1, смотрите

 

linux-2.6.36/arch/arm/tools/mach-types

u-boot-2010.09/arch/arm/include/asm/mach-types.h

 

они должны совпадать с конфигом ядра - иначе ядро не стартует. Кстати для вашего стартеркита какой-то добрый человек продвинул иеднтификатор :)

 

skat91_s3e MACH_SKAT91_S3E SKAT91_S3E 2790

#define MACH_TYPE_SKAT91_S3E 2790

 

но это не суть важно - можно и от EK атмеловской оставить - главное чтобы и загрузчик и ядро были сконфигурированы одинаково.

 

Пробовал запускать собраное ядро с сайта www.at91.com скомпиленное под фирмовую борду с кварцем 18.432, так оно показывает признаки жизни: после

строки "Starting kernel ..." некоторое время еще что-то ероглифами в лог пишет.

 

Это нормально :) но странно что это ядро стартует. А вы не пробовали конфиг взять от ядра которое с платой шло ? Потом при кажущейся схожести 9260/xe512 есть и небольшие различия - например адреса sram не совпадают. В общем там ошибок можно наделать при конфигурировании достаточно, мой совет - берите конфиг от ядра с диска платы, копируйте, запускайте menuconfig и правьте что вам нужно.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дальше ничего не происходит или происходит но этого не видно.

Подскажите в чем может быть проблема? В какую сторону копать?

попробуйте для начала остановить Uboot и ввести две команды:

tftpboot 20400000 имя-вашего-ядра
bootm 20400000

еще как вариант - заблокированы в конфиге ядра серийные порты или переопределен порт вывода отладочной инфы или порты не прописаны в файл платы. вариантов дофига - как следствие визуально определяется как зависание системы..

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробуйте подставить то ядро что идет в комплекте с платой. может быть вы неправильно его упаковали (или наоборот, не упаковали), т.е. вы ему хотите подсунуть uImage, а он хочет zImage или совсем не упакованное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для надежности MACHINE_ID в u-boot для платы AT91SAM9260EK в файле

u-boot-2010.09\board\atmel\at91sam9260ek\at91sam9260ek.c

прописал

/* arch number of AT91SAM9260EK-Board */
gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9260EK;

 

в

u-boot-2010.09\include\configs\at91sam9260ek.h

тоже жестко на всякий случай прописал

#define CONFIG_AT91SAM9260    1

 

Скомпилировал заново, бинарник старого и нового билда отличаются только хедером с временем компиляции. Значит MACHINE_ID у меня точно равен MACH_TYPE_AT91SAM9260EK (1099).

 

В конфигах ядра прописано. Логи включены. За основу брал конфиг at91sam9260ek_defconfig.txt с сайта at91.com

CONFIG_ARCH_AT91=y
CONFIG_MACH_AT91SAM9260EK=y
CONFIG_MACH_AT91SAM9260EK=y

 

MACHINE_ID тоже равен 1099. (файл linux-2.6.36/arch/arm/tools/mach-types)

 

Пробовал с моим u-boot грузить ядро 2.6.24 с дика который в комплекте шет, грузится нормально.

Значит получается я неправильно бинарник собираю.

Подметил что я собирал ядро компилером с префиксом "arm-none-eabi-" который делает бинарник исполняющийся на процессоре без ОС,

а разработчик starterkit собирал с префиксом "arm-none-linux-gnueabi-".

 

Скомпилил еще раз ядро с "arm-none-linux-gnueabi", файл vmlinux 4.1Мб.

Теперь начал проявляться странный ефект, при выполнении команды:

arm-none-linux-gnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

файл linux.bin получается размером 3Гб :(

 

Никто не сталкивался с такой проблемой ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подметил что я собирал ядро компилером с префиксом "arm-none-eabi-" который делает бинарник исполняющийся на процессоре без ОС,

а разработчик starterkit собирал с префиксом "arm-none-linux-gnueabi-".

 

Для ядра это неважно - он не использует рантайм библиотеки кросскомпилятора

 

Теперь начал проявляться странный ефект, при выполнении команды:

arm-none-linux-gnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

файл linux.bin получается размером 3Гб :(

 

Никто не сталкивался с такой проблемой ?

 

Сталкивались, сделайте имидж для загрузки в uboot вот так

 

./mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 -n linux-2.6 -d arch/arm/boot/zImage zlinux

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последовательность упаковки ядра:

П.1 arm-none-linux-gnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

П.2 gzip -9 linux.bin

П.3 mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -n "Linux Kernel Image" -d linux.bin.gz uImage.bin

 

Эта последовательность отрабатывает правильно. Пробовал так упаковывать vmlinux который шел на диске уже скомпиленный.

Исходный vmlinux - 3.7Мб.

П.1 linux.bin - 2.8Мб.

П.2 linux.bin.gz - 1.4Мб.

П.3 uImage.bin - 1.4Мб.

 

У меня исходный vmlinux (2.6.36) 4.1Мб, после 1-й комагды linux.bin равен 3Гб.

 

To sasamy Проблема с бинарником возникает на П1 следовательно ключи для mkimage нипричем.

Есть еще какие нибуть варианты? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последовательность упаковки ядра:

П.1 arm-none-linux-gnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

П.2 gzip -9 linux.bin

П.3 mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -n "Linux Kernel Image" -d linux.bin.gz uImage.bin

....

To sasamy Проблема с бинарником возникает на П1 следовательно ключи для mkimage нипричем.

Есть еще какие нибуть варианты? :)

 

Какие еще варианты ? п1,2 просто не нужны - достаточно одной моей команды. Назовите файл на выходе (который у меня zlinux) как вам нужно - это готовый образ ядра для загрузки его через uboot.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

п1,2 просто не нужны - достаточно одной моей команды.

Эти пункты есть в документации README на u-boot.

 

/mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 -n linux-2.6 -d arch/arm/boot/zImage zlinux

 

Назовите файл на выходе (который у меня zlinux) как вам нужно - это готовый образ ядра для загрузки его через uboot.

 

А что значит этот путь? :)

arch/arm/boot/zImage

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эти пункты есть в документации README на u-boot.

 

Там в старых версиях в документации много есть того что в реальной жизни нет - сам был удивлен например при разборе полетов с записью в nand

 

А что значит этот путь? :)

arch/arm/boot/zImage

 

Это относительный путь - команду нужно выполнить из корня исходников ядра после его сборки, п1,2 потому и не нужны что там лежит готовый образ для загрузки, mkimage всего лишь дописывает к нему свой заголовок чтобы uboot его правильно распознал, так как тут путь архитектурно зависимый - видимо поэтому в доке написали универсальный метод, vmlilnux лежит в корне исходников после сборки для любой архитектуры.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...