3.3.7 配置内核支持ELF文件格式

在上一节,我们配置了内核支持Ext4文件系统。但是内核从文件系统加载文件,仅支持文件系统还是不够的,内核还要支持具体的文件格式,当前Linux系统使用的标准二进制格式是ELF,因此需要配置Linux支持ELF文件格式。以下是配置内核支持ELF文件格式的步骤。

1)执行make menuconfig,出现如图3-25所示的界面。

3.3.7 配置内核支持ELF文件格式 - 图1

图 3-25 配置内核支持ELF文件格式(1)

2)在图3-25中,选择菜单项"Executable file formats/Emulations",出现如图3-26所示的界面。

3.3.7 配置内核支持ELF文件格式 - 图2

图 3-26 配置内核支持ELF文件格式(2)

3)在图3-26中,选中配置项"Kernel support for ELF binaries"。ELF格式支持配置完毕。

在配置内核支持ELF文件格式后,我们重新编译内核并使用新编译的内核引导vita系统后,系统的输出如图3-27所示。

3.3.7 配置内核支持ELF文件格式 - 图3

图 3-27 配置文件系统和文件格式后内核运行情况

根据内核输出的信息可见,内核已经识别出硬盘的分区,也识别出了sda2分区使用的文件系统,并使用Ext4文件系统驱动成功挂载了该分区。但是内核在“报怨”"No init found…"后,依然出现了"panic"。那么,这里的"init"指的是什么呢?我们看一下内核进入用户空间的过程:

3.3.7 配置内核支持ELF文件格式 - 图4

函数kernel_init首先尝试执行initramfs中的字符串ramdisk_execute_command代表的命令。目前没有使用initramfs,所以这个字符串为空,于是其继续尝试到根文件系统中寻找程序,首先其将尝试寻找字符串execute_command代表的命令。

根据下面代码:

3.3.7 配置内核支持ELF文件格式 - 图5

3.3.7 配置内核支持ELF文件格式 - 图6

字符串execute_command代表用户通过内核命令行参数"init"明确指定的程序,形如:

3.3.7 配置内核支持ELF文件格式 - 图7

在上面grub的配置文件中,使用黑体标识的部分就是明确告诉内核,第一个进程直接运行根文件系统中目录/bin下的bash。如果用户没有通过命令行参数"init"指定第一个进程执行的程序,这个进程将依次尝试执行/sbin、/etc、/bin下的init,最后尝试执行/bin/sh。

由于目前根文件系统中除了内核的映像外没有任何文件,因此,内核找不到任何程序,所以在报告"No init found…"后出现"panic"了。为了辅助验证内核的构建,在下一节我们将构建一个基本的根文件系统。