This is an old revision of the document!
====== Stefan Hajnoczi: GDB Remote Debugging ====== ===== Week 5 ===== **Milestones:** * [b44] Tested and clean for mainline review. * [bzImage] Fix Lilo stack clobber in prefix. ==== Mon Jun 23 ==== Git commit: [[http://git.etherboot.org/?p=people/stefanha/gpxe.git;a=commit;h=c325ae71ae6ad22442179ddaee7d35017075a29e|[bzImage] Place our own stack to prevent clobbering]] **Lilo bzImage problem identified**. Lilo cannot boot ''gpxe.lkrn'' images. This happens because Lilo places gPXE's stack into the BIOS free memory area. gPXE uses the free memory area when decompressing and loading itself into memory. This means that the stack is overwritten during decompression and the machine triple-faults. I tested this by hardcoding the stack pointer to the value GRUB assigns; this results in a clean boot. A solution was suggested by mcb30 and is already implemented by some of the other prefixes: set our own stack below 0000:7c00. **I am continuing work on the b44 driver**. RX and TX are working but there is lots of cleanup and error handling left. ==== Tue Jun 24 ==== Git commit: [[http://git.etherboot.org/?p=people/stefanha/gpxe.git;a=commit;h=218cc8ce0985b71a0597e3c949845b444008d475|[b44] Interrupt status error reporting]] **Added error handling to the b44 driver and refactored code**. The driver resets the card if a serious error is reported. I haven't had much success at triggering errors during testing. I tried unplugging the cable, taking the network interface down on the other end, etc. I successfully booted ''gtest.gpxe'' ([[http://www.toms.net/rb/|Tom's Root Boot disk]]) from Etherboot.org today. It was cool to boot from the internet with the b44 driver. By the way, I did not experience the problem that DrV has reported on Tulip-based hardware. To speed up development and take it easy on my USB stick, I set up PXE chaining to network boot directly from the freshly compiled image. After doing ''make bin/b44.kpxe'', I simply power on the b44 laptop and it loads my latest gPXE image. **Noticed that "Linux Device Drivers, Third Edition" is free**. See [[http://lwn.net/Kernel/LDD3/|here]]. Some of the book applies to gPXE since our code is often inspired or based off the Linux kernel. **The b44 cannot access memory above 1 GB**. We need a workaround that allocates descriptor rings and IO buffers from memory below 1 GB. We hit this issue today when dmb tested the driver on his machine with 2 GB memory. I have a temporary hack in place to place the gPXE heap at 4 MB into the address space. Need to talk to mentors about a long term solution. Next steps: * [b44] Cleanup & testing. * [GDB] Update [[:dev:gdbstub|GDB stub page]] and screencast when UDP code is merged into mainline. See [[http://grub.enbug.org/DebuggingWithGDB|GRUB GDB wiki page]] for inspiration. * [GDB] Real-mode remote debugging.