C Programming
- C Books
- The C Programming Language (2nd edition) Kernighan, Ritchie, awesome and useful book on C programming, written by the guys who invented it.
- Advanced Programming in the UNIX Environment (2nd Edition) Stevens, Rago, the absolute bible on C programming in the Unix environment
- Expert C Programming Peter Van der Linden, a great book on advanced C programming
- C Links
Linux Resources
- Some Linux kernel programming rules, extracted from my
experiences hacking the Linux kernel and finding bugs in it.
- Never call a blocking function (e.g. a function that may call sched()) with interrupt disabled or spin_lock held, or you risk deadlock. A typical mistake is to assume kmalloc() never blocks; it can. You need the GFP_ATOMIC flag for a non-blocking kmalloc().
- Never directly dereference a user-provided pointer in kernel; use "paranoid" functions (e.g. copy_from_user) to access them instead.
- Memory allocation can fail, so you must carefully check the returns of *alloc() functions against NULL.
- Don't simply call panic() for trivial errors, because panic() panics your entire kernel! A particular bad thing to do is to panic() whenever kmalloc() returns NULL.
- When you return from a function due to an error (e.g. kmalloc() returns NULL), don't forget to release resources (e.g. spin_lock, allocated memory) you've acquired.
- Building the Linux kernel
- Linux Kernel Archives at kernel.org
- Linux
Kernel HOWTO for configuring and compiling the kernel (very
useful)
- Kernel Rebuild Guide: another source for configuring and compiling the kernel
- Debugging the Linux kernel
- Understanding the Linux kernel
- Linux 2.6 Memory Management (PDF), covering Linux 2.6
- Rusty
Russell's Unreliable
Guide to Locking
- Some Linux kernel programming rules
- More about Linux
- Linux News
VMWare, Remote Access, etc
Check out Prof. Nieh's W4118 resource page.