kernel.img文件
使用Linux内核时,kernel.img
文件只是重命名linux/arch/arm/boot/Image
。也应该有可能(或至少有可能我上次检查过)使用此文件的压缩版本- zImage
。它可以包含集成的initramfs
(虚拟磁盘),但不是必需的。例如,库存kernel.img
文件不包含initramfs
while 包含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
内容以满足您的需求。