OSDev

для всех
Текущее время: 02 май 2024, 00:02

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: rtl8139
СообщениеДобавлено: 08 июн 2012, 05:54 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Начал писать драйвер для сетевушки, имеющиеся драйвера на фасме работают через регистры io, а я буду работать через регистры в памяти, так удобнее.
В регистрах первые 6 байт это MAC адрес, и я его просто вывожу в свойствах.
Инициализация оказалась простой
Код:
init_rtl8139:
  mov esi,rtlBUS
mov eax,20
call pci_r
  xor   al,al
  mov [rtl8139BUS],eax      ;[31:8]
mov [ebp],eax
    add eax,37h ;55          Command Register
    or byte[eax],10000b    ;это ресет
@@: bt word[eax],4      ;проверка обнуления бита контроллером, куда мы 1 поставили, бит-4
    jc @b   
    sub eax,7  ;48           Receive (Rx) Buffer Start Address
    mov dword[eax],def70
   
    add eax,12 ;60            Interrupt Mask Register
    mov  word[eax],01111111b
    sub eax,5 ;55          Command Register
    or byte[eax],01100b       ;Receiver Transmitter Enable
ret


перезагрузка просто приводит устройство в предсказуемое состояние, после чего добавляем к этому состоянию нужные нам изменения для нашей работы с ней

У сетевушки RTL8111B/RTL8168B(она у меня на ноутбуке есть) тоже самое с регистрами, только сам адрес немного в другом месте и пакеты имеют приоритеты, так что пишу сразу два драйвера.
У моей сетевушки MAC адрес оказался 00 26 18 6d d1 21, а rtl8139 тестирую в QEMU пока, там он вводится самостоятельно в настройках.

Дальше нужно заняться приёмом передачей, это будет посложнее.


Последний раз редактировалось Станислав 08 июн 2012, 09:41, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 08 июн 2012, 07:32 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Отправляемые пакеты хочу делать из любой памяти функцией которая разбивает данные на 512 байт по пакетам, а принимаемые хочу размещать в память выделяемую для них и после приёмки всего объёма запскать программу для этих данных, например если это файл, то откроется программка забивающая эту память по пакетам для диска и создающиё сам файл на файловой системе(если файл большой, то его нужно частями принимать и записывать), если это страничка, то забивается весь объём и выводится на экран и если нужно то тоже сохраняется на диске для возврата на неё не используя сеть.
Эта система не использует процессор и такая же система будет у сетевушки по WiFi.
Список принятых пакетов с протоколами от разных сетевушек нужно гдето хранить и выводить на экран в какойнить проге.


Последний раз редактировалось Станислав 08 июн 2012, 09:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 08 июн 2012, 09:33 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Мои знания о протаколах ограничивались tcp ip4 ip6 htm utp не больше 10, но когда открыл список протоколов в wireshark то увидел сотни протаколов, jpg mpg всякие, их там дофига.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 08 июн 2012, 10:54 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Следует разделять транспортный уровень и логический уровень. Даже в логическом уровне может быть вложенность - отдельно контейнер, отдельно данные. Для транспортного уровня нужно реализовать IPV4, IPV6, UDP, TCP и ICMP. Для логического уровня в рамках общесистемных нужд нужно сделать клиенты DHCP и DNS. Всё остальное каждое приложение должно брать на себя. Т.е. за HTTP должен отвечать браузер, SMTP/POP3/IMAP - почтовый клиент, и т.д.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 08 июн 2012, 11:46 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Да хорошая идея.
Для начала я просто сделаю для приёма один буфер, по его заполнении бит BUFE сброшу флаги ошибок в ISR продвину CAPR, для приёма следующего.
Для проверки работоспособности поменяю в нем местами адрес отправителя и получателя и отправлю.
Если будет работать то буду мозгавать дальше

Добавил запись о том, что подключен кабель или нет, работает, попробую по прерыванию определять вкл\выкл кабеля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 09 июн 2012, 06:12 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Написал прерывания
Код:
irq_11:
  mov eax,[rtl8139BUS]
   add eax,3Eh    ;62               Interrupt Status Register
   btr word[eax],0   ;Receive (Rx) OK
   jc @f
     sub eax,24   ;48               Receive (Rx) Buffer Start Address
     mov ebx,[eax]
     add eax,8    ;56               Current Address of Packet Read
     movzx edx,word[eax]
     add ebx,edx     ;смещение на пакет
     mov edx,[ebx]   ;4 байта заголовок от сетевухи старшее 'полуслово' - число байт в этом пакете, младшее - состояние
     shr edx,8
     add [eax],dx    ;смешение буфер для следующего пакета
pushad
call rtl_transmit ;отправим полученный пакет ebx - адрес пакета dx размер
popad
     add eax,6
@@:btr word[eax],1   ;Receive (Rx) Error
   jc @f
@@:btr word[eax],2   ;Transmit (Tx) OK
   jc @f
@@:btr word[eax],3   ;Transmit (Tx) Error
   jc @f
@@:btr word[eax],4   ;Rx Buffer Overflow
   jc @f
@@:btr word[eax],5   ;Packet Underrun/Link Change: Set to 1 when CAPR is written but Rx buffer is empty, or when link status is changed.
   jc @f
@@:
inc [gh]   ;количество прерываий
mov dword [APIC_EOI_REG_DEF], 0 ;EOI
iretd


Сам буфер походу заполняется в перемешку, но там контроль по протаколам, а это ещё нужно изучать.
Наконецто придумал, как возвращаться в код, который отправил пакет на сетевуху через прерывание без цикла ожидания с проверкой, нужно в конце пакета забивать адрес возврата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 09 июн 2012, 09:16 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Информация что rtl8139 грузит процессор оправдалась :lol: , в том виде в каком она принимает пакеты процессору разгрибать тяжело полюбому.
Толи дело моя RTL8111B_8168B, в которой действительно хоть какая то обработка пакетов в виде
OWN EOR FS FL LG Large-Send MSS value Frame_Length
TAGS VIDL PRIO CFI VIDH
TX_BUFFER_ADDRESS_LOW
TX_BUFFER_ADDRESS_HIGH
В rtl8139 тупо нету пакетов, только 4байта от неё перед принятым пакетом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 09 июн 2012, 18:41 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
to Yoda
> транспортный уровень и логический уровень
что-что?
> транспортный уровень
> IPV4, IPV6
щито?

Уж от кого совсем не ожидал таких странностей.
Где вы этого набрались? Давайте всё же пользоваться принятыми терминами и не мешать всё в кучу: http://en.wikipedia.org/wiki/OSI_model


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 09 июн 2012, 18:43 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
OSI слабо относится к TCP/IP, у которого своя модель.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: rtl8139
СообщениеДобавлено: 09 июн 2012, 19:05 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Так ли уж слабо относится? Всего лишь убрали из рассмотрения физический уровень (это не отменяет его существования, просто по ссылке о нём инфа в которой о нём вспоминать не нужно) и слили в один уровни 5-7 (обычное дело, в общем-то).
Не слабо относится, а вполне так эти уровни являются подмножеством уровней модели OSI.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB