kernel code reading: add more comment for register_netdev
kernel code test: one test pci driver for e1000e

This time I am trying to write a pci driver to see the basic operations on a
pci device.

I choose to use e1000e since there is a nic of this type on my machine.
kernel code test: access pci config space and request ioport/iomem region

Some basic pci device operations.
1. enable/disable pci devices
2. access the pci config space, retrieve vendro id and device id
3. request ioport/iomem region, can verify in /proc/ioport and /proc/iomem
kernel code test: pci driver remap/access MMIO region

1. ioremap the MMIO region
2. r/w the region.

ATTENTION: please read the SPEC before write to the MMIO region. May cause an
undefined behavior.
kernel code test: some fix on workqueue example, make code more robust

1. use container_of() to make the code more reliable
2. my_wq_function() free the "my_work" instead of the "work"
3. pass the "work_struct" instead of the "my_work_t" to queue_work() and
   INIT_WORK()
kernel code test: Use Delayed Work

This is an example of the Delayed Work Queue.

This will wait 2xHZ(2 seconds) then run the work.
kernel code test: access capabilities

pci_find_capability() will return the position of a specific capability in the
config space.
userspace test code: create tun interface
userspace test code: netlink listener

Netlink is used in uevent to transfer message from kernel to userspace.
kernel code reading: tun device

Tun/Tap is a virtual kernel network interface. This document show how tun
interface is initialized.

Especially list why it is named /dev/net/tun.