jakushev Опубликовано 29 августа, 2010 Жалоба Поделиться Опубликовано 29 августа, 2010 Встала у меня на половину академическая задача изучения и написания стека протоколов TCP/IP для микроконтроллера. Пока неохота ковырятся с железом (долго и для начала нет смысла), решил промоделировать все на компьютере. Для этого создал простенький стенд: В машине под Федорой 13 установлена PCI платка с 2 COM портами, перепаянными 3х проводным нуль-модемом. Устройства /dev/ttyS1 и /dev/ttyS2. К устройствам применяю chmod, дабы из под простого пользователя работать можно было. Проверяю 2мя терминалами, на аппаратном уровне все работает, данные передаются. Далее пытаюсь поднять SLIP на ttyS1. Для этого делаю следующие под рутом: slattach -L -p slip -s 115200 /dev/ttyS1 & Вроде как пролетает устпешно (и при запуске не в фоне ошибок нет), устройство sl0 создается. Пытаюсь его сконфигурировать: ifconfig sl0 192.168.0.10 pointopoint 192.168.0.20 up Все тоже без ошибок, в листе ifconfig появляется устройство sl0 с настроенными параметрами. Команда ping -с1 192.168.0.20, соответственно, возвращает 100% потерю пакетов, но при этом на слушающем (/dev/ttyS2) терминале глухо, как в танке... Вызов ifconfig показывает, что на sl0 устройстве происходит попытка передачи (параметр TX Byte увиличивается с каждым пингом на 84). Уже перебрал все варианты, route пытался настроить. Результат 0. Люди, помогите! Где засада? Я уже ядро подозревать стал Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
gogi Опубликовано 29 августа, 2010 Жалоба Поделиться Опубликовано 29 августа, 2010 Попробуйте запустить slattach на отдельном терминале в режиме отладки. Похоже, ядро отдает ему пакеты. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 29 августа, 2010 Автор Жалоба Поделиться Опубликовано 29 августа, 2010 Попробовал. Странная ситуация. slattach прогружается в дебаге и встает как вкопанный: [1]+ Stopped man slattach [root@mainpc all]# slattach -d -L -p slip -s 115200 /dev/ttyS1 slattach: tty_open: looking for lock slattach: tty_open: trying to open /dev/ttyS1 slattach: tty_open: /dev/ttyS1 (fd=3) slattach: tty_set_speed: 115200 slattach: tty_set_databits: 8 slattach: tty_set_stopbits: 1 slattach: tty_set_parity: N slip started on /dev/ttyS1 interface sl0 Далее конфигурю сеть: [root@mainpc all]# ifconfig sl0 192.168.0.10 pointopoint 192.168.0.20 up и пытаюсь пропинговать: [root@mainpc all]# ping -c3 192.168.0.20 PING 192.168.0.20 (192.168.0.20) 56(84) bytes of data. --- 192.168.0.20 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 11999ms И тут начинается интересная вещичка. После того, как ping отработал, просматриваю состояние сети. Количество переданных данных по sl0 увеличиваются в течении нескольких секунд, достигая 252 (как раз передача 3х пинговых пакетов). К тому же появляется ошибка ядра: Package: kernel Latest Crash: Вск 29 Авг 2010 17:53:31 Command: not_applicable Reason: WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0xf0/0x192() Comment: None Bug Reports: что наталкивает меня на проблему с ядром. Может кто подскажет, как посмотреть, скомпилированно ли ядро с модулем SLIP. В Федоре сырцы ядра не загружены, только каталоги и служебная информация. Команда make menuconfig выполняется. И, вроде как, SLIP скомпилирован как модуль. Надо ли его подключать вручную, или он автоматом грузится? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 29 августа, 2010 Автор Жалоба Поделиться Опубликовано 29 августа, 2010 Попробовал подгрузить модуль slip до slattach modprobe slip Все загрузилось, lsmod отображает его. После выполнения slattach счетчик использования модуля увеличился на 1. Вроде, все как положенно. Но, все равно, конфигурю сеть, пингую 1 пакетом. Гдето через минуту появляется ошибка ядра Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AccessD Опубликовано 29 августа, 2010 Жалоба Поделиться Опубликовано 29 августа, 2010 Цитата: Может кто подскажет, как посмотреть, скомпилированно ли ядро с модулем SLIP grep SLIP /boot/config-`uname -r` У меня тоже 13, скомпилен как модуль. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 29 августа, 2010 Автор Жалоба Поделиться Опубликовано 29 августа, 2010 С модулем я разобрался. Нормально подгружается по необходимости и заранее вручную. И процесс его подхватывает. Ядро сейчас текущее 2.6.33.8. Попробовал на медиацентре, там 12 Федора стоит. Ядро 2.6.31.5 Никаких ошибок аналогичные действия не вызывают. Правда, порт наружу не выведен и всего один. Надо за паяльник браться и проводами запасаться. Жалко, что осциллоскопа в наличии дома сейчас нет. Проще было бы проверить... Уважаемый AccessD, если Вам не сложно, не могли бы Вы проверить на совей системе последовательность, вызывающую ошибку: slattach -L -p slip -s 115200 /dev/ttyS0 & ifconfig sl0 192.168.0.10 pointopoint 192.168.0.20 up ping -c4 192.168.0.20 Ошибка ядра появляется где то через минуту после пинга... От ttySx и IP адресов это не зависит. Заранее благодарен. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AccessD Опубликовано 30 августа, 2010 Жалоба Поделиться Опубликовано 30 августа, 2010 На ноуте не работает. На рабочем компе всё отработало. но пинга нет ( Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 30 августа, 2010 Автор Жалоба Поделиться Опубликовано 30 августа, 2010 Спасибо. Подозрение у меня на ядро. Буду нового ждать. Или, если получится, в виртуалке попробую что нибудь поднять... Так провода пока не протянул от другого компа. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 5 сентября, 2010 Жалоба Поделиться Опубликовано 5 сентября, 2010 А что в dmesg по поводу slip'а говорится? Я такую схему когда поднимал между Debian Etch(если не ошибаюсь, там было ядро 2.6.18) и Slackware 12.1(версию ядра не помню, но там стандартное было - не самосборное). Поэтому очень странно, по-моему, что сейчас из-за ядра что-то может не работать. У себя попробовал просто поднять интерфейс(к сожалению, кабеля нульмодемного нет под рукой, поэтому пинга проверить не могу, но выглядит всё так, будто поднялось без проблем). Никаких ошибок. Сейчас пробовал на Debian Lenny(2.6.26-2-686, slip модулем). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 6 сентября, 2010 Автор Жалоба Поделиться Опубликовано 6 сентября, 2010 После slattach -L -p slip -s 9600 /dev/ttyS1 & Ядро: SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256). CSLIP: code copyright 1989 Regents of the University of California. SLIP linefill/keepalive option. Далее поднимаю sl0: ifconfig sl0 192.168.0.10 pointopoint 192.168.0.20 up ifconfig sl0 sl0 Link encap:Serial Line IP inet addr:192.168.0.10 P-t-P:192.168.0.20 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:296 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 TX bytes:0 (0.0 Вроде все нормально... Далее пингую: ping -c3 192.168.0.20 PING 192.168.0.20 (192.168.0.20) 56(84) bytes of data. --- 192.168.0.20 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 11999ms Понятно, что ничего нет в ответ, так как /dev/ttyS2 у меня на терминале. Но и на терминале ничего не вижу. Пока идет пинг, по таймауту вылезают следующие сообщения ядра: [root@mainpc all]# dmesg | tail -n 11 [<ffffffff814529f0>] smp_apic_timer_interrupt+0x8d/0x9b [<ffffffff8100a613>] apic_timer_interrupt+0x13/0x20 <EOI> [<ffffffff8102a615>] ? native_safe_halt+0xb/0xd [<ffffffff810115a5>] default_idle+0x36/0x53 [<ffffffff810116bd>] c1e_idle+0xfb/0x102 [<ffffffff81008c22>] cpu_idle+0xaa/0xe4 [<ffffffff8144597e>] start_secondary+0x253/0x294 ---[ end trace 976e326b52916c58 ]--- sl0: transmit timed out, bad line quality? sl0: transmit timed out, bad line quality? sl0: transmit timed out, bad line quality? apic отключать, думаю, плохая идея. Многоядерная конфигурация. Но, ща попробую. Порты работают. между двумя терминалами связь есть. Если я правильно понимаю, ядро должно "обрамить" IP пакет в SLIP пакет и передать на нужный порт. Платка с портами следующая: 03:06.0 Serial controller: NetMos Technology PCI 9835 Multi-I/O Controller (rev 01) При работе с портом на материнке, ситуация аналогичная... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 6 сентября, 2010 Автор Жалоба Поделиться Опубликовано 6 сентября, 2010 Извиняюсь, не все сообщения послал. Попробовал noapic, микросхема портов подцепилась на 5 прерывание, терминалы нормально работают. И ошибка никуда не делась SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256). CSLIP: code copyright 1989 Regents of the University of California. SLIP linefill/keepalive option. ------------[ cut here ]------------ WARNING: at net/sched/sch_generic.c:256 dev_watchdog+0xf5/0x197() Hardware name: GA-MA74GM-S2 NETDEV WATCHDOG: sl0 (): transmit queue 0 timed out Modules linked in: slip slhc fuse ebtable_nat ebtables ipt_MASQUERADE iptable_nat nf_nat bridge stp llc sunrpc xt_physdev ip6t_REJECT nf_conntrack_ipv6 ip6table_filter ip6_tables ipv6 vboxnetadp vboxnetflt vboxdrv kvm_amd kvm uinput r8169 ppdev mii edac_core edac_mce_amd k10temp parport_pc shpchp parport microcode i2c_piix4 pata_acpi ata_generic pata_atiixp radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core [last unloaded: freq_table] Pid: 0, comm: swapper Not tainted 2.6.34.6-47.fc13.x86_64 #1 Call Trace: <IRQ> [<ffffffff8104d12f>] warn_slowpath_common+0x7c/0x94 [<ffffffff8104d19e>] warn_slowpath_fmt+0x41/0x43 [<ffffffff813ba06f>] ? netif_tx_lock+0x44/0x6d [<ffffffff813ba18d>] dev_watchdog+0xf5/0x197 [<ffffffff8106b22d>] ? sched_clock_local+0x1c/0x82 [<ffffffff8105920c>] ? internal_add_timer+0xcf/0xd1 [<ffffffff810592db>] ? cascade+0x6a/0x86 [<ffffffff810594b6>] run_timer_softirq+0x1bf/0x263 [<ffffffff8106e3d7>] ? ktime_get+0x65/0xbe [<ffffffff81053265>] __do_softirq+0xe5/0x1a6 [<ffffffff810726b0>] ? tick_program_event+0x2a/0x2c [<ffffffff8100ab5c>] call_softirq+0x1c/0x30 [<ffffffff8100c342>] do_softirq+0x46/0x83 [<ffffffff810530d6>] irq_exit+0x3b/0x7d [<ffffffff814529f0>] smp_apic_timer_interrupt+0x8d/0x9b [<ffffffff8100a613>] apic_timer_interrupt+0x13/0x20 <EOI> [<ffffffff8102a615>] ? native_safe_halt+0xb/0xd [<ffffffff810115a5>] default_idle+0x36/0x53 [<ffffffff810116bd>] c1e_idle+0xfb/0x102 [<ffffffff81008c22>] cpu_idle+0xaa/0xe4 [<ffffffff8144597e>] start_secondary+0x253/0x294 ---[ end trace c6c9eb803300da35 ]--- sl0: transmit timed out, bad line quality? sl0: transmit timed out, bad line quality? sl0: transmit timed out, bad line quality? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
gogi Опубликовано 6 сентября, 2010 Жалоба Поделиться Опубликовано 6 сентября, 2010 jakushev писал(а) Mon, 06 September 2010 19:31 Если я правильно понимаю, ядро должно "обрамить" IP пакет в SLIP пакет и передать на нужный порт. ция аналогичная... Не совсем. В случае виртуального интерфейса, как я понимаю, ядро должно передать пакет не в сеть, а программе slattach, запущенной в режимк даемона (для отладки можно и на консоли). А она обрамляет и передает в порт /dev/ttyS..., т.е. снова ядру, а то в физический сериал порт. По делу. Очень похоже, что дело действительно в ядре. Попробуйте в своем дистрибутиве установить несколько ядер, в том числе и стабильное от редхат (сентос) и грузить по очереди. Скорее всего они уже есть в репозитории. Если нет, это легко сделать вручную. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
jakushev Опубликовано 6 сентября, 2010 Автор Жалоба Поделиться Опубликовано 6 сентября, 2010 Сейчас проверил на Федоре 12 на другом компьютере, там ядро 2.6.31.5. Тоже самое. Может быть есть возможность перенаправить slattach в файл, чтоб отделить зерна от плевил? Сейчас попробую, но не думаю, что это получится... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.