This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Piotr Jaroszyński: Usermode debugging under Linux ====== ===== Week 6 [ Jul 5 - Jul 11 2010 ] ===== ==== drivers in userspace ==== After a lot of reading and trial and error I have managed to come up with a working, but awfully hacky proof of concept: <code> # ./pcnet32.linuxlibc gPXE initialising devices... gPXE 1.0.1+ -- Open Source Boot Firmware -- http://etherboot.org Features: HTTP DNS TFTP DHCP (net0 52:54:00:12:34:58).... ok http://root.piotrj.org/files/gpxe/1mb. ok </code> === PIO === To make the ''pci_(read|write)_config_*()'' work I picked ''PCIAPI_DIRECT'' in ''config/ioapi.h'' and made all I/O ports available to userspace with ''iopl(3)''. That also had a side-effect of making rest of the ''PIO'' used by drivers work. The question remains how portable ''PCIAPI_DIRECT'' is. Answering that requries more reading. Other approaches are possible here as the PCI config interface is exposed in ''/sys/'' and there is even a lib in ''pciutils'' for accessing it. === MMIO === Haven't looked at that yet. A kernel module might be required to mark the pages mmaped to hardware as non-cacheable and non-prefetchable. === DMA === And to make DMA work ''core/malloc.c'' uses a mmaped arbitrary (I just tried several ranges until it worked) chunk of ''/dev/mem''. This is ridiculously bad as it can end up corrupting kernel structures, but that's what kvm is for :) Obviously this has to be changed. Stefan suggested that it might be possible to ''mlock()'' the ''heap'' (so that it's not swapped away) from ''core/malloc.c'' and figure out its physical address via ''/proc/pagemap''. That doesn't guarantee for it to be physically contiguous, but at least we can verify that. Doing it properly seems to require a kernel module. MMIO might too and I was supposed to look at UIO anyway, so that's on the radar now.


Navigation

* [[:start|Home]] * [[:about|About our Project]] * [[:download|Download]] * [[:screenshots|Screenshots]] * Documentation * [[:howtos|HowTo Guides]] * [[:appnotes|Application Notes]] * [[:faq:|FAQs]] * [[:doc|General Doc]] * [[:talks|Videos, Talks, and Papers]] * [[:hardwareissues|Hardware Issues]] * [[:mailinglists|Mailing lists]] * [[http://support.etherboot.org/|Bugtracker]] * [[:contributing|Contributing]] * [[:editing_permission|Wiki Edit Permission]] * [[:wiki:syntax|Wiki Syntax]] * [[:contact|Contact]] * [[:relatedlinks|Related Links]] * [[:commerciallinks|Commercial Links]] * [[:acknowledgements|Acknowledgements]] * [[:logos|Logo Art]]

QR Code
QR Code soc:2010:peper:journal:week7 (generated for current page)