kernel.img文件
使用Linux内核时,kernel.img文件只是重命名linux/arch/arm/boot/Image。也应该有可能(或至少有可能我上次检查过)使用此文件的压缩版本- zImage。它可以包含集成的initramfs(虚拟磁盘),但不是必需的。例如,库存kernel.img文件不包含initramfswhile 包含kernel_emergency.img。
注意:eLinux Wiki上的官方内核编译指南建议您应使用imagetool-uncompressed.py工具来准备kernel.img文件。这是必要的,RaspberyPi的初期,但现在引导程序可以处理常规Image和zImage文件。
内核资源问题
重要的是,在为RaspberryPi构建内核时,您不能仅使用它的任何版本。只有移植到RaspberryPi的特殊版本才可以使用。不幸的是,当前的上游版本(在kernel.org网站上找到)与RaspberryPi不兼容。另外,versatil_config对于RaspberryPi不利,您应该改bcmrpi_defconfig而使用(在与RaspberryPi兼容的内核源代码中找到),或者bcmrpi_emergency_defconfig如果您打算使用buildin initramfs。
内核构建说明
获取RaspberryPi内核资源的最佳位置是在github基础上。您还可以在RasbperryPi官方Wiki上找到有关如何获取和编译它的有用说明。这是我所涉及的步骤的简化版本(注意:我假设您想交叉编译内核。它速度更快,应该创建相同的结果,但是也可以在RaspberryPi上本地构建内核):
下载官方工具链即可创建自己的工具。用另一种方式,我假设它安装在中/usr/bin/arm-linux-gnueabi-*。如果您在其他位置使用它,则应CROSS_COMPILE在所有make命令中更改选项。
 
转到https://github.com/raspberrypi/linux网站,您可以在其中找到RapsberryPi官方内核源代码。您可以通过两种方式下载代码:
 
使用基金会提供的默认配置:
cp arch/arm/configs/bcmrpi_defconfig .config
 
运行make oldconfig并回答一些问题(可以在每个问题中按Enter键保留默认答案):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
 
编译内核:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
 
将内核模块复制到/tmp/modules:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
 
将Image文件用作kernel.img
 
将所有模块从/tmp/modules/lib/modules/您的计算机/lib/modules/上上传到RaspberryPi rootfs上的目录。
 
添加initramfs
但是,这没有提供有关如何创建的说明initramfs。由于这是一个非常广泛的主题(基本上,您必须创建一个有效的Linux用户空间环境ant,实际上对它的复杂程度没有任何限制),所以我现在不在这里讨论。我只会注意到它initramfs可以以两种不同的形式使用-独立的一种,它是单独的文件,而buildin是与内核映像文件集成在一起的(例如in kernel_emergency.img)。RaspberryPi引导加载程序应支持第二个选项,但是有传言说它在当前固件版本上已被破坏,因此您可能应该使用内置版本。
最好的开始方法是通过从另一个基础github存储库下载可使用的initramfs内容(用于kernel_emergency.img),只有在您能够使用该iniramfs映像引导内核之后,才尝试构建自己的内容。为此所需要做的就是使用CONFIG_INITRAMFS_SOURCE内核配置选项指向下载的目录。
最后的笔记
因此,您应该分3个步骤进行操作:
- 尝试构建和启动没有
initramfs文件的内核。 
- 尝试将现成的
initramfs内容添加到内核中。 
- 更改此
initramfs内容以满足您的需求。