LDD之数据类型

来源:互联网 发布:软件开发立项申请表 编辑:程序博客网 时间:2024/06/06 20:00

Linux内核数据类型分为三种:

  1,标准C语言基本数据类型:在不同操作系统中内存空间大小不同

         byte,char,short,int,long,long long

         unsigined char,unsigned short,unsigned int, unsigned long

   2,确定大小的数据类型:内存空间大小相同,便于移植;属于Linux内核特定类型,在其他操作系统不支持;

          u8(typedef unsigned char u8;),u16(typedef unsigned short u16;),u32(typedef unsigned int u32;),u64(typedef unsigned long long u64;)

          __u8,__u16,__u32,__u64(用户和用户空间交互数据)

         s8,s16,s32,s64(带符号类型)

         

        c99标准定义的相关类型,uint8_t,uint16_t,uint32_t,uint64_t(属于标准所有操作系统都支持)

   3,用于特定内核对象的数据类型:类型语义明确;但是赋值的时候不清楚其类型;

           用typedef定义特定用途的类型,例如:pid_t 


Linux内核移植其他方面需要注意的问题:

      1,时间:对于时钟中断频率要使用宏定义:HZ,不要假定其值为确定值;

      2,页面大小:页面大小要使用PAGE_SIZE宏定义,不要假定其值为4K,页内偏移量使用PAGE_SHIFIT,不要假定其值为12;

      3,内存对齐:内存对齐值为数据类型本身对齐值(占用内存空间起始地址为数据类型本身占用空间大小的整数倍)与指定对齐值二者取最小的值;内存对齐是硬件结构设计的限制,对内存对齐的数据读写可以在最少的内存周期内完成,达到内存优化的提高性能的目的;

      4,字节序:当CPU一次读写内存的数据宽度超过一个字节时,数据在内存中的存放就需要注意字节序,这和体系结构相关,不同的体系结构字节序不同,X86架构处理器采用小端字节序;PCI设备采用小端序,网络设备采用网络字节序,当字节序不同是需要调整字节序:

           unsigned  le32_to_cpu(le32);

           unsigned cpu_to_le32(cpu);

          字节序不同就无法正常得到数据,就会导致非常严重的问题;

0 0