LINUX.ORG.RU

Сообщения guskov_roman

 

Проблема с USB на embedded linux (сборка Yocto)

Суть истории:

Надо собрать linux для железки nitrogen6x. Для чего был выбран Yocto Linux Fido. Сконфигурировал ядро с menuconfig, собрал image, записал на SD карту. Запустил, вроде все нормально загрузилось, но в GTKTerm постоянно выдает следующее:

hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ci_hdrc ci_hdrc.0: role 0 to 1
ci_hdrc ci_hdrc.0: remove, state 1
usb usb1: USB disconnect, device number 1
ci_hdrc ci_hdrc.0: USB bus 1 deregistered
ci_hdrc ci_hdrc.0: role 1 to 0
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ci_hdrc ci_hdrc.0: role 0 to 1
ci_hdrc ci_hdrc.0: remove, state 1
usb usb1: USB disconnect, device number 1
ci_hdrc ci_hdrc.0: USB bus 1 deregistered
ci_hdrc ci_hdrc.0: role 1 to 0
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00

И так может повторяться несколько минут подряд, но рано или поздно прекращает. При этом ввод не блокируется, я могу залогинется, вводить команды. К самой плате подключены клавиатура, мышь и монитор hdmi.

Вывод lsusb:

Bus 002 Device 004: ID 045e:07f8 Microsoft Corp. 
Bus 002 Device 003: ID 062a:0003 Creative Labs 
Bus 002 Device 002: ID 0424:2513 Standard Microsystems Corp. 2.0 Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

На мониторе который подключен к плате ничего нет. Этот вывод я вижу только в gtkterm через serial port на своем компьютере.

 

guskov_roman ()

Непонятная фигня с подсчетом времени

Суть проблемы : Я сделал сетевой эмулятор на FPGA который позволяет имитировать разные проблемы сети - задержку, уменьшение Daterate, потерю пакетов и т.д. Мой эмулятор может имитировать задержку прохождения пакетов в диапозоне 1 нс до 4 сек. Что бы проверить, была написана программа на с++ которая работает с сырыми сокетами. Я формирую пакеты вручную и отправляю их, а потом жду когда они придут обратно и замерю время. И вот тут начинается какая то непонятная фигня. Иногда показывает правильное время - более менее правдоподобное 840 мс, а иногда 1421165742397 мс. Что конечно не может быть в принципе.

Для замера времени использую функцию :

long mtime() {
  struct timeval t;
  gettimeofday(&t, NULL);
  long mt = (long)t.tv_sec * 1000 + t.tv_usec / 1000;
  return mt;
}

и в коде после отслыки

long t;
if ( sendto(sock[0], sendbuf, tx_len, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)) )
    t = mtime();
и при приеме :
numbytes = recvfrom(sock[1], buf, BUF_SIZE, 0, NULL, NULL);
if ( eh_rec->ether_dhost == MY_MAC )
    t = mtime() - t;

printf ("Delay is %ld milliseconds.\n",t);
Где может быть проблема ?

OS: Ubuntu 14.04.1 LTS Desktop (64-bit)

 , ,

guskov_roman ()

RSS подписка на новые темы