版權聲明:您好,轉載請留下本人部落格的位址,謝謝 https://blog.csdn.net/hongbochen1223/article/details/45117739
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