types.h头文件学习

types.h头文件纵观,就可以看出是对一些数据类型的重命名或者是定义,以及对DMA通用地址的定义以及其64为的特性。下面是types.h头文件的源代码,主要的学习内容都在注释当中。

#ifndef _I386_TYPES_H
#define _I386_TYPES_H

#ifndef __ASSEMBLY__

/**
 * 纵观这个头文件,发现该头文件主要是用来给
 * 定义类型以及给类型重新命名的
 */

//将unsigned short 重命名为 umode_t
typedef unsigned short umode_t;

/*
 * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
 * header files exported to user space
 *
 * __xx也是可以的。他不会影响POSIX命名空间。在导出到用户空间的头文件中
 * 使用这些名称.
 * 
 */

//重命名有符号的char和无符号的char
//可以这样去理解,由于一个char占用一个字节的长度,
//也就是8位,所以才会这样去命名
typedef __signed__ char __s8;
typedef unsigned char __u8;

//重新命名有符号的short和无符号的short
//short类型占有2个字节的长度,也就是16位
typedef __signed__ short __s16;
typedef unsigned short __u16;

//重命名有符号的int和无符号的int
//int类型占有四个字节的长度,即32位
typedef __signed_ /* __KERNEL__ */_ int __s32;
typedef unsigned int __u32;

//在定一个__GNUC__和没有定义__STRICT_ANSI__下
//来重命名long
//long占有8个字节的长度,64位
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
typedef __signed__ long long __s64;
typedef unsigned long long __u64;
#endif

#endif /* __ASSEMBLY__ */

/*
 * These aren't exported outside the kernel to avoid name space clashes
 *
 * 为了避免命名空间冲突,这些将不会导出到内核外面
 */
#ifdef __KERNEL__

//一个宏定义,定义BITS_PER_LONG
//为32
#define BITS_PER_LONG 32

//在没有定义__ASSEMBLY__的情况下
#ifndef __ASSEMBLY__

//同上
typedef signed char s8;
typedef unsigned char u8;

typedef signed short s16;
typedef unsigned short u16;

typedef signed int s32;
typedef unsigned int u32;

typedef signed long long s64;
typedef unsigned long long u64;

/* DMA addresses come in generic and 64-bit flavours.  */
//定义DMA通用地址和64位特性

#ifdef CONFIG_HIGHMEM64G
typedef u64 dma_addr_t;
#else
typedef u32 dma_addr_t;
#endif
typedef u64 dma64_addr_t;

#ifdef CONFIG_LBD
typedef u64 sector_t;
#define HAVE_SECTOR_T
#endif

#ifdef CONFIG_LSF
typedef u64 blkcnt_t;
#define HAVE_BLKCNT_T
#endif

#endif /* __ASSEMBLY__ */

#endif /* __KERNEL__ */

#endif
posted @ 2015-04-18 22:39  陈洪波  阅读(1037)  评论(0编辑  收藏  举报