Цитата(PavelG @ Mar 23 2012, 16:57)

Есть несколько вопросов по Вашей технологии.
1- А не делаем ли мы того же, что и AisGen, а если так, то в чем преимущество такого подхода?
2- Вы выложили свою программу для подготовки u-boot, но она данные блока 2 страницы 0 записывает с инверсией, получается, например, вместо с1080000 пишет 000008с1, это просто баг, или так и надо? Я написал свою прогу для патча бинарника (без инверсии), но ни с моей не с Вашей у меня плата из NAND все равно не стартует.
1 - AisGen делает совершенно другое. Тут мой косяк. Надо было назвать не myais (так как ais тут не причем),
а например magicnand.
Ais - это набор команд для внутреннего загрузчика (RBL) для инициализации периферии, PLL.
Дальше используется вторичный загрузчик (UBL).
И вот для него и необходимо выполнить подготовку u-boot.bin для загрузки из nand.
Уже не помню где, но видел (или пришел к такому выводу) настоятельные рекомендации TI для загрузки из nand использовать UBL.
2 - Нет это не баг. Действительно так и должно быть.
Для успешной загрузки из NAND хоть чего нибудь (записаного при промощи u-boot) обязательно необходимо изменить алгоритм расчета ECC в u-boot и kernel!!!
Иначе RBL просто будет считать, что вычитывает битый образ.
Nand из которой грузитесь должна быть подключена на CS3!
Еще у вас другая NAND, а значит другие размеры страницы и блока.
------------------------------------------------------------------------------------------------------------
Еше раз, так как чудес не бывает.
Я использую промежуточный загрузчик UBL, так как это работает.
Возможно есть другие варианты, но нет времени их искать.
Далее попробую обьяснить другими словами:
1) немного терминологии
u-boot.elf - при компиляции u-boot получаются несколько файлов и один из них "u-boot" (без расширения).
u-boot.bin - при компиляции u-boot получаются несколько файлов и один из них "u-boot.bin" (так сказать бинарник).
u-boot.ais - файл сгенерированный AisGen из u-boot.elf для загрузки по UART.
u-boot.magic - файл после обработки u-boot.bin при помощи myais (не призываю слепо использовать, важен сам алгоритм).
ubl.elf - файл "ubl" полученный в результате компиляции проекта UBL в CodeComposerStudio
ubl.ais - файл сгенерированный AisGen из ubl.elf.
Предположим, что у Вас рабочий u-boot.ais (с исправленным алгоритмом ECC),
который вы можете загружать через UART и работать с nand (включена поддержка nand в u-boot).
Делаем следующее (команды и адреса относительно моего железа - RAM 64MB, FLASH 128MB Micron pagesize 2048):
- правим UBL под себя (настройки NAND, UART, дебагерный вывод и т.д.) + изменения которые приводил раньше.
- собираем UBL и полученный файл обрабатываем AisGen.
- генерируем файл u-boot.magic.
- загружаем по UART u-boot.ais.
- по tftp (опять же на моем примере) подтягиваем ubl.ais.
tftp 0xc0700000 ubl.ais
- стираем nand блок 1 (целиком) и записываем в него ubl.ais.
nand erase 0x20000 0x20000
nand write 0xc0700000 0x20000 0x20000
- теперь подтягиваем u-boot.magic и кладем его в блок 2 (т.к. размер файла больше 128К то потребуется 2 блока)
tftp 0xc0700000 u-boot.magic
nand erase 0x40000 0x40000
nand write 0xc0700000 0x40000 0x40000
- вот теперь если все правильно то при установке загрузки из nand все должно работать.
Давайте еще раз по шагам загрузки:
1 - При включении питания запускается внутренний загрузчик (RBL),
который согласно пинам определяет откуда грузится (NAND, UART ...).
В нашем случае с Nand, которая висит на CS3 (обязательно!!!).
Блок 0 в NAND загрузчик не смотрит (там обычно лежат переменные u-boot).
А смотрит блок 1. В нем лежит вторичный загрузчик (UBL), который (ВНИМАНИЕ) обработан AisGen.
Если в AisGen были правильно установлены настройки, то в UBL инициализации вообще можно не делать.
2 - Итак RBL вычитал из NAND UBL (обычно во внутреннюю RAM) и передает ему (UBL) управление.
Все что будет дальше ais не требует вообще!
3 - Для того, чтобы UBL смог вычитать из nand образ u-boot.bin этот самый u-boot должен лежать в
определенном месте и определеным образом.
Это расписано в исходниках UBL (в том числе и как я раньше писал).
Еще раз хочу обратить внимание на то, что тут мы должны оперировать НЕ ELF файлом u-boot,
а именно u-boot.bin, полученным при компиляции u-boot.
А вообще попробуйте сначала запустить из NAND загрузчик UBL. Когда получиться дальше будет легче.
Сообщение отредактировал DenchikS - Mar 27 2012, 11:25