LDD之数据类型

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值