【发布时间】:2018-11-01 03:03:10
【问题描述】:
使用基于 Yocto 的工具,我能够生成多个文件进行部署。这些包括:
-
sdimg用于写入 SD 卡的文件 -
cpio.gz存档 (Initramfs) -
Image-initramfs.bin(Initramfs)
我想使用基于 Yocto 的 Linux 发行版在我的嵌入式板 (Raspberry Pi) 中激活 plymouth。但是我不确定如何挂载cpio.gz 存档或Image-initramfs.bin。我在网上读到 vanilla Raspbian 在引导分区的/config.txt 中有一个条目,即initramfs <file.gz> <start_address>,并且在引导分区的/cmdline.txt 中有一个内核命令行选项,即initrd=<file.gz>。
到目前为止,我已经尝试过这两种方法。我将cpio.gz 文件复制到根文件系统分区中的/boot 并配置上述文件,但不起作用。为了分解它,它看起来是这样的:
+ Boot Partition
+ ---- overlays/
+ ---- config.txt
+ ---- cmdline.txt
+ ---- kernel.img
+ 1.2GB Volume (rootfs)
+ ---- bin/
+ ---- boot/
+--- <file>.cpio.gz
+ ---- var/
+ ---- usr/
....
现在,在config.txt,我有类似的东西(尝试了很多变体):
initramfs <file>.cpio.gz 0x00a00000
ramfsfile="<file>.cpio.gz"
ramfsaddr=0x00a00000
在cmdline.txt,我有:
initrd=<file>.cpio.gz dwc_otg.lpm_enable=0 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
然而,没有什么足以让内核给出一个错误。这意味着,系统正常启动,并且没有使用 initramfs 的迹象。
我用 yocto 编译的内核如下:
#> uname -a
#> Linux raspberrypi0-wifi 4.9.77-rt61 #11 PREEMPT RT Tue May 22 01:14:26 +03 2018 armv6l armv6l armv6l GNU/Linux
启用以下内核配置参数:
#> modprobe configs
#> cat /proc/config.gz | gunzip > kernelconf.txt
...
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
我不知道我在这里缺少什么。有什么引起你注意的,请告诉我。非常感谢任何指导。
【问题讨论】:
-
我刚刚注意到一些奇怪的事情。 initramfs 应该在 rootfs 挂载到之前我必须将我的 cpio.gz 移动到引导分区,即使它没有足够的空间。我认为这是正确的方法。稍后我会更新问题。
-
还是一样的行为。像往常一样启动,但没有 initramfs 的迹象。
-
我已经解决了这个问题。会更新的。
-
你发现了吗?我正在尝试做同样的事情。谢谢。
标签: linux-kernel raspberry-pi init yocto boot