**This is an old revision of the document!** ----

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

====== Michael Decker: Driver Development ====== ==== Week 3 ==== ---- === 10 June === Continued respinning my code today. Most of the functionality has been respun now, and soon a few purely formatting commits will take place (comments, tabs, naming, reordering, splitting to .h file) * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=b35acf625832ad5307d15025ec5d8a018c358346|[Drivers-eepro100] Move bottom half of probe() to open()]] * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=3d11f474ed07aa414d52b7583f6d8f9a66444741|[Drivers-eepro100] Wrote eepro100_close() and eepro100_remove()]] * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=bcc9aedd4253252619e704b569893b5a197022d5|[Drivers-eepro100] Defined io addresses as unsigned long throughout source.]] * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=8281262abddfdda504ddefcdb3aee77c19ec87a5|[Drivers-eepro100] Introduced gPXE txfd support]] * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=5a23d029ab65d173d2f142f9c71bfad883f613f0|[Drivers-eepro100] Handle rx completions in eepro100_poll() with iobufs]] * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=2a9415245618f8aabd67016c3bb5ca3d9e581131|[Drivers-eepro100] Removed obsolete link-establishment test from eepro100_open()]] === 11 June === Ran the code through the compiler this morning; cleaned up some things from the output. * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=b5eecc405b3fe22797b68da20b28687a7d0fb47d|[Drivers-eepro100] Tidy up code with fixes]] Finally got to test her out. Tests were run via PXE chainloading from the onboard NIC to the PCI card. The DHCP server gave PXE the gPXE image, and it gave gPXE an HTTP URL, which pointed to a gPXE script that loads a kernel from an external HTTP server. It wasn't responding past open() at first, so I built a debug image of the original driver to record the output for comparison. Fixed a few mistakes, but I believe the big one was the rx status not being checked in eepro100_poll(). * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=acd7ec62f6baba79930802a54c5f2b1ed279e553|[Drivers-eepro100] Debugging, poll(), open()]] Now she makes it a little ways, though appears to still have problems: <file> gPXE 0.9.3 -- Open Source Boot Firmware -- http://etherboot.org Features: HTTP DNS TFTP iSCSI AoE bzImage Multiboot PXE PXEXT net0: 00:90:27:43:84:4b on PCI01:00.0 (open) [Link:up, TX:0 TXE:0 RX:0 RXE:0] Waiting for link-up on net0... ok DHCP (net0 00:90:27:43:84:4b)... ok net0: 192.168.1.19/255.255.255.0 gw 192.168.1.1 Booting from filename "http://192.168.1.9/gtest.gpxe" http://192.168.1.9/gtest.gpxe... ok http://rom.etherboot.org/gtest/bz2bzImage... Input/output error (0x1d0c6039) Could not fetch http://rom.etherboot.org/gtest/bz2bzImage: Input/output error () Could not boot http://192.168.1.9/gtest.gpxe: Input/output error (0x1d0c6039) No more network devices </file> Next up, more debugging. Once she runs well I'll make formatting adjustments, proper commenting, and consistent naming. After that, transmits will be expanded to multiple TxFDs. === 12 June === Today, more debugging ensued. I changed ''eepro100_transmit'' and ''eepro100_poll'' to check the descriptors for //any// set bits rather than specific ones, as the original driver did. I ensured that ''priv->rxfd'' was incremented in ''eepro100_poll''. I then found the driver successfully communicating without any errors, although it was painfully slow. I stripped ''speedo_soft_rx_reset'', and removed the abort command in particular. I also modified ''eepro100_poll'' to loop until processing all received packets, rather than only handling one and returning. This, along with removing the ''goto check_suspension'' line ensured that a soft_reset didn't occur until all rxfds were available. This increased transfer speeds by many orders of magnitude. Now I can load a kernel & initrd file in less than a second instead of two minutes. * Commit: [[http://git.etherboot.org/?p=people/mdeck/gpxe.git;a=commit;h=b6c1e41be2711c5c9786dbbb7ceacbbc755bbe0e|[Drivers-eepro100] Refined rx & tx, killed speedo_rx_soft_reset. Speed!]] I had my weekly meeting today instead of tomorrow because of birthday plans. Highlights of the meeting included the need to dynamically allocate all tx & rx descriptors and data buffers. This entails finding any alignment requirements that may exist. Things are starting to pick up now with a live, breathing driver to play with! :-D


QR Code
QR Code soc:2008:mdeck:journal:week3 (generated for current page)