到目前为止,我们已经认识了Linux内核子系统,也探究了系统的初始化过程,并且深入探索了start_kernel()函数,同样,了解内核映像的创建也是非常重要的,接下来将讨论一下内核映像的编译和链接过程,那么这些当然需要工具链了,工具链包含编译程序、汇编程序、链接程序,是创建Linux内核映像的一组程序集合,下图说明了工具链的链式关系:
ELF二进制目标文件
可执行ELF目标文件包括:ELF头,程序头表(用于加载的节),第1节,第2节。。。。节头表(可选)
ELF头文件
typedef struct elf32_hdr{
unsigned char e_ident[EI_NIDENT]; //标识该文件是否为ELF文件
Elf32_Half e_type; //指定目标文件类型,例如可执行文件,重定位文件,共享的目标文件
Elf32_Half e_machine; //被编译文件所在系统的体系结构
Elf32_Word e_version; //目标文件的版本
Elf32_Addr e_entry; /* Entry point */ //程序的起始地址
Elf32_Off e_phoff; //保存程序头表在文件中的偏移量
Elf32_Off e_shoff;