[读书笔记]内核的数据类型(第十一章)
2018-10-29 本文已影响0人
c枫_撸码的日子
综述
读到这里,基本的知识都差不多了,后面就是了解一些具体的设备驱动程序,例如PCI,USB等,这些章节就不在写笔记。
本章知识主要涉及可移植性问题的探讨。
1.确定的数据类型
#include <linux/types.h>
typedef u8;
typedef u16;
typedef u32;
typedef u64;
确保8、16、32/64位无符号的整数值类型。
对应的有符号的类型同样存在,在用户空间,读者可使用_ _u8,_ _u16等
2.页大小
#include <asm/page.h>
PAGE_SIZE;
PAGE_SHIFT;
定义当前体系架构每页字节数和页偏移位数(4KB为12,8KB为13)的符号
3.字节序
#include <asm/byteorder.h>
_ _LITTLE_ENDIAN
_ _BIG_ENDIAN
这2个符号只有一个被定义 取决于体系架构
u32 _ _cpu_to_le32(u32);
u32 _ _le32_to_cpu(u32);
在已知字节序和处理器字节序之间进行转换的函数。
4.数字对齐
#include <asm/unaligned.h>
get_unaligned(ptr);
put_unaligned(val,ptr);
某些体系结构需要使用这些宏来保护对未对齐的数据。
对应允许访问未对齐的数据的体系架构,这些宏扩展为普通的指针