Some basic knowledge:
1. list
typedef struct list_head
{
struct list_head *pre, next;
}LIST_HEAD;
2. offset
#define offset(type, member) \
(size_t)&((type *)0->member)
2.
#define containof(list_entry, type, member) \
(type *)((char *)(list_entry)-offset(type, member))
3. attribute
__attribute__ ((packed)) -- use least space
__attribute__ ((aligned(8)) -- address aligned to 8
__attribute__ ((noreturn)) -- no check return value when error occurs