Sounds like a bug in 3c905b driver.
Try to initialise stack manually (through stackcfg) and run some program that uses network, if it also crashed, i'm pretty sure its a problem in driver.
Колибри 0.7.5.0
-
"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
Статическая конфигурация не вешает систему, но сеть не работает - в программе "статус сети" количество пакетов везде ноль.
Поставил до и после eth.write_udp сообщения Sending... и ОК. Первое сообщение напечаталось, от второго успело напечататься только О.
Yes, all network programms crashes system, always at addr 80024D1C.
I suppose it is in e3c59x_boomerang_transmit after
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?
И судя по всему это не единственная ошибка в драйвере. Неужели у кого-то работает?
Вот когда ось была по нулевому адресу, то это наверное работало...
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
-
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.tsdima wrote:Насколько я понял, макросы:
оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?
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
Ну хорошо, с драйвером я разобрался, сделал такие изменения:
и
второе изменение ниже
Теперь не виснет, система пингуется, в таблице ARP правильный MAC-адрес другого хоста, с которого я пинговал.
Однако сетевые программы не работают, telnet не коннектится, серверные проги тоже молчат. Куда теперь копать?
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
(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.
May be it is the problem, while ARP and ICMP-echo works properly.hidnplayr wrote:the TCP checksum of some sent packets is incorrect!
Yes, now it works.
But disconnect in telnet does nothing, another host remain "connected".
But disconnect in telnet does nothing, another host remain "connected".
Who is online
Users browsing this forum: No registered users and 15 guests