LinuxC头文件与库文件.ppt
文本预览下载声明
头文件、库文件等等 主要内容 头文件 库文件 构造工具 数学协处理器 头文件的引用 #include filename #include “filename” 区别:对于后者,编译器首先在源程序所在目录中搜索filename文件。如果没有找到,编译器再执行同上面一样的搜索过程。 内核头文件 可以看作是对内核及其函数库所提供服务的一个概要说明,是内核及其相关程序专用的头文件。 主要描述内核所用到的所有数据结构、初始化数据、常数和宏定义,也包含少量的程序代码。 Linux/include目录 编译linux内核时无需使用开发环境提供的位于/usr/include/目录下的任何头文件(tools/build.c除外,因为这个程序虽然被包含在内核源代码树种,但它只是一个用于组合创建内核映像文件的工具程序或应用程序,不会被链接到内核代码中)。 Linux/include/目录下的文件 说明 asm/目录:存放于计算机体系结构密切相关的函数声明或数据结构的头文件。例如Intel CPU接口IO汇编宏文件io.h、中断描述符设置汇编宏头文件system.h等。 linux/目录:Linux内核程序使用的一些头文件。包含调度头文件sched.h、内存管理头文件mm.h和终端管理数据结构文件tty.h等。 sys/目录:存放与内核资源相关的头文件。从0.98版开始,全部移到linux/目录下。 a.out.h文件 定义被加载的可执行文件结构 a.out文件格式: 执行头部分:目标文件唯一必要的组成部分 代码段部分:可以以只读形式被加载 数据段部分:总是被加载到可读写内存中 代码重定位部分:含有供链接程序使用的记录数据 数据重定位部分:用于数据段中指针的重定位 符号表部分:用于在二进制目标模块文件之间对命名的变量和函数进行交叉引用。 字符串表部分:含有与符号名对应的字符串 头文件说明 ctype.h:字符测试和处理头文件,也是标准C库的头文件之一。 …… 库文件 编译时专门供内核使用的一些内核常用函数的组合。 基本都是直接调用系统中断调用实现其功能。 编译内核阶段,Makefile中相关指令会把这些程序编译成.o模块,然后组建成lib.a库文件形式并链接到内核模块中。 相关程序说明 _exit.c:程序调用内核的退出系统调用函数 close.c:定义文件关闭函数 ctype.c:提供辅助的数组结构数据,用于对字符进行类型判断 dup.c:创建文件描述符拷贝 execve.c:运行执行程序的系统调用函数 malloc.c:内存分配 open.c:将一个文件名转换成一个文件描述符 setsid.c:如果调用的进程不是一个组的领导时,该函数用于创建一个新会话 string.c:字符串操作函数 wait.c:函数waitpid()和wait(),允许进程获取与其子进程之一的状态信息 write.c:向文件描述符写操作函数write() C标准函数库与Linux内核库 两者组成原理基本一样。Linux内核中使用的函数库文件仅是一个包含足够供内核中用户级进程使用的函数的集合,而开发环境中携带的库则是一个完整的库文件。 头文件有的是内核提供,有的是标准(库)环境提供。与内核有密切关系的(例如进程数据结构、文件系统数据结构等)肯定由内核提供,而已经定为标准的信息则通常由标准库提供。 编译生成一个库文件 先用gcc编译成.o的,再用ar将.o的文件打包成.a的库文件 .o文件的归档 创建函数库libmine.a ar –rc libmine.a a.o b.o c.o 在库文件中添加函数模块dup.o ar –rs dup.o 构造工具Build 内核编译链接/组合结构 Linux/Makefile执行build程序的命令 MINIX可执行文件a.out头部结构 关于Image 数学协处理器 与硬件结构关系密切,需要具有较丰富的有关Intel CPU和协处理器指令代码结构的知识。 与内核实现关系不大。 执行计算机较大运算的方法 直接使用CPU普通指令 为CPU配置一个数学协处理器芯片,简化数学处理编程难度,且运算速度和效率会成倍增加 在系统内核级使用仿真程序来模拟协处理器的运算功能,运算速度和效率最低,但是方便编程,也便于移植 Linux0.12内核的数学协处理器 仿真程序math_emulate.c完全模拟了80387芯片执行协处理器指令的方式 80386是一个通用微处理器,其指令不太适用于数学计算 80387有一组特别的寄存器 Linux0.12数学协处理器源代码 kernel/math目录 Makefile math_emulate.c:异常处理、浮点指令仿真处理主函数、仿真辅助类函数 ea.c:仿真浮点指令时计算其中操作数使用到的有效地址值
显示全部