Как связаться между сетевой картой и драйвером Ethernet?

Я пытаюсь построить unikernel в Rust, который загрузит и запустит веб-сервер. Я использую Qemu для тестирования.

До сих пор мне удалось написать ОС с поддержкой сегментации, подкачки страниц и прерываний, следя за различными онлайн-блогами и проектами на github. Ядро запущено и работает и способно обнаруживать программные прерывания, а также аппаратные прерывания, если такое прерывание имеет вид int 32 явно называется. После этого я включил порты ввода-вывода и реализовал все функции ввода-вывода портов, такие как inb,outb,inl,outl,inw,outw это помогает мне читать и писать в порт. Я где-то читал, что так драйвер и устройство взаимодействуют друг с другом. Используя их, я использовал метод зонда для обнаружения периферийных устройств. В qemu было обнаружено 3 устройства.

Одним из таких устройств является Intel 82540EM Ethernet Controller с идентификатором устройства 0x100e и идентификатор поставщика 0x8086, Я пытаюсь связаться с этим драйвером для осуществления передачи и приема пакетов, которые завершат мой проект. Я понял, что вся связь между сетевой картой и драйвером происходит через порты ввода-вывода устройства.

Но я не мог четко понять, что происходит на заднем плане. Итак, может кто-нибудь объяснить мне -Как мы узнаем, что какой-то новый пакет прибыл на сетевую карту?

0 ответов

Другие вопросы по тегам