Пишу минималистичный драйвер для сетевой карты. В качестве эмулятора выбрал QEMU.
Почитал PCI Specification, почитал PCI Family of Gigabit Ethernet Controllers Software Developer’s Manual для 82540EM.
Написал код: https://pastebin.com/FrBKUzYR
Запустил командой
qemu-system-x86_64 -drive format=raw,file=raw.img,if=floppy,index=0 \
-netdev user,id=n1 -device e1000,netdev=n1,mac=00-14-22-01-23-45
Регистры контроллера отобразились в I/O Address Space, но вот проблема:
Записал в Ethernet Controller's Control Register биты, читаю обратно - всегда возвращается 0.
Status Register тоже возвращает 0.
Регистры возвращают 0 даже там, где по дефолту должен быть 1.
Однако Ubuntu, запущенная в виртуальной машине, каким-то образом обнаруживает рабочий адаптер.