BKV 0 1 декабря, 2010 Опубликовано 1 декабря, 2010 · Жалоба Доброго дня! Имеется самодельная плата с процессором DM365 и сетевой Realtek RTL8201, в работе используется linux-2.6.18_pro500, из состава SDK, и u-boot 1.3.4. Слегка модифицировав u-boot я добился работающего ping-а, к сожалению tftp пока не работает. Но более приоретным является работоспособность сети в Linux, драйвер davinci_emac от TI видит чип, но смонтировать файловую систему по NFS не может, NFS-сервер в это время работает. Из странного в работе - постоянно горит индикатор линка, но при попытке монтирования файловой сети он тухнет. Привожу лог загрузки, касающейся сети: Linux version 2.6.18_pro500-davinci_evm-arm_v5t_le-gb43d9841-dirty (kirill@kirill) (gcc version 4.2.0 (MontaVista 4.2.0-16.0.32.0801914 2008-08-30)) #1 PREEMPT Mon Nov 29 12:55:40 MSK 2010 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177 Machine: DaVinci DM365 EVM ............................................... Kernel command line: console=ttyS0,115200n8 noinitrd rw eth=00:01:02:03:04:05 ip=192.168.10.254:192.168.10.3:::arm:eth0:off root=/dev/nfs nfsroot=192.168.10.3:/home/kirill/nfs/rootfs,nolock TI DaVinci EMAC: kernel boot params Ethernet address: 00:01:02:03:04:05 .................................................... Generic PHY: Registered new driver ...................................................... RTL8201PHY: Starting realtek_init. Realtel RTL8201: Registered new driver Davinci EMAC MII Bus: probed i2c_davinci i2c_davinci.1: timeout waiting for bus ready i2c_davinci i2c_davinci.1: timeout waiting for bus ready i2c_davinci i2c_davinci.1: timeout waiting for bus ready i2c_davinci i2c_davinci.1: timeout waiting for bus ready MAC address is 02:00:10:00:00:00 TI DaVinci EMAC Linux version updated 4.0 ............................................... IPv4 over IPv4 tunneling driver TCP bic registered NET: Registered protocol family 1 NET: Registered protocol family 17 ........................................... RTL8201PHY: Starting rtl8201_config_init. found Realtek RTL8201 PHY IP-Config: Guessing netmask 255.255.255.0 IP-Config: Complete: device=eth0, addr=192.168.10.254, mask=255.255.255.0, gw=255.255.255.255, host=arm, domain=, nis-domain=(none), bootserver=192.168.10.3, rootserver=192.168.10.3, rootpath= Looking up port of RPC 100003/2 on 192.168.10.3 portmap: server 192.168.10.3 not responding, timed out Root-NFS: Unable to get nfsd port number from server, using default Looking up port of RPC 100005/1 on 192.168.10.3 portmap: server 192.168.10.3 not responding, timed out Root-NFS: Unable to get mountd port number from server, using default mount: server 192.168.10.3 not responding, timed out Root-NFS: Server returned error -5 while mounting /home/kirill/nfs/rootfs VFS: Unable to mount root fs via NFS, trying floppy. VFS: Cannot open root device "nfs" or unknown-block(2,0) Please append a correct "root=" boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) Строки начинающиеся на RTL8201PHY являются выводом из моей попытки дописать работу с RTL8201 к Generic PHY. Может кто-нибудь решил эту проблему? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 1 декабря, 2010 Опубликовано 1 декабря, 2010 · Жалоба NFS-сервер в это время работает. ....... Looking up port of RPC 100005/1 on 192.168.10.3 portmap: server 192.168.10.3 not responding, timed out Root-NFS: Unable to get mountd port number from server, using default mount: server 192.168.10.3 not responding, timed out Уверены что сервер работает ? Демон portmap запущен ? #ps -A | grep portmap Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Абсолютно. $ ps aux | grep nfs | grep -v grep root 1106 0.0 0.0 0 0 ? S Nov29 0:00 [nfsiod] root 1387 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd4] root 1388 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1389 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1390 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1391 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1392 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1393 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1394 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] root 1395 0.0 0.0 0 0 ? S Nov29 0:00 [nfsd] $ ps aux | grep portmap | grep -v grep daemon 1076 0.0 0.0 1796 444 ? Ss Nov29 0:00 /sbin/portmap У меня создаётся впечатление, что в момент подключения к серверу сетевой чип выключают. Косвенно это подтверждает выключение светодиода на сетевом разъёме. Поддерживаемые в ядре 2.6.18 PHY: $ ls drivers/net/phy | grep c broadcom.c cicada.c davicom.c fixed.c icplus.c Kconfig lxt.c marvell.c mdio_bus.c phy.c phy_device.c phy_device.o qsemi.c realtek.c smsc.c vitesse.c Файл realtek.c - это моя попытка добавить поддержку RTL8201, на данный момент неудачная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Файл realtek.c - это моя попытка добавить поддержку RTL8201, на данный момент неудачная. Вообще я сомневаюсь что для него вообще нужен какой-то драйвер :) http://www.realtek.com/faqs/faqsView.aspx?...d=1&Level=3 # Q9: Why don't I find RTL8201x driver on the website? A9: RTL8201, RTL8201BL, RTL8201CL, RTL8201CP, RTL8201N and RTL8211B(L) are all PHYceiver. That is a driverless hardware device. Software driver are relative to Network controller ( MAC ) which is integrated into chipset in such case mostly. Please contact your mother board maker or chipset manufacturer to obtain proper driver support. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба В U-Boot без драйвера не работало ничего, сейчас хоть ping заработал. А насчёт нужности драйвера http://www.google.com/search?q=linux+rtl8201 Да и что-то не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 2 декабря, 2010 Опубликовано 2 декабря, 2010 (изменено) · Жалоба В U-Boot без драйвера не работало ничего, сейчас хоть ping заработал. А насчёт нужности драйвера http://www.google.com/search?q=linux+rtl8201 Да и что-то не работает. И что вы нашли в гугле - у этого PHY нет irq, зачем там драйвер ? Покажите что вы делаете в драйвере ? Поддержка например в at91 для rtl8201 заключается только в чтении идентификатора и констатации факта - да, там у меня rtl8201 висит :) максимум что может потребоваться - это прописать идентификатор, чтобы драйвер MAC узнавал его и знал - что-то висит на MII. PS кстати посмотрите - может в вашем дроайвере MAC тоже нужно просто дописать его идентификатор а то вполне возможно что он не узнает PHY и отрубается. Изменено 2 декабря, 2010 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 (изменено) · Жалоба Я разве утверждаю, что в драйвере делаю что-то сложное? ;) #include <linux/module.h> #include <linux/phy.h> char debug = 1; #define DBG(format, args...) if (debug) printk("RTL8201PHY: " format "\n", ##args) static int rtl8201_config_init(struct phy_device *phydev) { DBG("Starting %s.", __func__); phydev->irq = PHY_POLL; //phydev->interrupts = PHY_INTERRUPT_DISABLED; return 0; } static int rtl8201_ack_interrupt(struct phy_device *phydev) { DBG("Starting %s.", __func__); return 0; } static int rtl8201_config_interrupt(struct phy_device *phydev) { DBG("Starting %s.", __func__); return 0; } static struct phy_driver rtl8201_driver = { .phy_id = 0x8201, .phy_id_mask = 0xffff, .name = "Realtel RTL8201", .features = (SUPPORTED_10baseT_Half | \ SUPPORTED_10baseT_Full | \ SUPPORTED_100baseT_Half | \ SUPPORTED_100baseT_Full | \ SUPPORTED_Autoneg | \ SUPPORTED_MII), .flags = 0, .config_init = rtl8201_config_init, .config_aneg = genphy_config_aneg, .read_status = genphy_read_status, .ack_interrupt = rtl8201_ack_interrupt, .config_intr = rtl8201_config_interrupt, .driver = {.owner = THIS_MODULE}, }; static int __init realtek_init(void) { int ret; DBG("Starting %s.", __func__); ret = phy_driver_register(&rtl8201_driver); if (ret) { printk("Can't registered driver for Realtek RTL8201.\n"); phy_driver_unregister(&rtl8201_driver); } return ret; } static void __exit realtek_exit(void) { DBG("Starting %s.", __func__); phy_driver_unregister(&rtl8201_driver); } module_init(realtek_init); module_exit(realtek_exit); MAC я передаю в параметрах загрузки. Пробовал ядро с моим драйвером и без него, результат одинаковый - нет соединения по NFS. Может действительно проблема в железе? Но проверка тестом из CodeComposer прошла, правда там там тупо шлют некоторое количество байтов и пожалуй это доказывает только то, что процессор видит сетевой чип. Изменено 2 декабря, 2010 пользователем /dev/null Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Я разве утверждаю, что в драйвере делаю что-то сложное? ;) Ну понятно - этот драйвер ровным счетом ничего и не делает :) смотрите драйвер ethernet вашего давинча - как он пытается PHY обнаружить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 (изменено) · Жалоба #define PHY_ID_MASK 0xfffffff0 #define LXT971_ID 0x001378e0 #define KSZ8893MQL_ID 0x00221430 #define RTL8201_ID 0x8201 static int emac_phy_init(struct emac_dev *dev, u8 phy_num, u8 *phy_cnt, u8 *phy_max) { char phy_id[BUS_ID_SIZE]; snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, 1, phy_num); dev->phydev[phy_num] = phy_connect(dev->owner, phy_id, &emac_update_phy_status, 0, PHY_INTERFACE_MODE_MII); if (IS_ERR(dev->phydev[phy_num])) { if (dev->phydev[phy_num] == ERR_PTR(-ENODEV)) dev->phydev[phy_num] = NULL; return PTR_ERR(dev->phydev[phy_num]); } dev->phydev[phy_num]->supported = PHY_BASIC_FEATURES; if (dev->init_cfg.gigabit) dev->phydev[phy_num]->supported |= SUPPORTED_1000baseT_Full; dev->phydev[phy_num]->advertising = dev->phydev[phy_num]->supported; if ((dev->phydev[phy_num]->phy_id & PHY_ID_MASK) == LXT971_ID) { /* * CRITICAL: Fix for increasing PHY signal drive strength for * TX lockup issue. On DaVinci EVM, the Intel LXT971 PHY * signal strength was low causing TX to fail randomly. The * fix is to Set bit 11 (Increased MII drive strength) of PHY * register 26 (Digital Config register) on this phy. */ int control; pr_info("applying Intel LTX971 workaround..\n"); control = phy_read(dev->phydev[phy_num], 26); phy_write(dev->phydev[phy_num], 26, (control | 0x800)); phy_read(dev->phydev[phy_num], 26); } else if ((dev->phydev[phy_num]->phy_id & PHY_ID_MASK) == KSZ8893MQL_ID) { /* * KSZ8893MQL is a layer 2 switch that connects to EMAC via * MII. The MII setting is required to be fixed with autoneg * off, 100Mbps, and full duplex. This happens to be the * settings and behavior when phy_mode is set to SNWAY_NOPHY. * Therefore, we set the phy_mode to SNWAY_NOPHY whenever * KSZ8893MQL is detected. */ dev->init_cfg.phy_mode = SNWAY_NOPHY; /* The third phy is used for MII, so only expect 2 phys */ *phy_max = 2; } else if ((dev->phydev[phy_num]->phy_id & 0xffff) == RTL8201_ID) { pr_info("found Realtek RTL8201 PHY\n"); //dev->init_cfg.phy_mode = SNWAY_NOPHY; } *phy_cnt = *phy_cnt + 1; phy_start(dev->phydev[phy_num]); return 0; } PHY обнаруживается, при загрузке я вижу строку "found Realtek RTL8201 PHY". Изменено 2 декабря, 2010 пользователем /dev/null Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба PHY обнаруживается, при загрузке я вижу строку "found Realtek RTL8201 PHY". Смотрите драйвер изернет - включите отладочную информацию тогда ясно будет почему он линк гасит, как вы понимаете проблема не может быть в ничего не делающем драйвере :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Уважаемые, не сочтите за труд, посмотрите на правильность схемы. BP.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Уважаемые, не сочтите за труд, посмотрите на правильность схемы. linux-xx/Documentation/networking/phy.txt Generic PHY driver If the desired PHY doesn't have any errata, quirks, or special features you want to support, then it may be best to not add support, and let the PHY Abstraction Layer's Generic PHY Driver do all of the work. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Читал я этот файл. Повторю ещё раз - не работает в любом случае, добавлю я свой драйвер или нет. Некоторые странности в поведении наводят на мысль о ошибке в разводке, для чего выложил схему, или сбой железа. Странности заключаются в следующем: - при питании от 12В индикатор линка гаснет при попытке подсоединится по NFS, индикатор активно не горит, соединение по NFS не устанавливается - при питании по POE когда идёт подсоединение по NFS, индикатор линка гаснет, но через секунду зажигается снова, также зажигается индикатор активности и даже слегка подмигивает, соединение по NFS не устанавливается. Вставив отладку в драйвер производителя выяснил следующее - устанавливается скорость в 100 Мб/с, режим дуплекса UNKNOW, состояние чипа READY (функция emac_phy_init). После этого запускается функция phy_start, которая переводи чип в состояние PHY_UP. Разбираюсь дальше. P.S. Неужто никто не применяет RTL8201? Или у меня так загрязнены чакры? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan1180 0 3 декабря, 2010 Опубликовано 3 декабря, 2010 · Жалоба Покажите : cat /etc/exports Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BKV 0 3 декабря, 2010 Опубликовано 3 декабря, 2010 · Жалоба /home/kirill/nfs/rootfs 192.168.10.254(rw,no_root_squash,no_all_squash,subtree_check,sync) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться