|
помогите с u-boot lpc1788 |
|
|
|
Apr 10 2012, 10:55
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Пытаюсь собрать u-boot, но постоянно натыкаюсь на различные трудности. Нужна помощь по следующим вопросам: 1. В start.S есть такая запись Код _start: .word CONFIG_SYS_INIT_SP_ADDR .word (reset - _start) | 0x1 .word (nmitrap_handler - _start) | 0x1 .word (hardfault_handler - _start) | 0x1 .word (mpufault_handler - _start) | 0x1 .word (busfault_handler - _start) | 0x1 .word (usagefault_handler - _start) | 0x1 Зачем тут прибавляется 1 к каждому адресу? Если оставить как есть, то при запуске сразу сваливается в usagefault_handler, насколько я понимаю. 2. u-boot всегда пытается переместить себя во внешнюю ОЗУ при запуске? Он не умеет работать без релокации с использованием раздельной RAM и ROM?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Apr 11 2012, 08:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Флешь флеши рознь. Из nand флеша не работает потому что технология NAND этого не позволяет, а из NOR прекрасно себе работает. Поищите по Вашим исходникам CONFIG_SKIP_RELOCATE_UBOOT и добавьте такий define в файл конфигурации Вашей платы. Линукс не всю периферию инициализирует, кое-что настраивается только в u-boot, например частоту работы проца можно установить в u-boot и Линукс ничего не будет менять (это как пример). И конечно можно написать свой загрузчик, если существующие U-Boot, Red Boot, не устраивают. Цитата(SII @ Apr 10 2012, 17:56)  Если б почитали документацию на архитектуру ARM, а не пытались бы учиться по готовым примерам, то знали б, что младший разряд адреса подпрограммы указывает систему команд -- 0 для ARM и 1 для Thumb/Thumb-2. Поскольку LPC1788 имеет ядро Cortex-M3, у него реализована только система команд Thumb-2, а посему и нужно указывать единичку в младшем разряде. Спасибо, не знал. Век живи - Век учись.
--------------------
|
|
|
|
|
May 10 2012, 05:40
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Обновлю тему для потомков.
Итак, emcraft выложил исходники их u-boot и linux на гитхаб. Их u-boot как раз не требует наличия внешней озу для запуска и не релоцируется во внешнюю озу. В то же время, работает с какими-то странными глюками и так толком у меня и не поехал. Зато удалось запустить исходный u-boot с сайта lpcware (в виде патча поверх оригинального). Так что потомками впредь рекомендуется для ненапряжного запуска u-boot сперва портировать тот или иной тест памяти на свой процессор, проверить память на отсутствие косяков (да, у меня была изначально ошибка на плате), перетащить настройки памяти в u-boot и тогда, скорее всего, релокация выполнится успешно.
Далее, по линуксу. Емкрафтовский линукс содержит несколько косяков, с которыми неизвестно как вообще они могут компилироваться. В частности, в файле head.S некорректная инструкция для thumb2 mode - невозможно создать сжатый образ ядра. В конфигурации нужно разрешить невыровненный доступ, иначе софт валится на генерировании псевдослучайных чисел.
Остались нерешённые вопросы: 1. Не работает вывод отладочной информации в консоль. Ничего не видно, если не вставить в printk код printascii. Кто-нибудь знает как пофиксить? 2. Не видит initramfs. Есть где-то пример создания initramfs и конфига под него? Если не использовать initramfs, то что вместо него?
|
|
|
|
|
May 13 2012, 19:37
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-07-08
Пользователь №: 38 895

|
Цитата(andrewlekar @ May 10 2012, 09:40)  Далее, по линуксу. Емкрафтовский линукс содержит несколько косяков, с которыми неизвестно как вообще они могут компилироваться. В частности, в файле head.S некорректная инструкция для thumb2 mode Возможно, это потому, что uClinux использует head-nommu.S, а не head.S?
|
|
|
|
|
May 14 2012, 13:25
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (andrewlekar @ May 14 2012, 13:35)  Я так понимаю, что пихать в initramfs всё подряд не принято. Нужно делать отдельно образ rootfs. Как это делается и как из инициализации перескочить в rootfs? Добрый день, а почему бы не передать ядрышку загрузочную строку, который прикажет RootFS сразу грузить с накопителя? Например, так CODE ... root=/dev/mmcblk0 ... У меня на большом линуксе под ARM9 работало) Может быть Вы знаете, но на всякий случай: в ядре включите поддержку файловой накопителя. У меня, к примеру, была ext3... Сори, если чего-то не понял, и ляпнул прописную истину....
--------------------
Выбор.
|
|
|
|
|
May 15 2012, 04:52
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Цитата Добрый день, а почему бы не передать ядрышку загрузочную строку, который прикажет RootFS сразу грузить с накопителя? Спасибо, попробую. Я просто осваиваю эту тему постепенно и нужно постоянно видеть какой-то результат. Для загрузки с накопителя нужен во-первых сам накопитель (пока не запаян на плате  ), во-вторых собрать u-boot с его поддержкой, в-третьих вроде как надо его разметить с нужной файловой системой (тут вообще хз как), собрать образ файловой системы (тоже незнакомая область. может сборка busybox подойдет). В общем вот-вот начну этим заниматься, но пошаговой инструкции не наблюдаю - только buildroot, в котором нет поддержки кортексов м3.
|
|
|
|
|
May 16 2012, 04:12
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-07-08
Пользователь №: 38 895

|
++++++++++++++++++++++++++++ "Возможно, это потому, что uClinux использует head-nommu.S, а не head.S?" Не знаю, у меня он пытается линковаться с head.S. В сборках типа linaro этот баг исправлен. ++++++++++++++++++++++++++++
Это означает, что Вы строите ядро для другого процессора, не Cortex-M3. Так, конечно, можно долго "косяки и глюки" в коде Emcraft находить.
|
|
|
|
|
May 16 2012, 04:43
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Цитата Это означает, что Вы строите ядро для другого процессора, не Cortex-M3. Так, конечно, можно долго "косяки и глюки" в коде Emcraft находить. Глупости пишете. Как он у меня работает, если я строю ядро под другой процессор? А файл head.S есть в разных директориях. Я говорю о том, который в каталоге /arch/arm/boot/compressed. И там нет никаких head-nommu.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|