OSDev http://osdev.su/ |
|
rtl8139 http://osdev.su/viewtopic.php?f=7&t=581 |
Страница 1 из 2 |
Автор: | Станислав [ 08 июн 2012, 05:54 ] |
Заголовок сообщения: | rtl8139 |
Начал писать драйвер для сетевушки, имеющиеся драйвера на фасме работают через регистры 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, 07:32 ] |
Заголовок сообщения: | Re: rtl8139 |
Отправляемые пакеты хочу делать из любой памяти функцией которая разбивает данные на 512 байт по пакетам, а принимаемые хочу размещать в память выделяемую для них и после приёмки всего объёма запскать программу для этих данных, например если это файл, то откроется программка забивающая эту память по пакетам для диска и создающиё сам файл на файловой системе(если файл большой, то его нужно частями принимать и записывать), если это страничка, то забивается весь объём и выводится на экран и если нужно то тоже сохраняется на диске для возврата на неё не используя сеть. Эта система не использует процессор и такая же система будет у сетевушки по WiFi. Список принятых пакетов с протоколами от разных сетевушек нужно гдето хранить и выводить на экран в какойнить проге. |
Автор: | Станислав [ 08 июн 2012, 09:33 ] |
Заголовок сообщения: | Re: rtl8139 |
Мои знания о протаколах ограничивались tcp ip4 ip6 htm utp не больше 10, но когда открыл список протоколов в wireshark то увидел сотни протаколов, jpg mpg всякие, их там дофига. |
Автор: | Yoda [ 08 июн 2012, 10:54 ] |
Заголовок сообщения: | Re: rtl8139 |
Следует разделять транспортный уровень и логический уровень. Даже в логическом уровне может быть вложенность - отдельно контейнер, отдельно данные. Для транспортного уровня нужно реализовать IPV4, IPV6, UDP, TCP и ICMP. Для логического уровня в рамках общесистемных нужд нужно сделать клиенты DHCP и DNS. Всё остальное каждое приложение должно брать на себя. Т.е. за HTTP должен отвечать браузер, SMTP/POP3/IMAP - почтовый клиент, и т.д. |
Автор: | Станислав [ 08 июн 2012, 11:46 ] |
Заголовок сообщения: | Re: rtl8139 |
Да хорошая идея. Для начала я просто сделаю для приёма один буфер, по его заполнении бит BUFE сброшу флаги ошибок в ISR продвину CAPR, для приёма следующего. Для проверки работоспособности поменяю в нем местами адрес отправителя и получателя и отправлю. Если будет работать то буду мозгавать дальше Добавил запись о том, что подключен кабель или нет, работает, попробую по прерыванию определять вкл\выкл кабеля. |
Автор: | Станислав [ 09 июн 2012, 06:12 ] |
Заголовок сообщения: | Re: rtl8139 |
Написал прерывания Код: 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 Сам буфер походу заполняется в перемешку, но там контроль по протаколам, а это ещё нужно изучать. Наконецто придумал, как возвращаться в код, который отправил пакет на сетевуху через прерывание без цикла ожидания с проверкой, нужно в конце пакета забивать адрес возврата. |
Автор: | Станислав [ 09 июн 2012, 09:16 ] |
Заголовок сообщения: | Re: rtl8139 |
Информация что rtl8139 грузит процессор оправдалась ![]() Толи дело моя 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байта от неё перед принятым пакетом. |
Автор: | Nable [ 09 июн 2012, 18:41 ] |
Заголовок сообщения: | Re: rtl8139 |
to Yoda > транспортный уровень и логический уровень что-что? > транспортный уровень > IPV4, IPV6 щито? Уж от кого совсем не ожидал таких странностей. Где вы этого набрались? Давайте всё же пользоваться принятыми терминами и не мешать всё в кучу: http://en.wikipedia.org/wiki/OSI_model |
Автор: | grindars [ 09 июн 2012, 18:43 ] |
Заголовок сообщения: | Re: rtl8139 |
OSI слабо относится к TCP/IP, у которого своя модель. |
Автор: | Nable [ 09 июн 2012, 19:05 ] |
Заголовок сообщения: | Re: rtl8139 |
Так ли уж слабо относится? Всего лишь убрали из рассмотрения физический уровень (это не отменяет его существования, просто по ссылке о нём инфа в которой о нём вспоминать не нужно) и слили в один уровни 5-7 (обычное дело, в общем-то). Не слабо относится, а вполне так эти уровни являются подмножеством уровней модели OSI. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |