在 Yocto 中添加自定义启动画面图像(最佳方式)
Add custom splash screen image in Yocto (the best way)
我在我的嵌入式系统 Toradex iMX6 上成功更改了启动画面图像。我将在子目录中找到的内核 defconfig 更改为内核 *.bb 文件并将我的图像(logo_custom_clut224.ppm)添加到我的预构建内核目录 ./tmp-glibc/work-shared/colibri-imx6/kernel-source/drivers/video/logo/ 然后重新编译内核.
有没有可能做得更好?我真的很想更改手动将图像复制到预构建目录的步骤。我能否以某种方式更改 *.bb 文件以包含我的图像并将其用作我的自定义初始图像?
或者是否可以做我自己的方法来更改 defconfig 文件并在构建内核之前以任何方式包含我的图像?
我认为这里 psplash_git.bbappend 是在 Yocto 中使用 psplash 的一个很好的例子。
您可以将更改保留为补丁,然后将其作为补丁提供给 yocto,如果您清除所有内容,yocto 可以将补丁应用到内核。这种方式在不使用Yocto系统的嵌入式linux系统中是最常见的方式。
在yocto中,我更喜欢用psplash。它易于使用,您可以添加带有图像的加载器图标。您只需要将 psplash 添加到您的图像中,并且在您的 psplash 配方中,您只需将图像位置提供给 SPLASH_IMAGES
定义。
我从来没有使用过 Splash 功能。但是我找到了一个解决方案来更改 u-boot 和内核的静态启动徽标。
创建引导映像
我创建了一个脚本,将 jpg 图像转换为 u-boot 和内核所需的两个不同图像。
#!/bin/bash
IMAGE_JPG_INPUT=<YOUR_IMAGE_NAME>.jpg
IMAGE_UBOOT=toradex.bmp
IMAGE_KERNEL=logo_custom_clut224.ppm
echo "Converting $IMAGE_JPG_INPUT"
jpegtopnm $IMAGE_JPG_INPUT | ppmquant 224 > tmp.ppm
pnmnoraw tmp.ppm > $IMAGE_KERNEL
echo ">> Kernel image created: $IMAGE_KERNEL"
ppmtobmp -bpp 8 tmp.ppm > $IMAGE_UBOOT
echo ">> U-boot image created: $IMAGE_UBOOT"
rm tmp.ppm
U-boot 标志
解决方案是替换 u-boot/tools/logos
中的默认引导映像(在我的例子中是 toradex.bmp)。我在 <MY_CUSTOM_LAYER>/recipes-bsp/u-boot/u-boot-toradex/
中创建了一个 bbappend 文件 u-boot-toradex_2016.11.bbappend。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://toradex.bmp"
do_unpack_append() {
os.system("cp ${PWD}/toradex.bmp ${PWD}/git/tools/logos/")
}
复制操作需要在这个函数中完成,因为当你到达 do_patch_prepend() 时,如果你直接 运行 bitbake 或使用 devtool(然后文件),附加文件的位置是不同的移至 sources/u-boot-toradex/oe-local-files/
).
根据食谱我将引导映像添加到 <MY_CUSTOM_LAYER>/recipes-bsp/u-boot/u-boot-toradex/u-boot-toradex
内核标志
对于内核徽标,解决方案类似。我在 <MY_CUSTOM_LAYER>/recipes-kernel/linux
中创建了一个 bbappend 文件 linux-toradex_4.1-2.0.x.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/linux-toradex-4.1-2.0.x:"
SRC_URI += "file://logo_custom_clut224.ppm \
file://enable-custom-logo \
"
do_unpack_append() {
os.system("cp ${PWD}/logo_custom_clut224.ppm ${PWD}/git/drivers/video/logo/")
os.system("patch -s < enable-custom-logo")
}
引导映像已添加到 <MY_CUSTOM_LAYER>/recipes-kernel/linux/linux-toradex-4.1-2.0.x
。我还添加了一个补丁来启用内核配置文件的自定义徽标,并且还禁用了其他徽标图像选项。在我的例子中,$PWD 目录中的原始配方中有一个默认的 defconfig 文件,我必须对其进行修补。
CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_CUSTOM_CLUT224=y
然后在目标上更新了 U-boot 和内核。
我在我的嵌入式系统 Toradex iMX6 上成功更改了启动画面图像。我将在子目录中找到的内核 defconfig 更改为内核 *.bb 文件并将我的图像(logo_custom_clut224.ppm)添加到我的预构建内核目录 ./tmp-glibc/work-shared/colibri-imx6/kernel-source/drivers/video/logo/ 然后重新编译内核.
有没有可能做得更好?我真的很想更改手动将图像复制到预构建目录的步骤。我能否以某种方式更改 *.bb 文件以包含我的图像并将其用作我的自定义初始图像?
或者是否可以做我自己的方法来更改 defconfig 文件并在构建内核之前以任何方式包含我的图像?
我认为这里 psplash_git.bbappend 是在 Yocto 中使用 psplash 的一个很好的例子。
您可以将更改保留为补丁,然后将其作为补丁提供给 yocto,如果您清除所有内容,yocto 可以将补丁应用到内核。这种方式在不使用Yocto系统的嵌入式linux系统中是最常见的方式。
在yocto中,我更喜欢用psplash。它易于使用,您可以添加带有图像的加载器图标。您只需要将 psplash 添加到您的图像中,并且在您的 psplash 配方中,您只需将图像位置提供给 SPLASH_IMAGES
定义。
我从来没有使用过 Splash 功能。但是我找到了一个解决方案来更改 u-boot 和内核的静态启动徽标。
创建引导映像
我创建了一个脚本,将 jpg 图像转换为 u-boot 和内核所需的两个不同图像。
#!/bin/bash
IMAGE_JPG_INPUT=<YOUR_IMAGE_NAME>.jpg
IMAGE_UBOOT=toradex.bmp
IMAGE_KERNEL=logo_custom_clut224.ppm
echo "Converting $IMAGE_JPG_INPUT"
jpegtopnm $IMAGE_JPG_INPUT | ppmquant 224 > tmp.ppm
pnmnoraw tmp.ppm > $IMAGE_KERNEL
echo ">> Kernel image created: $IMAGE_KERNEL"
ppmtobmp -bpp 8 tmp.ppm > $IMAGE_UBOOT
echo ">> U-boot image created: $IMAGE_UBOOT"
rm tmp.ppm
U-boot 标志
解决方案是替换 u-boot/tools/logos
中的默认引导映像(在我的例子中是 toradex.bmp)。我在 <MY_CUSTOM_LAYER>/recipes-bsp/u-boot/u-boot-toradex/
中创建了一个 bbappend 文件 u-boot-toradex_2016.11.bbappend。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://toradex.bmp"
do_unpack_append() {
os.system("cp ${PWD}/toradex.bmp ${PWD}/git/tools/logos/")
}
复制操作需要在这个函数中完成,因为当你到达 do_patch_prepend() 时,如果你直接 运行 bitbake 或使用 devtool(然后文件),附加文件的位置是不同的移至 sources/u-boot-toradex/oe-local-files/
).
根据食谱我将引导映像添加到 <MY_CUSTOM_LAYER>/recipes-bsp/u-boot/u-boot-toradex/u-boot-toradex
内核标志
对于内核徽标,解决方案类似。我在 <MY_CUSTOM_LAYER>/recipes-kernel/linux
FILESEXTRAPATHS_prepend := "${THISDIR}/linux-toradex-4.1-2.0.x:"
SRC_URI += "file://logo_custom_clut224.ppm \
file://enable-custom-logo \
"
do_unpack_append() {
os.system("cp ${PWD}/logo_custom_clut224.ppm ${PWD}/git/drivers/video/logo/")
os.system("patch -s < enable-custom-logo")
}
引导映像已添加到 <MY_CUSTOM_LAYER>/recipes-kernel/linux/linux-toradex-4.1-2.0.x
。我还添加了一个补丁来启用内核配置文件的自定义徽标,并且还禁用了其他徽标图像选项。在我的例子中,$PWD 目录中的原始配方中有一个默认的 defconfig 文件,我必须对其进行修补。
CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_CUSTOM_CLUT224=y
然后在目标上更新了 U-boot 和内核。