Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
Корректная работа с watchdog в U-boot
Evgeny
Добавлено 21.07.2010 12:47 Редактировалось 21.07.2010 12:53
0
Сообщение: 1
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Вот здесь обсуждалось как заставить U-boot правильно работать с Watchdog,чтобы в случае, если Bootstrap его не отключает, во время выполнения U-boot не происходило ненужных перезагрузок(например, при ожидании сетевого соединения). Обещали выложить в конце рецепт, но видимо забили. Кто-нибудь может объяснить что нужно сделать?

P.S. U-boot 1.3.4, собран, работает нормально во всем кроме watchdog.
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 22.07.2010 06:38 Редактировалось 22.07.2010 06:47 Сообщение: 2
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Ну тогда может быть кто-то может подсказать другой путь решения проблемы, если нужно чтоб Watchdog работал корректно в случае установки на плату Linux? Только грузить без U-boot?
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 22.07.2010 11:56 Редактировалось 22.07.2010 12:00 Сообщение: 3
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Тихо, сам с собою я веду беседу...
Решение найдено, выкладываю рецепт, который помог мне.
Очень помогла, как ни странно эта знаменитая ссылка

Моя плата SK-AT91SAM9XE512-S3E, но думаю подойдет всем.
Собирать "как мне надо" научился пока только, U-boot 1.3.4, но уже чувствую в себе силы разобраться и с последними версиями.

Что нам нужно:

1)исходники U-boot 1.3.4
2)патч от Linux4SAM(версии 5)
3)Мой патч, созданный после изучения той самой ссылки, изменения можно и вручную ввести там всего чуть-чуть

Код

diff -Nur u-boot-1.3.4/board/atmel/at91sam9260ek/config.mk u-boot-1.3.4-patched/board/atmel/at91sam9260ek/config.mk
--- u-boot-1.3.4/board/atmel/at91sam9260ek/config.mk 2008-08-12 20:08:38.000000000 +0600
+++ u-boot-1.3.4-patched/board/atmel/at91sam9260ek/config.mk 2010-07-22 11:27:17.204914734 +0600
@@ -1 +1 @@
-TEXT_BASE = 0x23f00000
+TEXT_BASE = 0x21D00000
diff -Nur u-boot-1.3.4/cpu/arm926ejs/at91sam9/ether.c u-boot-1.3.4-patched/cpu/arm926ejs/at91sam9/ether.c
--- u-boot-1.3.4/cpu/arm926ejs/at91sam9/ether.c 2008-08-12 20:08:38.000000000 +0600
+++ u-boot-1.3.4-patched/cpu/arm926ejs/at91sam9/ether.c 2010-07-22 11:28:24.893141054 +0600
@@ -30,6 +30,7 @@
#if defined(CONFIG_MACB) && defined(CONFIG_CMD_NET)
void at91sam9_eth_initialize(bd_t *bi)
{
- macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00);
+ //macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00);
+ macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x01);
}
#endif

TEXT_BASE зависит от того как собран Bootstrap(см. первую ссылку), у меня так.
4)Накладываем патчи или частично правим руками
5)Правим include/configs/at91sam9260.h
Если хочется меняем задержку ожидания ввода.
Код

...
#define CONFIG_BOOTDELAY 1
...

Обязательно согласуем SPI Dataflash с Bootstrap-ом, у меня так
Код

...
#define AT91_SPI_CLK 33000000
...

Я хочу грузить с dataflash cs0 поэтому правлю параметры в этой секции следующим образом адреса - от балды
Код

...
/* bootstrap + u-boot + env + linux in dataflash on CS0 */
#define CFG_ENV_IS_IN_DATAFLASH 1
//#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400)
#define CFG_ENV_OFFSET 0x4000
#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
#define CFG_ENV_SIZE 0x4000
#define CONFIG_BOOTCOMMAND "cp.b c0038000 20400000 170000; cp.b c01a8000 23100000 277fff; bootm 20400000"
#define CONFIG_BOOTARGS ""
#define CONFIG_ETHADDR ff:ff:00:00:ff:ff
#define CONFIG_IPADDR 192.168.0.145
#define CONFIG_SERVERIP 192.168.0.2

#elif CFG_USE_DATAFLASH_CS1
...

6)Теперь выполняем самый загадочный для меня шаг. Для работы watchdog-драйвера нужно добавить в include/configs/at91sam9260.h следующий define, я сразу после стража включения вставил.
Код

...
#define CONFIG_HW_WATCHDOG
...

Судя по описаниям драйвера watchdog-а этого должно быть достаточно, но make дает ошибку, по этому собираем в вот таком виде
Код

...
#define CONFIG_AT91SAM9_WATCHDOG
#define CONFIG_HW_WATCHDOG
...

как написано в Readme.at91 в /doc.

выполняем последовательно(с учетом вашего eabi-компилятора и того куда вы хотите размещать загрузчик)
Код

CROSS_COMPILE=/home/startsevev/CodeSourcery-eabi-2007q1/bin/arm-none-eabi- make ARCH=arm at91sam9260ek_dataflash_cs0_config

и
Код

CROSS_COMPILE=/home/startsevev/CodeSourcery-eabi-2007q1/bin/arm-none-eabi- make ARCH=arm

теперь комменируем(или удаляем) в include/configs/at91sam9260.h
Код

...
//#define CONFIG_AT91SAM9_WATCHDOG
#define CONFIG_HW_WATCHDOG
...

И вот теперь все собирается.
Пока не разобрался в чем тут дело, но в таком виде робит.
Вообще на мой взгляд эти пляски с бубном из-за кривой системы конфигов через дефайны, которая в ходу у U-Boot.

Как результат, U-boot не перегружается watchdog-ом, он правда тормозит, в том числе из-за сети, но это уже совсем другая история...
P.S. Буду признателен, если расскажут как ускорить U-boot
P.P.S Буду признателен за указание на косяки в этом мини-HOWTO
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 22.07.2010 12:29 Сообщение: 4
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Вот блин, на записи в dataflash перезагружается все равно. Будем еще разбираться...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 22.07.2010 13:24 Редактировалось 22.07.2010 13:28 Сообщение: 5
sasamy
4.71

Пункты: 83564
Регистрация: 14.08.2009
Цитата

Тихо, сам с собою я веду беседу...


Далеко не факт :) Кому-то когда это все равно пригодится.

Цитата

Собирать "как мне надо" научился пока только, U-boot 1.3.4, но уже чувствую в себе силы разобраться и с последними версиями.


Лучше разбираться с последними версиями - 1.3.4 мне показалась куцая, например обнаружил что в последних версиях работает mmc и usb, существенно улучшен код работы с nand и macb. Сейчас посмотрел - сброс собаки выполняется ф-ей WATCHDOG_RESET(); так вот у атмелов она вызывается только в драйвере последовательного порта на котором отладочная консоль висит при приеме байта - по идее должно сбрасывать все.

Цитата

теперь комменируем(или удаляем) в include/configs/at91sam9260.h
Код

...
//#define CONFIG_AT91SAM9_WATCHDOG
#define CONFIG_HW_WATCHDOG


А это для чего ? Они должны быть оба включены.
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 22.07.2010 14:37 Редактировалось 22.07.2010 14:38 Сообщение: 6
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Цитата

Далеко не факт :) Кому-то когда это все равно пригодится.
.

Да это я ворчу немного)
Цитата

Сейчас посмотрел - сброс собаки выполняется ф-ей WATCHDOG_RESET()

Ага, я с этим разобрался. Навставлял в драйвере записи на флэш в "наиболее цикличных" местах. Вроде пока тесты проходят - копируется без ребута.
Цитата

А это для чего ? Они должны быть оба включены.

Я сам так думал, так в Readme.at91 написано, но у меня в таком случае ребутается U-boot. А если сначала собираю с двумя дефайнами, а потом не очищая собираю закомментив первый - то работает, сам не понимаю как так. С одним дефайном собираю "с нуля" - ошибка сборки(как раз watchdog_reset не объявлен вроде).
Чтоб не требовалось по файлам поиск выполнять подскажу расположение файлов для правки:
common/cmd_mem.c - команды U-boot для работы с памятью и связанные с ними функции
drivers/mtd/dataflash.c -общие функции dataflash
drivers/mtd/at45.c -специфические функции для dataflash Atmel
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 22.07.2010 14:41 Редактировалось 22.07.2010 14:42 Сообщение: 7
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Цитата

Лучше разбираться с последними версиями - 1.3.4

Наверное. Там тот же watchdog уже без патчей есть, наверняка также уже везде "навставлян ресет").
Ток он у меня кракозябры выдает - то есть грузит - но вывод нечитаемый и в меню не зайдешь, там видимо дополнительные настройки UART появились или в том духе. Зато уже неплохо изучил U-boot, пока решал эту проблему
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 23.07.2010 09:34 Редактировалось 23.07.2010 09:39 Сообщение: 8
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Ура, товарищи!!!
Заработало. Собрал 2010.06 без кракозябр. Они раньше были с 2009.06 версии и старше(кстати заметил в этой версии бинарник у-бута у меня перевалил за 170 000 байт). Изменил как с ядром инициализацию частоты в конфиге с 18.432 на 12.000 МГц, все заработало.
в include/configs/at91sam9260ek.h
Код
Код

...
/* ARM asynchronous clock */
#define CONFIG_SYS_AT91_MAIN_CLOCK 12000000 /* 12.000 MHz crystal */
...


Мне особенно интересно, почему до этого оно работало.
Единственный минус - по-прежнему на записи в Dataflash watchdog ребутает - то есть все же нужно править драйвер этого дела самостоятельно.
Может у них багтрекер есть, надо б написать, ватчдог вроде уже год(с 2009.06) включен официально, а не робит как надо все равно.
P.S. Теперь с двумя дефайнами сразу робит)
Спуститься к концу Подняться к началу
Персональная информация
Alfamayonez
Добавлено 23.07.2010 09:34 Сообщение: 9
Alfamayonez
3.42

Пункты: 3702
Регистрация: 04.10.2009
Пол: Мужчина
2Evgeny
Простите, что влезаю в ваш монолог :). Скажите пожалуйста :), а зачем этот watchdog нужен? Можно ответить в первом посте :).
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 23.07.2010 09:46 Редактировалось 23.07.2010 09:48 Сообщение: 10
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Ну вообще планируется разработка большого количества драйверов для будущей системы, за зависание кода Линукс я особо не беспокоюсь, но вот мой будущий код может оказаться с багами, а разрабатываемый девайс лучше бы было ребутнуть в этом случае, да и мало ли от чего может быть зависание - уязвимость в ядре, хакерская атака и т.д. Вообще watchdog полезная штука.
Поначалу это не было прям совсем критично, но раз уж начал разбираться, стало интересно до конца все разрулить. По ходу с загрузчиками стал подружней)
P.S. Про watchdog в гугле можно найти, если по самой фиче интересно)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux