LINUX内核在体系结构差异较大的平台之间移植时,会产生与数据类型相关的问题,在编译的时候使用 —Wall —Wstrict-prototypes选项,可以避免很多错误的发生。
       内核中的地址是unsigned long类型,指针大小和long类型相同。内核提供哦的数据类型在头文件<asm/types.h>中声明,这个文件又被头文件<linux/types.h>所包含。
        对于ls的时间间隔,不能用100个jiffy。因为不同的平台可能设置不一,所以用Hz(每秒定时器中断的次数)来衡量。

 页面大小
           内存页的大小为PAGE_SIZE字节,而不是4KB。在不同的平台上,页大小范围可以是4KB到64K。PAGE_SHIFT的作用是通过对地址右移PAGE_SHIFT得到一个地址所在页的页号。对于用户空间,可以使用getpagesize函数来得到页的大小。例如,使用get_free_pages函数申请16K空闲空间(即2的14方),先将16KB转成2的order次方空闲页数。在X86下定义PAGE_SHIFT为12,即2的12次方为4KB。
     int order=(14-PAGE_SHIFT>0)?14-PAGE_SHIFT:0;
    buf=get_free_pages(GFP_KERNEL,order);

字节存储顺序
       字节存储顺序有两种:低字节优先(little-endian),高字节优先(big-endian)。低字节优先的方式是在存储多字节数值时,低字节在前面,高字节在后面。现代的处理器大部分工作在big-endia模式下。LINUX内核定义了一组宏,用于在处理器字节序数据和特殊字节序数据之间进行转换。这组宏如下(在linux/byteorder/big_endian.h中):
 u32 __cpu_to_le32(u32);//将一个CPU使用的值的字节序转换成一个小段字节序的无符号值32为little-endian数

 u32 __le32_to_cpu(u32);//与上面相反

数据对齐
      如果需要访问未对齐的数据,则应该使用下面的宏:
      #include<asm/unaligned.h>
       get_unaligned(ptr);
        put_unaligned(val,ptr);

内核通用链表
         操作系统内核经常需要维护数据结构。内核有标准的循环链表、双链表的实现。在<linux/list.h>文件中定义了一个list_head类型简单结构:
          struct list_head(
                    struct list_head *next,*prev;
          };

hlist哈希链表
          在include/linux/list.h中有list链表与hlist哈西链表结构的定义

RCU操作保护的链表
          RCU(Read-Copy  Update)通过延迟写操作来提高同步性能,具体参见第3章。RCU常用来保护读操作占多数的链表与数组。具有RCU的链表的操作函数与普通链表操作函数的区别是在函数名后加上了_rcu,如list_for_each_rcu函数。

AT&T的汇编格式
       基本的行内汇编一般是按照格式:asm("statements"),如asm("nop"),asm("cli"),asm与_asm_是完全一样的。如果有多行汇编,则每一行都要加上引号“”。

内核中的时间延迟
              操作系统通过时钟中断来确定时间间隔。时钟中断由系统硬件以周期性的间隔产生,这个间隔由内核根据Hz值设定,在文件<linux/param.h>中定义。