Jump to content

    

slavayo777

Участник
  • Content Count

    53
  • Joined

  • Last visited

Community Reputation

0 Обычный

About slavayo777

  • Rank
    Участник
  • Birthday 12/02/1987

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. 1PPS

    В исходниках ядра есть примеры как реализовать drivers/pps/clients/pps-gpio.c Есть инструкция, как пользоваться драйвером здесь (ответ пользователя goodx) Я не стал разбираться с драйвером pps-gpio.c, проще было написать свой. Идея проста, нужно написать драйвер с прерыванием по GPIO, а в handler засунуть pps_get_ts(&ts); pps_event(info->pps, &ts, PPS_CAPTUREASSERT, NULL); Предварительно нужно зарегестировать в системе источник с помощью pps_register_source(). Как сделать, описано здесь Есть так же возможность подключить PPS к UART'у (DCD выводу PPS line discipline) http://linuxpps.org/wiki/index.php/LinuxPPS_installation
  2. Есть такое. Большинство тачскринов которые я видел имеют такой базовый адресс. Но на большинстве из них есть специальные выводы для задания адресса, например http://www.ti.com/lit/ds/sbas454/sbas454.pdf может быть 0x48-0x4B. Так что адресс зависит также от включения контроллера. Но rule of thumb нет, так как есть очень много других устройств с таким же адрессом (LM75, PCF8591...).
  3. Нужно было отключить learning на свитче, чтоб одинаковые пакеты выходили с интерфейса. У меня два ETH подключены к свитчу и разруливаются на внешние порты через port based vlan. Так что все я правильно делал с skb буферами. Перерыл тонну литературы, узнал очень много нового по сетевым драйверам, а проблема изначально было в другом Драйвер дописал, все работает, всем спасибо.
  4. Linux не читает конфиги. Их читает busybox, или что там у вас в корневой по linuxrc? Я никогда не пользовался buildroot'ом, всегда все собирал сам, потому помочь в его конфиге не могу. Uboot может передавать параметры сети linux'у при старте в bootargs. bootargs - это переменная uboot, которая может храниться в ПЗУ, а может и не храниться, все зависит, как вы собирали uboot. Если они храняться в ПЗУ, то их можно менять путем setenv->saveenv. /etc/network/interfaces у вас немного не по стандарту busybox'а. Busybox использует конфиги в стиле debian. Потому почитайте вниметельно это http://wiki.debian.org/NetworkConfiguration (Configuring the interface manually). Так же в папке исходников busybox'а есть много доков по конфигам.
  5. Игнорирует скорей не линукс, а busybox (или что там у автора). А в uboot параметры сети могут передаваться в bootargs через параметр ip= У меня как то так на eth1 устанавливается ip 192.168.11.100 => print bootargs bootargs=root=/dev/ram ramdisk_size=25000 rw ip=192.168.11.110:192.168.11.25::255.255.255.0:mpc8323erdb:eth1:off console=ttyS0,115200 Я не утверждаю, что игнорируются, прост предложил проверить. Откуда то же береться у автора фиксированный ip?
  6. Может подскажите как послать skb сразу в 2 интерфейса? Сейчас ситуация следующая, пакет приходящий из xmit функции виртуального сетевого устройства посылаю с помощью dev_queue_xmit по следующему алгоритму. skb2 = skb_clone(skb, GFP_ATOMIC) skb->dev = eth1 skb2->dev = eth2 dev_queue_xmit(skb) dev_queue_xmit(skb2) ping на удаленный хост проходит с 30-70% потерями. И вообще твориться что то непредсказуемое. Когда же посылаю только в 1 интерфейс ping проходит 100%. В чем может быть проблема?
  7. Решил задачку с netdev_rx_handler_register() static rx_handler_result_t _front_phys_handler(struct sk_buff **pskb) { struct sk_buff *skb = *pskb; skb = skb_share_check(skb, GFP_ATOMIC ); if (!skb) return RX_HANDLER_CONSUMED; skb->dev = redbox_dev.virt_front; skb->pkt_type = PACKET_HOST; if(netif_rx(skb) == NET_RX_SUCCESS) { redbox_dev.virt_front->stats.rx_packets++; redbox_dev.virt_front->stats.rx_bytes += skb->len; } return RX_HANDLER_CONSUMED; } Теперь пакеты гуляют спокойно от виртуального адаптера через физический при разных мак адрессах. В общем то могу уже переносить код. Спрятать физический интерфейс от системы не получиться, как я понял. Но он и не мешает, все пакеты перехватываются новым handler'ом.
  8. Проверьте параметры загрузчика, он может передавать настройки сети через параметры при загрузке линуха. (в uboot - bootargs)
  9. Сделал виртуальный интерфейс по примеру из http://www.ibm.com/developerworks/ru/libra...l_33/index.html добавил только dev_set_promiscuity(front_dev, 1); вопрос в следующем. Почему, если у физического и виртуального интерфейса одинаковые mac, ping проходит, а если разные, то нет? Хотя wiresharkом вижу, что пакеты от виртуального интерфейса посылаются, компьютер на них отвечает, пакет заходит в handle_frame(), в буфере skb подменяется устройство, но линух этот пакет не видит. В drivers/net/bonding/ и net/bridge/ после alloc_netdev вызывается dev_net_set(). Зачем это делается? Может в этом причина? Тогда где взять аргумент net?
  10. В принципе сейчас нашел драйвер для DSA (Distributed Switch Architecture). Создает виртуальное/ые устройство/а по количеству портов на свитче и вставляет/убирает DSA тэг в пакетах. Создает виртуальное устройство с помощью alloc_netdev() Добавляет протокол сетевого уровня с помощью dev_add_pack() Как я понял, такое решение не скроет физическое устройство, а будет перехватывать только DSA пакеты. Мне же нужно перехватывать ВСЕ пакеты от физического интерфейса и спрятать само устройство от системы. Есть ли такой метод? Опять таки оно работает с помощью dev_add_pack() и не прячет физические устройства на сколько я понял. Если пакет без определенного тэга, то он пойдет дальше в систему через физическое устройство. Мне же нужно, как я говорил, спрятать физический интерфейс от системы и подменить его виртуальным. Нашел ETH_P_ALL фильтр для dev_add_pack как вариант. Будет перехватывать все пакеты. Нашел так же метод netdev_rx_handler_register(). Что лучше использовать, пока в замешательстве. Вопрос, как спрятать физическое устройство в системе отсаеться открытым. А нужно ли его прятать?
  11. Добрый день всем! Делаю сейчас железку на MPC8321 266MHz DDR2, linux 3.7.6, частью которой является реализация RedBox'а. Есть 3 сетевых интерфейса ETH0, ETH1, ETH2. Простыми словами, нужно грабить все пакеты из одного, немного их модифицировать, и посылать в 2 других, и наоборот. Сейчас сделал все, используя libpcap в userspace. Все работает, но скорость 30 МБит/c. Все максимально оптимизировал, но больше получить так и не смог (железка еще занимается синхронизацией IEEE1588v2, по одному интерфейсу еще реализован RSTP). Как вижу единственный путь - перенести все сетевые дела в kernel, дабы избежать лишнего копирования из kernel в userspace и обратно. С сетевыми драйверами знаком немного (прочитал пару книжек, но ни разу не писал еще ничего реального), с символьным знаком хорошо, было пару проектов, включая этот. Плиз, посоветуйте оптимальный путь, может есть что нибудь, что можно взять за основу (самый лучший вариант). Как мне видеться, нужен механизм, чтобы спрятать реальные физические интерфейсы от системы, создать виртуальные, на которые будет перенаправлен их вывод с небольшой модификацией пакетов ес-но.
  12. Чипы разные бывают. Читайте даташит, смотрите исходники. Даете ли Вы резет физике? Записываете нужные регистры? Для проверки можно еще посмотреть на сигнал RXDV. При приеме пакета он должен опускаться в ноль. Постоянный обмен там идет из-за вычитывания link статуса. Когда регистрируется драйвер для физики, то там передаются функции инициализации и опроса статуса. Можно не передавать функции опроса. Тогда не будет постоянного обмена, но и MAC не будет приспасабливаться к физике. Все это делается в cpu/arm926ejs/ether.c. У меня тоже было много проблем с сетью. На моем устройстве установлен marvell 88e6165 через micrel ksz8041, так как у marvell нет RMII. Тож замучался пока все это настроил. Могу скинуть исходники, если у вас ksz8041 может помогут чем-то. Кстати, спешу сообщить, что линукс успешно запущен, сделали на днях файловую систему. Все прекрасно работает, чему я несказанно рад. Теперь делаем уже приложение под линукс.
  13. 1. К какому UART подключен ваш терминал? 2. С какого UART вы загружаете uboot? Желательно, чтобы они были одинаковыми, тогда можно тупо всю начальную инициализацию закоментить. Смотрите лучше осциллографом на UART. после того как uboot загрузится - он выдает много текста. U-Boot 2009.11 (РћРєС‚ 27 2011 - 15:45:48) DRAM: 16 MB In: serial Out: serial Err: serial ARM Clock : 300000000 Hz Net: 88E6165 Initialized on daveth0 Can't overwrite "ethaddr" Hit any key to stop autoboot: 0 Если там хоть что-то дергается после загрузки - значит неправильный baudrate. Исправляйте по ситуации те места, которые я указал ранее.
  14. В общем 3 раза отправил одно и тоже, как удалить не знаю.
  15. В общем 3 раза отправил одно и тоже, как удалить не знаю.