Колибри 0.7.5.0

Share your distros and discuss others'
  • Статическая конфигурация не вешает систему, но сеть не работает - в программе "статус сети" количество пакетов везде ноль.
  • Поставил до и после eth.write_udp сообщения Sending... и ОК. Первое сообщение напечаталось, от второго успело напечататься только О.
  • Yes, all network programms crashes system, always at addr 80024D1C.
    I suppose it is in e3c59x_boomerang_transmit after

    Code: Select all

    ; program DPD
            mov     edi, eax
            pop     eax
  • Насколько я понял, макросы:

    virt_to_dma reg
    dma_to_virt reg
    zero_to_virt reg
    virt_to_zero reg
    zero_to_dma reg
    dma_to_zero reg

    оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
    Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?

    И судя по всему это не единственная ошибка в драйвере. Неужели у кого-то работает?
    Вот когда ось была по нулевому адресу, то это наверное работало...
  • В ревизии 1276 я допустил ошибку, я ее уже исправил, залью на свн вечером, сейчас нет возможности.
    Attachments
    kernel.7z (68.79 KiB)
    Downloaded 200 times
  • tsdima wrote:Насколько я понял, макросы:
    оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
    Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?
    Indeed, I have just checked the SVN history of the driver, and it has never been updated to work with the newer kernel memory management system.

    It is possible you can fix the driver by adding the code as you mentioned, in some places.
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Ну хорошо, с драйвером я разобрался, сделал такие изменения:

    Code: Select all

    macro virt_to_dma reg
    {
    if defined E3C59X_LINUX
            sub     reg, [virt_addr]
            add     reg, [dma_addr]
    else
    	sub	reg, OS_BASE
    end if
    }
    
    macro dma_to_virt reg
    {
    if defined E3C59X_LINUX
            sub     reg, [dma_addr]
            add     reg, [virt_addr]
    else
    	add	reg, OS_BASE
    end if
    }
    
    macro zero_to_virt reg
    {
    if defined E3C59X_LINUX
            add     reg, [virt_addr]
    end if
    }
    
    macro virt_to_zero reg
    {
    if defined E3C59X_LINUX
            sub     reg, [virt_addr]
    end if
    }
    
    macro zero_to_dma reg
    {
    if defined E3C59X_LINUX
            add     reg, [dma_addr]
    else
    	sub	reg, OS_BASE
    end if
    }
    
    macro dma_to_zero reg
    {
    if defined E3C59X_LINUX
            sub     reg, [dma_addr]
    else
    	add	reg, OS_BASE
    end if
    }
    
    и

    второе изменение ниже

    Теперь не виснет, система пингуется, в таблице ARP правильный MAC-адрес другого хоста, с которого я пинговал.

    Однако сетевые программы не работают, telnet не коннектится, серверные проги тоже молчат. Куда теперь копать?
    Last edited by tsdima on Sun Nov 22, 2009 2:45 pm, edited 2 times in total.
  • Сразу после перезагрузки, если вызвать конфигурацию сети и поставить галочку напротив "Фикс.", где уже стоит статический адрес (изначально галочка почему-то напротив "Назначенный"), то телнет коннектится, и даже несколько символов успешно туда-сюда пересылаются, но потом начинаются какие-то задержки, а потом и вовсе ничего не передаётся. Хотя пингуется по прежнему нормально. Это глюки реализации TCP/IP?
  • По поводу второй части изменений, лучше исправить ошибку, а не инициализировать переменные:

    Code: Select all

    ; wait for TxReset to complete
            mov     ecx, 200000
    .tx_reset_loop:
            in      ax, dx
            test    ah, 10000b ; check CmdInProgress
            jz      .tx_set_prev
            dec     ecx
            jns     .tx_reset_loop
    .tx_set_prev:
    
    Если команда выполнилась без таймаута, то без этого исправления переменные не инициализировались.
  • Такой вопрос: теоретически, драйвер сетевухи может и не отправить пакет (занят, нет свободных буферов или ошибочное состояние, требующее сброса), но это никак не анализируется вызывающей процедурой eth_tx. То есть пакет просто пропадёт. Не является ли это причиной нестабильной работы TCP?
  • There seems to be a problem with the driver receive function
    (I used a sniffer on another computer, and all packets are sent correctly)

    Also, i managed to connect to irc, and a couple of packets arrived, 2 minutes too late!
    Others did not arrive at all.

    Is your 3com card also a 'boomerang' type, or is it a 'vortex' ?

    EDIT: the TCP checksum of some sent packets is incorrect!
    EDIT2: solution: comment out the line

    Code: Select all

    or      ebx, (1 shl 26) ; set AddTcpChecksum
    Last edited by hidnplayr on Sun Nov 22, 2009 5:31 pm, edited 1 time in total.
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • I think, my card is a 'boomerang' type, 'vortex' procedures don't uses descriptor lists.
  • hidnplayr wrote:the TCP checksum of some sent packets is incorrect!
    May be it is the problem, while ARP and ICMP-echo works properly.
  • Yes, now it works.
    But disconnect in telnet does nothing, another host remain "connected".
  • Who is online

    Users browsing this forum: No registered users and 9 guests