Я тут подумал - зачем мне вообще нужен u-boot, если можно dataflash записывать из под linux как mtd разделы... и написал небольшое дополнение к bootstrap которое сразу запускает ядро linux. Испробовано на bootstrap-1.11. Что я имею в итоге:
1) Ядро linux с initramfs
2) В dataflash только bootstrap и ядро
3) Ядро не нужно готовить каким-то mkimage, оно уже готово к прошивке после сборки и лежит в ../linux-2.6.x.y/arch/arm/boot/zImage - все как на большом linux :) К тому же u-boot после прошивки ядра через cp отказывался грузить его ссылаясь на ошибку crc, сейчас все ок.
4) Прошивка dataflash простым cp - спасибо repairman за отличную идею.
В аттаче переделаный main.с - не стал делать патч - можно просто заменить то что в исходниках этим файлом, он там прямо в корне лежит. Если нужно - легко дописать загрузку и с initrd, дело буквально пары минут - мне это уже не интересно :)
Если заливать изначально из самбы то bootstrap как обычно через специальный скрипт а образ ядра по адресу 0x4200. Если через cp то как готовить бинарник bootstrap я недавно описывал. С ядром ничего не надо делать - копировать обычный zImage.
На всякий случай в аттаче конфиг от моего bootstrap - частота процессора отличается от стандартной стартеркитовской для использования аудиокодека - имейте ввиду.
Немного еще переделал bootstrap - сейчас он заточен под starterkit, появилась командная строка для передачи параметров ядру, настраиваемая по времени автозагрузка (загрузка если не нажимать ничего). Загрузчик занимает 4 кбайт флеша - все остальное под образ ядра с инитрамфс. Если нужна поддежка initrd и той схемы загрузки как была в starterkit - это буквально одна строчка в main.c. Я намеренно не стал это дописывать - мне очень понравилась идея initramfs - собственно для этого я и переписал загрузчик. В аттаче все исходники. Частота оптимизирована под использование аудиокодека. Если кого заинтересует - могу написать подробней как им пользоваться. Сборка так же как и в bootstrap - команда make в директории mbs/board/at91sam9260ek/dataflash. makefile настроен на кросскоапилятор arm-none-linux-gnueabi - он должен быть в пределах видимости шела (в PATH), можно указать и другой - главное чтобы полученный бинарный файл был меньше 3950 байт (примерно так - точней не знаю) - иначе ядро не грузится)
Для пробы в аттаче мой бинарник ядра с initrafs. В самбе загрузчик залить через специальный скрипт для бутлоадера, имидж ядра залить по адресу 0х1080. В командной строке загрузчика указать
boot: loglevel=0 mem=32M
без этого работать не будет - это из-за моего драйвера для lcd.
Погорячился :) Форум не дает больше 2 Мгбайт залить... Имидж можно скачать тут Еще раз напомню - имидж заливается тот который получается после сборки ядра - не нужно с ним больше ничего делать - просто найти zImage в дереве исходников. Аттаче - бинарник загрузчика.
Поковырял исходники - освободил около 700 байт, так что на очереди поддержка протокола xmodem и загрузка ядра по нему с терминала. Если хватит места возможно будет и прошивка этого образа в dataflash.
Сделал поддержку xmodem - теперь ядро можно загружать с любого терминала поддерживающего этот протокол. Для реализации записи на dataflash места уже не хватит. Чтобы начать загрузку по xmodem нужно в командной строке ввести команду xe:
boot: xe
после этого можно отсылать zImage. Теоретически можно подсунуть любой бинарник, но почему-то u-boot например не работает если его запускать с адреса 0x21000000. Я не стал разбираться - знаю что если например запустить его с этого загрузчика по адресу 0х21D00000 то заработает...Ну и нужно помнить что на этом этапе отключены прерывания и оба кеша - данных и команд. Хотел дописать чтобы можно было указать адрес в ram по которому производить запись и последующий запуск - но никак не могу уложиться в 4 кбайта - это предел sram для кода на этом этапе загрузки. Я собирал старым тулчайном который 2007q - более новый 2008q генерирует слишком большой бинарник и он не влазит в 4 кбайта.
sasamy, идея и реализация понятна. Непонятна цель:)
чем насолил uboot?
1. ядро по TFTP записывать/обновлять быстрее, чем по xmodem
2. можно память тестировать (nm), писать в порты, и вообще - руками щупать периферию процесора..
3. место жрет на dataflash? впаять 8М и забыть
в конечном устройстве нет нужды перешивать ядра и отлаживаться? это до той поры, пока устройство не окажется в ремонте (у вас на столе). а возиться с ним всяко удобнее имея uboot...