Несколько дней уже сильно хочу прикрутить функциональность вотчдога к этому девайсу.
Вотчдог встроен в процессор, в этом я отдаю себе отчёт :)
Шагов вроде следующее число:
1. в bootstrapе нужно убрать все упоминания о вотчдоге, потому как там его выключают, а больше с ним после этого уже ничего не сделаешь
2. у-бут (пока в основном стандартный 1.1.5 из комплекта платы) вообще говоря должен знать о существовании вотчдога, иначе плата будет ребутаться при загрузке ядра по сети, например.
3. драйвер вотчдога в линуксе ресетит вотчдог до тех пор, пока ядро не повиснет.
проблемы следующие:
1. поддержка вотчдога в у-буте для меня очевидна только в 1.3.4, которую я пока не могу нормально прикрутить к этому устройству. непонятным путём удалось заставить его грузить ядро, но ни езернета не видит, ни на флешки писать не может. есть у кого-нибудь рабочий u-boot 1.3.4 или старше для at91sam9260-sk?
2. драйвер вотчдога в ядре (2.6.28) вроде как должен делать всё, что надо, но никак не может найти этот вочтдог, код инициализации не выполняется, т.к., как я понял, platform_driver_probe находит ошибку раньше, чем вызывает соответствующую функцию probe.
Ход мысли был следующий:
1. взять убут 1.3.4, настроить всё как надо про вотчдог
2. использовать драйвер в ядре + демона watchdog из busybox
3. из бутстрапа коцнуть про вотчдог.
пока получился калечный убут 1.3.4, который даже при включенной поддержке вотчдога (какая есть) ребутается тупо через 2 секунды после своего старта (потому что не сбрасывает вотчдог).
что делать -- пока не совсем понял. кто-нибудь разбирался с вотчдогом? англицкие форумы из кеша гугла уже почитал, общие идеи понял, реализация пока не хочет. надо как-то чтобы убут тоже вотчдог ресетил вовремя.
См. здесь, не понял, зачем Вам u-boot для этого крутить приходится, новую версию u-boot сейчас в фаловом разделе выложу. Кстати, от аппаратной реализации платы, ватчдог не зависит.
да, и разбираться мне долго ) с тем, что, куда, и по какому адресу. и почему было 0x8000, а стало 0x8400 (что вроде как более согласовано с размером страницы dataflash, но и раньше работало).
ибо вопросы тупые. и не совсем напрямую относящиеся к вотчдогу.
всё же правда склоняюсь к мысли, что убут должен уметь ресетить вотчдог. т.к. даже если поставить таймаут в 10 секунд, этого не хватит до того момента, как ядро запустит свой драйвер вотчдога.
поэтому (опять теоретизирую), вотчдог надо дёргать даже в процессе "nand read", когда происходит загрузка с нанда.
вообще интересная и загадочная ситуация:
1. есть бутстрап 1.16 с убранным выключением вотчдога. ядро грузится (со второго раза ибо ребутается), после чего заявляет, что ложкивотчдога не существует на девайсе. Но при этом ничего не перезагружается (то есть, кто-то всё же записал в WDT_CR)
2. есть точно такой же бутстрап в котором оставлена строчка отключения вотчдога. Не тот, что в комплектации платы, я тут его восстанавливал по diff'у в http://starterkit.ru/html/index.php?name=forum&op=view&id=6263&word=PLLA. Отличается от первого чисто тем, что выключает вотчдог. Ядро грузится, доходит до initrd и впадает в серьёзный ядерный page fault (родственник генерал фоулта). И, в общем дохнет.
Ставлю первый -- грузится. Ставлю второй -- падает на инит рд :-)
При этом
[skipped]
Ситуация выглядит так:
bootstrap не пишет в вотчдог ничего вообще, грузится убут, пытается грузить ядро, как только доходит речь до ядра -- ребутает. в следующий раз вотчдог уже не работает -- можно сколько угодно сидеть в консоли убута. ну и ядро грузится, естественно, ничего не зная о вотчдоге. получается, что хорошо бы самим писать в регистр контроля вотчдога, но в другой стороны вроде надо, чтобы успело дойти до драйвера вотчдога в ядре (регистр одноразовой записи, мы запишем -- драйвер откажется с этим всем взаимодействовать)
ну, идею происходящего понял.
проц лезет в dataflash, берёт мой (недоделанный, надо взять нормальный с диска :-) бутстрап, не отключает вотчдог, система ребутается до начала загрузки ядра.
при ребуте не ресетятся (умолчальное поведение) микросхемы, в результате чего следующая загрузка происходит уже через nandflash, в котором тоже есть бутстрап, но загрузчик не отключен.
это теперь понятно.
непонятно только, почему может быть ошибка инитрд ядра :-) и как лучше в такой ситуации вести себя с загрузкой -- хочется нормальный вотчдог )
Так много слов и ни одного лога загрузки - я вообще ничего не понял, что у вас происходит и что не работает :) а про initrd давно пора забыть как про страшный сон :) есть initramfs.