Jump to content

    

Поселение на ARM ОС Linux

Здравствуйте. У меня есть данная плата.Пытаюсь залить на нее свою ОС. С платы все было удалено. Залил на Dataflash bootstrap, u-boot и kernel.

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

Заранее благодарен.

Share this post


Link to post
Share on other sites
Здравствуйте. У меня есть данная плата.Пытаюсь залить на нее свою ОС. С платы все было удалено. Залил на Dataflash bootstrap, u-boot и kernel.

В гипертерминале при загрузку платы загружается u-boot и пишет, что ядро не найдено...Насколько я понимаю надо прописать u-boot адрес расположения ядра. Но как это сделать?

все было бы проще, если перед "С платы все было удалено" в юбуте дали команду printenv

из ее вывода можно было бы подчерпнуть адрес расположения ядра во флеше

если остался бинарник юбута, то можно внутри поискать содержимое переменных окружения по словам cp.b или bootm (если бинарников не осталось, то снимаю шляпу..)

как вариант - написать производителю платы - пусть вышлет карту расположения бинарников во флеше

 

а если рассуждать здраво, то пользователь может сам разложить бинарники во флешах и внешних накопителях в любое место. за исключением bootstrap. и разумеется проследить, чтобы все адреса были взаимоувязаны и не пересекались. и оставить место под переменные окружения uboot

Share this post


Link to post
Share on other sites

Дайте команду printenv

а там есть переменная окружения bootcmd в которой записана команда загрузки ос, она как правило bootm <адрес откуда взять ядро> [адрес откуда взять initrd диск], flinfo команда u-bootа выдает адреса и разбивку flash как их видит u-boot

Share this post


Link to post
Share on other sites

спасибо большое! оказывается в команде загрузки bootm все правильно прописано...причина в другом: образ, собственноручно собранного ядра, в виде zImage, а должен быть uImage, потому что u-boot выводит следующее сообщение: Can't get kernel image.

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

Share this post


Link to post
Share on other sites
Так что мне нужно собрать ядро в формате uImage. А как это сделать я не знаю...вроде бы можно утилитой mkimage, но как я пока не разобрался..

make uImage

 

Share this post


Link to post
Share on other sites
make uImage

спасибо! все очень просто, а я не догадался)

Share this post


Link to post
Share on other sites

 

но все равно предварительно надо было установить эту утилиту mkimage...

Edited by stas17

Share this post


Link to post
Share on other sites

Собрал ядро (командой make uImage), записал на плату, но с него все равно не стартует...Пишет, что начинается загрузка с него (booting kernel from Legacy Image....), определяет версию, размер, пишет, что оно распаковано и т.д., а потом все равно выдает: Can't get kernel image.

Удалил и записал заново теперь грузится с него, но теперь другая проблема...пишет:

Starting Kernel

Uncompressing linux...done. Booting the kernel

и все...

после того, как я записал rootfs, опять вернулся к Can't get kernel image.

Edited by stas17

Share this post


Link to post
Share on other sites

*** Warning - bad CRC, using default environment

 

In: serial

Out: serial

Err: serial

Net: macb0

macb0: Starting autonegotiation...

macb0: Autonegotiation timed out (status=0x7849)

macb0: link down (status: 0x7849)

Hit any key to stop autoboot: 0

## Booting kernel from Legacy Image at 22000000 ...

Image Name: Linux-2.6.36-my_by_RDM

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2020160 Bytes = 1.9 MB

Load Address: 70008000

Entry Point: 70008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

 

Starting kernel ...

 

Uncompressing Linux... done, booting the kernel.

 

вот именно такое сообщение получаю в гипертерминале...

Разве ни у кого нет мыслей по этому поводу?

Share this post


Link to post
Share on other sites
Разве ни у кого нет мыслей по этому поводу?

 

У вас есть возможность достать скомпилированное под эту платформу ядро? Попробуйте его записать вместо вашего и проверить загрузку.

Убедиться, что вы используете правильный тулчейн. Ну и тд

Share this post


Link to post
Share on other sites

Судя по "*** Warning - bad CRC, using default environment" у Вас может быть неверная строка параметров ядра. Войдите в коммандную строку u-boot и сделайте printenv. Найдите параметр bootargs, в нем console=... и проверьте, что стоит верный порт.

Share this post


Link to post
Share on other sites

Сначала залил скомпилированное под эту плату ядро (скачал с сайта производителя) и оно отлично работает.

Команда printenv выводит у меня довольно мало информации...только информацию о переменно bootcmd и еще о чем-то..

 

 

 

Строку параметров ядра редактировал при конфигурации ядра и там: console=ttyS0, 115200. Вроде так и должно быть...

Edited by stas17

Share this post


Link to post
Share on other sites

Напишите полностью что выводит команда printenv.

1. У вас может в u-boot и ядре линуха разные MACHINE_ID указаны.

2. Второй вариант это неправильно отработала утилита mkimage. Ее надо использовать той же версии что и загрузчик u-boot.

3. В конфиге ядра у вас указан неправильный UART для вывода логов.

Попробуйте залить для начала чужое zImage ядро и добейтесь его загрузки..

Share this post


Link to post
Share on other sites
## Booting kernel from Legacy Image at 22000000 ...

Image Name: Linux-2.6.36-my_by_RDM

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2020160 Bytes = 1.9 MB

Load Address: 70008000

Entry Point: 70008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

посмотрите в оригинальном ядре, они такиеже как у Вас

Load Address: 70008000

Entry Point: 70008000

после того что она Вам выдала далжна начаться выдача ядра, booargs должна быть такой же

Share this post


Link to post
Share on other sites
Строку параметров ядра редактировал при конфигурации ядра и там: console=ttyS0, 115200. Вроде так и должно быть...

А галку "Always use the default kernel command string" Вы поставили? Иначе используется то, что передает u-boot (это, кстати, правильней). Плюс у некоторых архитектур/машин есть параметр "UART to use for low-level messages". Если код машины, переданный у-бутом и код в ядре не совпадают, вероятно, что сообщение об этом вывалится именно в этот порт.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this