tag 标签: splash

相关博文
  • 热度 2
    2024-1-26 14:31
    1461 次阅读|
    0 个评论
    By Toradex秦海 1). 简介 嵌入式 Linux 下传统实现 Splash Screen 的方式是通过替换 kernel 默认的 TUX 小企鹅 logo 为定制的开机画面图片来实现嵌入式设备开机图片,虽然比较成熟且可以保证开机画面加载比较早,但是存在的问题首先是对嵌入式设备不同显示接口的兼容性不好,另外每次修改适配都需要重新编译内核,维护起来不是很方便,然后就是只能支持静态图片无法支持动画。基于上述原因,使用专门的 Splash Screen 工具来实现开机画面逐渐成为嵌入式设备的主流方向,本文就简单演示使用 Plymouth 工具来实现动态开机画面的示例。 本文所演示的平台来自于ToradexVerdiniMX8MM 嵌入式平台,基于NXP iMX8M Mini系列ARM处理器,主要核心架构为Cortex-A53。 2 ) . 硬件 准备 a). Verdin iMX8MM ARM 核心版配合 Dahlia 载板,并通过 DSI-LVDS Adapter 连接 10inch LVDS 液晶显示屏 以及调试串口以便测试。 3). 关于 Plymouth a). Plymouth 是一个实现 Linux 启动过程中开机画面的工具软件,其启动的时间非常早,通过 initramfs 帮助可以在 Linux 内核加载同时启动,甚至要早于 Linux rootfs 文件系统挂载。Plymouth 可以方便的实现开关机图片或者动画。 b). 关于 Plymouth 更多详细介绍以及源代码请自行参考如下资料。 ./ Plymouth 官方页面 Plymouth ./ Plymouth 源代码 https://gitlab.freedesktop.org/plymouth/plymouth ./ Plymouth 深入配置使用说明 Plymouth - ArchWiki 4 ). 通过 Ycoto 环境配置 Plymouth 并编译 Ycoto Linux BSP Image a). 配置 Ycoto Project 编译环境 ./ 参考这里配置基本的 Ycoto Project 编译环境 Build a Reference Image with Yocto Project/OpenEmbedded | Toradex Developer Center ./ 参考如下文章配置定制化 layer 通过Yocto Project定制嵌入式Yocto Linux镜像 b). 在定制化 layer meta-customer-demos 下面添加 layer 配置文件 --------------------------------------- $ mkdir -p ../oe_core/layers/meta-customer-demos/conf $ cd .../oe_core/layers/meta-customer-demos/conf ### create layer.conf file ### # We have a conf and classes directory, append to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "customer-demos" BBFILE_PATTERN_customer-demos = "^${LAYERDIR}/" BBFILE_PRIORITY_customer-demos = "24" # Let us add layer-specific bbappends which are only applied when that # layer is included in our configuration BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \ for layer in BBFILE_COLLECTIONS.split())}" # Add layer-specific bb files too BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \ for layer in BBFILE_COLLECTIONS.split())}" LAYERDEPENDS_customer-demos = " \ core \ yocto \ openembedded-layer gnome-layer multimedia-layer networking-layer \ " LAYERSERIES_COMPAT_customer-demos = "hardknott honister kirkstone" --------------------------------------- c). 在定制化 layer meta-customer-demos 下面添加 Plymouth 相关配置文件 ./ 增加 Plymouth bb file --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-core/plymouth $ cd recipes-core/plymouth ### cteate plymouth_%.bbappend file ### FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += " \ file://toradexlogo-white.png \ file://spinner.plymouth \ " PACKAGECONFIG = "pango drm" EXTRA_OECONF += "--with-udev --with-runtimedir=/run" do_install:append () { install -m 0644 ${WORKDIR}/toradexlogo-white.png ${D}${datadir}/plymouth/themes/spinner/watermark.png install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth } --------------------------------------- ./ 添加 Plymouth 使用的 theme 文件 和 background logo 图片文件,这里使用的是一个配合屏幕分辨率的白色背景图片,因此 spinner 图标会被遮盖,实际使用可以根据需要修改图片文件和 theme 配置。 --------------------------------------- $ mkdir files $ cp .../toradexlogo-white.pngfiles $ cd files ### cteate spinner theme file spinner.plymouth ### Name=Spinner Description=Adoption of official Spinner Theme for Toradex. ModuleName=two-step Font=Cantarell 12 TitleFont=Cantarell Light 30 ImageDir=/usr/share/plymouth/themes/spinner DialogHorizontalAlignment=.5 DialogVerticalAlignment=.382 TitleHorizontalAlignment=.5 TitleVerticalAlignment=.382 HorizontalAlignment=.5 VerticalAlignment=.7 WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.45 Transition=none TransitionDuration=0.0 BackgroundStartColor=0x000000 BackgroundEndColor=0x000000 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff MessageBelowAnimation=true --------------------------------------- d). 由于 Plymouth 是文件系统组件,通过 Linux kernel 加载完成后在使能systemd 来启动,这样就会导致比较大的延迟;为了尽可能使 Plymouth 在系统启动过程中尽早启动,可以添加包含 Plymouth 的 Initramfs 镜像使得 Plymouth 在 Linux Kernel 加载过程中即同步启动了。 ./ 添加 Initramfs bb 定义以及相关文件,对应需要 files 目录下的相关文件请参考 这里 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/recipes-core $ mkdir -p initramfs-framework/files $ cd initramfs-framework ### cteate initramfs-framework_1.0.bbappend file ### FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "\ file://plymouth \ file://kmod \ file://0001-Mount-run-with-tmpfs.patch \ file://0002-only-scan-for-block-devices.patch \ " PACKAGES:append = " \ initramfs-module-plymouth \ initramfs-module-kmod \ " SUMMARY:initramfs-module-plymouth = "initramfs support for plymouth" RDEPENDS:initramfs-module-plymouth = "${PN}-base plymouth ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-udev-rules', '', d)}" FILES:initramfs-module-plymouth = "/init.d/02-plymouth" SUMMARY:initramfs-module-kmod = "initramfs support for loading kernel modules" RDEPENDS:initramfs-module-kmod = "${PN}-base" FILES:initramfs-module-kmod = "\ /init.d/01-kmod \ /etc/modules-load.d/* \ " do_install:append() { install -m 0755 ${WORKDIR}/plymouth ${D}/init.d/02-plymouth install -m 0755 ${WORKDIR}/kmod ${D}/init.d/01-kmod } # Adding modules so plymouth can show the splash screen during boot SRC_URI:append:mx8-nxp-bsp = " file://50-imx8-graphics.conf" RDEPENDS:initramfs-module-kmod:append:mx8-nxp-bsp = " \ kernel-module-display-connector \ kernel-module-lontium-lt8912b \ " do_install:append:mx8-nxp-bsp() { install -d ${D}/etc/modules-load.d/ install -m 0755 ${WORKDIR}/50-imx8-graphics.conf ${D}/etc/modules-load.d/50-imx8-graphics.conf } --------------------------------------- ./ 添加 initramfs image 定义文件 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/recipes-core $ mkdir images $ cd images ### cteate initramfs-plymouth-splash-image.bb file ### DESCRIPTION = "Toradex plymouth splash demo initramfs image" PACKAGE_INSTALL = "initramfs-framework-base initramfs-module-udev \ initramfs-module-rootfs initramfs-module-debug \ initramfs-module-plymouth ${VIRTUAL-RUNTIME_base-utils} base-passwd \ initramfs-module-kmod" SYSTEMD_DEFAULT_TARGET = "initrd.target" # Do not pollute the initrd image with rootfs features IMAGE_FEATURES = "splash" export IMAGE_BASENAME = "initramfs-plymouth-splash-image" IMAGE_LINGUAS = "" LICENSE = "MIT" IMAGE_FSTYPES = "cpio.gz" IMAGE_FSTYPES:remove = "wic wic.gz wic.bmap wic.vmdk wic.vdi ext4 ext4.gz teziimg" IMAGE_CLASSES:remove = "image_type_torizon image_types_ostree image_types_ota image_repo_manifest license_image qemuboot" # avoid circular dependencies EXTRA_IMAGEDEPENDS = "" inherit core-image nopackages IMAGE_ROOTFS_SIZE = "8192" # Users will often ask for extra space in their rootfs by setting this # globally. Since this is a initramfs, we don't want to make it bigger IMAGE_ROOTFS_EXTRA_SPACE = "0" IMAGE_OVERHEAD_FACTOR = "1.0" BAD_RECOMMENDATIONS += "busybox-syslog" --------------------------------------- e). 由于增加了 initramfs image,就需要修改 distroboot 启动文件 boot.scr 来调整启动进程,这里通过修改 u-boot-distro-boot 文件来适配,对应的 files 目录下的文件完整内容请参考 这里 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-bsp/u-boot/files $ cd recipes-bsp/u-boot ### cteate u-boot-distro-boot.bbappend file ### FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI:append = " \ file://boot.cmd.in \ " --------------------------------------- f). 另外,对于 Verdin iMX8M Mini,由于显示部分是通过 DSI-LVDS Bridge 来实现的,为了使得在 initramfs 阶段就可以加载相关驱动,需要修改 Linux Kernel 配置,而对于其他 iMX8/iMX8X/iMX8MP 如果是原生 LVDS/HDMI 接口则无需修改。 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-kernel/linux/files $ cd recipes-kernel/linux ### cteate linux-toradex%.bbappend file ### FILESEXTRAPATHS:prepend := "${THISDIR}/files:" # Prevent the use of in-tree defconfig unset KBUILD_DEFCONFIG SRC_URI += "\ file://defconfig \ " --------------------------------------- ./ files 目录下的完整 defconfig 文件请见 这里 ,主要修改了如下几个驱动的配置 --------------------------------------- -CONFIG_DRM_PANEL_LVDS=m +CONFIG_DRM_PANEL_LVDS=y -CONFIG_DRM_SEC_MIPI_DSIM=m +CONFIG_DRM_SEC_MIPI_DSIM=y -CONFIG_DRM_TI_SN65DSI83=m +CONFIG_DRM_TI_SN65DSI83=y -CONFIG_DRM_IMX_SEC_DSIM=m +CONFIG_DRM_IMX_SEC_DSIM=y --------------------------------------- g). 最后配置完成的 meta-customer-demos 文件结构如下 --------------------------------------- $ tree meta-customer-demos/ meta-customer-demos/ ├── conf │ └── layer.conf ├── recipes-bsp │ └── u-boot │ ├── files │ │ └── boot.cmd.in │ └── u-boot-distro-boot.bbappend ├── recipes-core │ ├── images │ │ ├── initramfs-ostree-torizon-image.bb │ │ └── initramfs-plymouth-splash-image.bb │ ├── initramfs-framework │ │ ├── files │ │ │ ├── 0001-Mount-run-with-tmpfs.patch │ │ │ ├── 0002-only-scan-for-block-devices.patch │ │ │ ├── 50-imx8-graphics.conf │ │ │ ├── kmod │ │ │ ├── plymouth │ │ │ └── rootfs │ │ └── initramfs-framework_1.0.bbappend │ └── plymouth │ ├── files │ │ ├── spinner.plymouth │ │ └── toradexlogo-white.png │ └── plymouth_%.bbappend └── recipes-kernel └── linux ├── files │ └── defconfig └── linux-toradex%.bbappend 13 directories, 17 files --------------------------------------- h). 为了将 initramfs 集成到编译生成的 Image 压缩包内,需要修改如下 image_type 配置文件 --------------------------------------- --- a/layers/meta-toradex-bsp-common/classes/image_type_tezi.bbclass +++ b/layers/meta-toradex-bsp-common/classes/image_type_tezi.bbclass @@ -8,7 +8,7 @@ WKS_FILE_DEPENDS:append = " tezi-metadata virtual/dtb" DEPENDS += "${WKS_FILE_DEPENDS}" IMAGE_BOOT_FILES_REMOVE = "${@make_dtb_boot_files(d) if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else ''}" -IMAGE_BOOT_FILES:append = " overlays.txt ${@'' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'overlays/*;overlays/'}" +IMAGE_BOOT_FILES:append = " overlays.txt initramfs-plymouth-splash-image-${MACHINE}.cpio.gz;initramfs-plymouth-splash-image.img ${@'' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'overlays/*;overlays/'}" IMAGE_BOOT_FILES:remove = "${IMAGE_BOOT_FILES_REMOVE}" RM_WORK_EXCLUDE += "${PN}" --------------------------------------- i). 修改 build/conf/bblayer.conf 文件添加相关 layer --------------------------------------- --- a/build/conf/bblayers.conf 2023-03-30 11:13:22.946533642 +0800 +++ b/build/conf/bblayers.conf 2023-11-17 16:03:01.666129480 +0800 @@ -35,6 +35,7 @@ ${TOPDIR}/../layers/meta-freescale-distro \ ${TOPDIR}/../layers/meta-toradex-demos \ ${TOPDIR}/../layers/meta-qt5 \ + ${TOPDIR}/../layers/meta-customer-demos\ \ \ ${TOPDIR}/../layers/meta-toradex-distro \ --------------------------------------- j). 修改 build/conf/local.conf 文件,增加 Plymouth 和 initramfs 相关定义 --------------------------------------- # add plymouth support CORE_IMAGE_EXTRA_INSTALL += "plymouth" INITRAMFS_IMAGE = "initramfs-plymouth-splash-image" INITRAMFS_FSTYPES = "cpio.gz" --------------------------------------- k). 重新编译生成 Ycoto Linux BSP Image --------------------------------------- $ MACHINE="verdin-imx8mm" PARALLEL_MAKE="-j 4" BB_NUMBER_THREADS="4" bitbake tdx-reference-multimedia-image --------------------------------------- l). 参考 这里 的说明将上述修改下重新编译生成的 Ycoto Linux Image 通过 Toradex Easy Installer 更新到 Verdin iMX8MM 模块。 5). Plymouth Splash 部署测试 a). 安装好上述编译的 Image 后,参考 这里 说明配置合适的 Device-tree Overlay 文件来适配屏幕;然后配置如下 U-boot 环境变量来显示 Splash,且缩短加载时间 --------------------------------------- # setenv tdxargs ‘quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3’ # setenv bootdelay 0 # saveenv && reset --------------------------------------- b). 为了保证 Plymouth Splash和 Qt Demo App切换更自然,且中间不会被 Weston Desktop 中断,需要修改一下一些 Systemd Service 文件 --------------------------------------- --- a/lib/systemd/system/plymouth-quit.service +++ b/lib/systemd/system/plymouth-quit.service @@ -1,6 +1,6 @@ Description=Terminate Plymouth Boot Screen -After=rc-local.service plymouth-start.service systemd-user-sessions.service +After=rc-local.service plymouth-start.service systemd-user-sessions.service waylan d-app-launch.service ExecStart=-/bin/plymouth quit --retain-splash --- a/lib/systemd/system/serial-getty@.service +++ b/lib/systemd/system/serial-getty@.service @@ -12,7 +12,7 @@ Documentation=man:agetty(8) man:systemd-getty-generator(8) Documentation=http://0pointer.de/blog/projects/serial-console.html BindsTo=dev-%i.device -After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty -pre.target +After=dev-%i.device systemd-user-sessions.service getty-pre.target After=rc-local.service # If additional gettys are spawned during boot then we should make --- a/lib/systemd/system/weston.service +++ b/lib/systemd/system/weston.service @@ -13,7 +13,7 @@ After=systemd-user-sessions.service # If Plymouth is used, we want to start when it is on its way out. -After=plymouth-quit-wait.service +#After=plymouth-quit-wait.service # D-Bus is necessary for contacting logind. Logind is required. Wants=dbus.socket --- a/etc/xdg/weston/weston.ini +++ b/etc/xdg/weston/weston.ini @@ -6,6 +6,7 @@ repaint-window=16 #enable-overlay-view=1 modules=screen-share.so +shell=kiosk-shell.so # #size=1920x1080 --------------------------------------- b). 最后部署完成的测试效果如下,实测从开机到出现 Splash 画面大约5秒,另外 Plymouth splash 默认除了支持开机画面,在 reboot 重启和 poweroff 关机的时候也会同样显示 splash 画面 动画演示如下 ​ 6). 总结 本文基于嵌入式 Linux 简单演示了 Plymouth splash 开机画面的部署和测试。
  • 热度 1
    2021-6-21 15:18
    2875 次阅读|
    1 个评论
    ​ By Toradex胡珊逢 开机动画普遍存在于消费类电子设备,特别是手机和平板。嵌入式 Linux 系统除了显示开机 logo 外,同样也可以实现开机动画。本文将在 Colibri iMX8X 计算机模块上介绍如何添加自定义的开机动画。 嵌入式设备从上电开机,会经历系统初始化、驱动加载、运行应用,最终在屏幕上显示应用界面。这个过程取决于嵌入式系自身的复杂程度和应用程序,通常可以从几秒到几十秒不等。而期间显示开机进度条或者开机动画能够提升设备的使用体验。文件接下会演示如何使用 PSplash 实现进度条显示,EasySplash 实现内容更加丰富的开机动画。 PSplash 这是一个非常精简的工具,极少的第三方软件依赖,首次发布于 2006 年。同时它能够非常容易地集成到 Yocto Project 中,事实上在 Toradex 默认的 Yocto Project 环境 中已经包含了相应的 recipe。用户只要在 local.conf 中添加 IMAGE_INSTALL_append = " psplash" 即看到默认的开机进度条。但正由于其精简的特定,任何的修改包括背景图片、颜色都需要通过直接更改头文件,甚至是源代码来完成。在 Yocto Project中这就需要编写相应的补丁文件。对于简单的图片更改,这会是更加耗时的操作。因此我们接下来使用 Yocto Project 生成的 SDK 直接编译 PSplash。 首先下载PSplash 源码。 ​ 准备一张和显示屏像素一致的背景图片,格式为 jpg。以及合适尺寸的进度条图片,同样也是 jpg 格式。这里我们使用 7寸 RGB 并口 LCD 显示屏,像素为 800x480。背景图片和进度条图片分别为 toradex.jpg 和 bar.jpg。将图片放在 PSplash 源码目录中。 然后使用psplash 自带的 make-image-header.sh 将图片转换为头文件。 ​ 此时会生成 bar.jpg-img.h 和 toradex.jpg-img.h 两个文件。为了编译方便,分别将其重命名为 psplash-bar-img.h 和 psplash-poky-img.h,否则需要修改 psplash.c 包含新生成的头文件。 psplash-config.h 和 psplash-colors.h 两个文件中可以修改显示效果和颜色。例如在 psplash-config.h 中我们使用全屏显示。 ​ 在 psplash-colors.h 中将默认背景颜色设置为黑色,和上面背景图片的色彩一致。进度条则为蓝色。 ​ 配置修改完成后,使用 SDK 进行编译。 ​ Linux Reference Minimal V5.3.0 BSP 的 Colibri iMX8X,路径为 /usr/bin/。同时在 /lib/systemd/system 创建下面两个 systemd service 文件,用于 psplash 自启动。 psplash-start.service ​ psplash-systemd.service ​ 然后执行 ​ 为了不在屏幕上显示启动日志信息,还需要在 u-boot 中配置以下参数。 ​ 重启后可以看到屏幕上显示的进度条。 ​ EasySplash Linux Multimedia BSP v5.3.0 。 首先下载 EasySplash 源码。 ​ 编译 EasySplash。 ​ 编译完成后将 bin 目录中的 easysplash 和 easysplashctl 可执行二进制文件复制到 Colibri iMX8X 的 /sbin/ 中,easysplash-quit.service 和 easysplash-start.service 复制到 /lib/systemd/system 中。 接下来准备需要显示的开机动画文件。 EasySplash 会从 zip 压缩包读取动画播放控制文件和 PNG 图片,zip 压缩包中的内容如下: ​ desc.txt 是动画播放控制文件,part1 和 part2 是两个文件夹,用于存放 PNG 图片。desc.txt 的内容如下,这里用于举例说明。 ​ 第一行分辨表示显示屏幕宽 800 像素,高 480 像素,以 20 fps 速度显示图片。第二行,p:播放模式,需要完整显示所有的内容后才停止,1:循环次数,0:该参数是遗留变量,不再被使用,part1:PNG 图片存放的位置。用户可以更具需要添加多行来显示其他内容。该文件的详细说明可以参考源码中 doc/Animation-Structure.md。 PNG 图片可以通过 ffmpeg 工具从视频文件获取。这里我们采用 EasySplash 自己的 ossystem-demo 中的 mp4 作为演示。 ​ 将生成的文件压缩为 bootanimation.zip,复制到 Colibri iMX8X 的 /home/root/ 目录。 ​ 修改 /lib/systemd/system 中 easysplash-start.service 文件,ExecStart 中修改 easysplash 实际存放的路径,同时添加 bootanimation.zip 所在的位置。 ​ easysplash-quit.service 也是一样。 ​ 然后执行 ​ 为了不在屏幕上显示启动日志信息,还需要在 u-boot 中配置以下参数。 ​ 重启后可以看到开机动画。 ​ 总结 上面介绍了在不改变 BSP 本身结构和应用程序的情况下添加开机进度条或者开机动画,所以这些工具都是用户应用而运行的。为了更早地显示开机动画,也有采用其他方式加载,例如 Torizon ,它使用 initial ram disk,在其中运行 plymouth 显示开机动画, 并且可以非常方便地对其进行替换 。由于 initial ram disk 是在正式的 rootfs 前运行,这是一个非常精简的文件系统,从而能很早完成加载并示画面。Toradex Linux BSP 尚未采用该方式。另外对于需要快速启动的嵌入式设备,开机动画的运行不可避免会占用一部分系统资源,从而影响到主要应用的加载和运行。 ​
  • 热度 17
    2014-7-25 23:25
    1681 次阅读|
    0 个评论
    Plymouth是Fedora10以后才出现的项目,所以之前的Fedora版本不能使用它,而是通过直接修改grub配置和其下的文件: ============================== http://www.tldp.org/LDP/LG/current/jayanth.html ============================== 好吧,其实上面这个帖子已经写得非常详细了,除了更换背景图片,其他的splash定制我也不是很想深入研究,写这个博文主要是为了吐槽。。。 Fedora Core 6有3.3G,里面的东西也非常多,除了一大列games,还有非常多的应用和设置,连GIMP都自带了,而最新的Fedora20才900多M,除了保留基本的Rhythmbox、LibreOffice之外,游戏神马的都没有,图形化的设置选项也非常少,干净清爽。 相对于Ubuntu的目标“Windows和Office的开源替代方案”,Fedora的目标是“展示最新的自由和开源软件的Linux操作系统”。对比以前的大杂烩,Fedora好像找到了自己的准确定位,带来一种久经锤炼的完美感。
  • 热度 13
    2014-7-25 12:05
    2613 次阅读|
    0 个评论
    调试Plymouth,经常会遇到关机可以正常显示动画,但是开机却总是保持charge球的情况;并且还会遇到hot-dog老是自动应用且删除不了的问题。 其实答案总是在最明显的地方,就看你能不能留意到,还是把它当作背景噪声忽略掉。 在前面的调试过程中,我学习到了基本的Plymouth应用步骤,主要是这么几步: plymouthd plymouth --show-splash plymouth quit plymouth-set-default-theme --list plymouth-set-default-theme xxx 而update-alternatives命令,只在自己制作theme的时候用到,yum时是用不到的,所以答案就在上面的plymouth*五条命令中。之前采用kernel command line观察Plymouth的启动信息时,总是会发现这么一行: find_system_default_splash:System default splash is configured to be 'charge' 就是说,虽然执行了plymouth-set-default-theme solar命令,但是默认的theme并没有改过来。 执行: plymouth-set-default-theme --help 会出现下面的信息: Plymouth theme chooser usage: plymouth-set-default-theme { --list | --reset | | --help }   -h, --help             Show this help message   -l, --list             Show available themes   -r. --reset            Reset to default theme   -R, --rebuild-initrd   Rebuild initrd (necessary after changing theme)              Name of new theme to use (see --list for available themes) 注意-R这个参数,它提示在改变theme之后需要重新编译initrd。所以,再执行: plymouth-set-default-theme -R 会出现下面的信息: /usr/share/plymouth/themes//.plymouth does not exist ************************************************* ****更正:这条命令实际上应该是这样的: plymouth-set-default-theme -R solar 就可以顺利调用dracut命令了,但是还是要注意的是它生成的是: initrd-3.15.6-200.fc20.i686.img 而不是: initramfs-3.11.10-301.fc20.i686.img 问题是,我的Fedora20采用的是前者,这从/boot/grub2/grub.cfg里面也能看出来: =========== linux   /vmlinuz-3.11.10-301.fc20.i686 root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=fedora/root  rhgb quiet LANG=en_US.UTF-8 initrd /initramfs-3.11.10-301.fc20.i686.img =========== 因为此时以boot为根目录,所以vmlinuz和initramfs都放在了/boot下面。那initrd和initramfs的区别是什么呢? http://www.linux.com/learn/linux-training/92607-the-kernel-newbie-corner-qinitrdq-and-qinitramfsq-whats-up-with-that ============================= In a nutshell, when your bootloader (GRUB?) loads your Linux kernel, it is of course the kernel's job to finish the boot process. But to do so, it might require particular drivers to be able to work with, say, hardware RAID controllers, or a network, and so on. And developing on where those critically important drivers are, the kernel might not have the ability to load them, hence, the creation of a preliminary root file system that would contain just enough in the way of loadable modules to give the kernel access to the rest of the hardware. 很多人对initrd很熟悉,因为在GRUB bootloader里面经常看到它的身影,以前,initrd包含了压缩了的文件系统镜像,你需要root权限才能访问它。 而initramfs(initial RAM file system)是更早的potential root file system(?),它能够被编译进内核。so,mkinitrd的步骤还是要执行的! ************************************************* ============================ http://advancelinux.blogspot.com/2013/06/how-to-rebuild-initrd-or-initramfs-in.html ============================ The inital RAM disk (initrd) is an initial root file system that is mounted prior to when the real root file system is available. It is necessary to rebuild the Initrd images in following scenarios to include the proper kernel modules, files, and configuration directives 1. If adding new hardware to a system that may be used very early in the boot process. 2. If changing configuration files that may be used very early in the boot process. 3. If changing the options on a kernel module. ============================ 首先保存initrd的备份: mv /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak 然后重新编译initrd: mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r) -f参数意思是强制覆盖已存在的img,-v参数意思是打印所有的信息。当执行完这个命令之后reboot,就会发现开关机动画都漂亮的出现啦~~~ (对于RHEL 3,4,5来说是mkinitrd,对RHEL 6来说是新命令dracut,mkinitrd也是可以用的。Fedora20里面两个命令都有,但我只采用了mkinitrd,哪位有兴趣的童鞋可以试试dracut~~~) 补充:获取屏幕分辨率的命令,除了xdpyinfo之外,还有xrandr。  
  • 热度 16
    2014-7-24 14:37
    2028 次阅读|
    0 个评论
    参考从这个帖子下载下来的mytheme示例: =========================== http://brej.org/blog/?cat=16 =========================== 注意Plymouth不支持’\‘转义回车符,所以如果有很长很长的一行,那就写很长很长的一行吧! 以下是qilang-tech.script的内容,主要是修改它: =========================== progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; progress_box.y = Window.GetHeight() * 0.7 - progress_box.image.GetHeight() / 2; progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0); progress_bar.original_image = Image("progress_bar.png"); progress_bar.sprite = Sprite(); progress_bar.x = Window.GetWidth() / 2 - progress_bar.original_image.GetWidth() / 2; progress_bar.y = Window.GetHeight() * 0.7 - progress_bar.original_image.GetHeight() / 2; progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1); fun progress_callback(duration, progress) {         if (progress_bar.image.GetWidth() != Math.Int(progress_bar.original_image.GetWidth() * progress))         {                 progress_bar.image = progress_bar.original_image.Scale(progress_bar.original_image.GetWidth(progress_bar.original_image) * progress, progress_bar.original_image.GetHeight());                 progress_bar.sprite.SetImage(progress_bar.image);         } } Plymouth.SetBootProgressFunction(progress_callback); fun quit_callback() { } Plymouth.SetQuitFunction(quit_ballback); =========================== 懒得写注释了,其实看函数的名字就明白了~~~ 主要功能是,1.设置一张漂亮的背景图片,2.放置一个漂亮的logo,3.放置一个显示开机进度的条(由box和bar两张图片组合)。 Plymouth的调试就到此为止,Good Luck! NOTE: 如果执行下面的命令: plymouth-set-default-theme qilang-tech 出现提示: /usr/lib/plymouth/script.so does not exist 就需要执行: yum install plymouth-plugin-script