一、源码目录

版本2.6.34

image.png

二、include

linux系统编译核心需要的大部分公共头文件,跟cpu体系结构相关的头文件在/arch/x86/include等的目录下,这里还是以思维导图说明: 1.1、源码目录介绍 - 图21、asm-generic - 是跟体系结构相关的代码,当体系结构无特殊处理时,就以形式包含/include/asm-generic/目录里的某个文件,否则就以形式包含/arch/*/include/asm/目录某个头文件。但是arch下是与提价架构相关的,所以/linux下包含/arch时只有内核可见。

2、linux - 是跟平台无关的所有头文件

  • byteorder - 多字节序相关的代码(单字节无序关心字节序)
    • big_endian.h - 大端存储或高位优先。数据按二进制展开或16进制表示时,数据的高字节优先存在低地址位置,之后的低字节按地址从低到高依次存储。
    • little_endian.h - 小端存储或低位优先。数据按二进制展开或16进制表示时,低字节优先存在低地址位置,之后的高字节按地址从低到高依次存储。
    • 地址增长方向与字节序无关,跟具体某种数据结构有关,比如进程空间里,堆栈(也叫栈)是从高到底地址增长,但是栈内的变量可以是小端存储,即从上往下是高字节到低字节,否则如果是大端存储,从上往下是低字节到高字节;而堆地址是从低到高增长,跟大端存储方向一致,跟小端存储方向相反。 ```c

      include

int main(void) { int x = 1; // 整型4个字节,属于多字节变量,取地址并转成char指针类型,也就是只取第一个数据的第一个字节 // if ((char )&x == 1) {
printf(“%s”, “little endian”); } else { printf(“%s”, “big endian”); }

  1. return 0;

}

  1. ```c
  2. little endian


3、crypto** - 加密头文件
4、其他

a. /include的文件可能会包含/arch/*/include/asm/下的文件,如定义数据类型文件/include/linux/types.h,包含各体系结构对应的

b. /arch//include/asm/下的文件也可能包含/include/linux下的文件,如体系结构相关的/arch//include/asm/pci.h包含

三、arch

所有跟体系架构相关的代码实现都在这里,包括各种cpu架构,架构子目录有x86、arm、alpha等 1.1、源码目录介绍 - 图3

1、include

2、lib

主要由汇编实现的,内存拷贝、用户空间和内核空间数据拷贝等

  • memcopy.c - 32位架构下内存拷贝,c实现
  • memcopy_64.S - 64位内存拷贝
  • copy_user_64.S - 64位架构下,用户和内核之间的数据拷贝,比如读取/写入io数据等