чтобы работал tftp клиент достаточно в файле u-boot-1.3.4/drivers/net/macb.c найти
phy_id = macb_mdio_read(macb, MII_PHYSID1);
if (phy_id == 0xffff) {
printf("%s: No PHY present", netdev->name);
return 0;
}
и убрать проверку на наличие phy - можно вообще убрать этот кусок, можно заменить на if (phy_id != 0xffff)
Этот фрагмент кода безгрешен, проверка на присутствие "чего-нибудь", отсутствие чипа = 0xffff... -> No PHY present, все верно...
Проблемы была в другом... к SAM'у можно подключить до 32 ethernet phy, каждый phy имеет свой адрес, который задается pull up/down 'ами на ногах PHAD0-4 при сбросе чипов, после разборок оказалось, что PHY на плате имеет адрес 0x01 (???), а ищется он безусловно на 0x00, потому и не находится...
Что интересно, что в старом драйвере ks8721 от SK - PHY тупо искался в цикле по все адресам от 0 до 31, и никаких pull up/down, которыми и должен устанавливаться адрес PHY в момент сброса на плате НЕТ (???)
PHAD0, PHAD3, PHAD4 - заведены на SAM, PHAD1,PHAD2 - висят в воздухе, я например, не могу сказать КАКОЙ адрес будет у PHY, хотя он с хорошей вероятностью становится 0x01...
2Starterkit:
IMHO, адрес нужно задать явно pull'ами... то, что сейчас работает - случайность...
Чтобы в UBoot 2009.01 (1.3.4) работала сеть - в файле board/atmel/at91sam9260ek/at91sam9260ek.c изменить адрес PHY c 0x00 на 0x01:
Век живи - век учись! Действительно, никакие операции по сжатию ядра после компиляции делать не нужно. Большое спасибо repairman-у за подсказку. К UBoot-у пока не прикасался. Но опять я наступаю на грабли. Ядро работает замечательно, но после сборки buildroot-ом корневой файловой системы, упорно не хочет запускаться консоль, постоянно требует ввести имя пользователя. Судя по всему, и из inittab-а процессы не стартуют (которые я ставлю в автозагрузку).
Что пытался сделать:
1. Поменял в booildroot настройку на OABI.
2. Пробовал BusyBox собирать отдельно.
Ничего не помогло. Тулчейн собрал свой, с использованием конфига s-tools и конфига uClibc от sasamy. При сборке в booildroot-е, по какойто причине, в /lib не кладутся указанные дополнительные библиотеки uClibc, пришлось в ручную копировать. Все прочитал. Понимаю, что такое у многих было и единственное что помогало - смена на OABI, но у меня и это не помогает. Неужели все собирать по новой? А так порадовал размер итоговый . Заодно хотел узнать где в booildroot-е указывается максимальный размер файловой системы, а то он подгоняет автоматически и бывает, что не хватает места чтобы положить дополнительные модули и программы.
Проходили... busybox по segmentation fault уничтожается системой... Проблема в тулчейне... Возьми/собери все заново БЕЗ eabi... с OABI итоговый размер порадует еще больше...
p.s. что интересно рутфс eabi у меня на QEMU работает, на плате - НЕТ... (???) Не могу понять в чем разница...
Для сборки кросс-тулчейна используется штатный нативный компилятор хоста (i686), я все собираю стандартным:
gcc версия 4.1.2 20070925 (ASPLinux 4.1.2-27) из репозитория ASPLinux... host=target=i686, подобный есть в любом дистрибутиве линукс.
Кросс-тулчейном можно собирать на i686 машине бинарники для armv5... ядро, rootfs и т.п. - этот у меня armv5l-linux-uclibc... (4.2.4), ссылку на готовые бинарники я выкладывал во втором посте... host=i686, target=armv5l-linux-uclibc
насчет сетевого фи. я сразу в куниховом драйвере делал поиск по всем 32 адресам. во избежании. в первой версии платы на 9200-ом давиком (9261 что-ли) убегал иногда с 0х00 на куда попало =(
Ну понятное дело, т.к. его никто "не держал"... pull'ов нет, наводки на CMOS входы плодят хаос... Ладно, хоть и нехорошо, но обходится... хотя... откуда же младший бит в 1 взялся ??? Линукс всегда находит phy на 0x01...