依旧是好记性不如烂笔头,今天需要学习的是arch-arm目录下的代码。
首先我们先看一下inclue目录下的endian这个头文件我们主要是需要知道下面的几点知识。
1、先看一下下面的代码的片段
#if !defined __ARM_ARCH_5__ && !defined __ARM_ARCH_5T__ && \ !defined __ARM_ARCH_5TE__ && !defined __ARM_ARCH_5TEJ__ && \ !defined __ARM_ARCH_4T__ && !defined __ARM_ARCH_4__
REV与REV16在ARM5与ARM4上面是不可用的。同时说明了没有包含<machine/cpu-features.h>这个头文件的原因是因为它会使用类似如PLD的符号串处理语言来污染命名空间。
接下来我们看到的是marchine目录下的一些头文件的定义。
在_types这个头文件中,我们看以下的代码的片段:
#define _SIZE_T #define _SSIZE_T #define _PTRDIFF_T typedef unsigned long size_t; typedef long ssize_t; typedef long ptrdiff_t; #endif
内核定义size_t作为无符号的整型数据,但是g++却希望它的类型是无符号long类型的数据。
接下来主要是仔细的来看一下cpu-features这个头文件的定义:
1、正如注释所说的那样,这个头文件定义的目的是定义若干符号串语言来积极响应CPU的特色。同时这些CPU的特色在目标的CPU上面再编译时刻也许是不能够使用的。
2、这样做的目的是使我们从各种不同的Arm的体系结构中抽象出来。
3、ieee这个头文件的作用是定义依赖机器的浮点型数据的结构。
接下来查看一下kernel这个头文件的定义:
在这个文件中主要是定义内核特定的定义,优化了内核的头文件。