Weston应用案例
本文档涉及案例包括:
• systemctl 命令的使用
• Weston 桌面的使能与关闭
• 将启动log打印在开发板屏幕上
• Kernel启动logo的定制替换
1. 预定开发板
2. systemctl 命令的使用
systemctl是linux 系统管理工具集Systemd的主要命令。
例如对系统的管理,在云实验室的板子以下命令,会看到对应的现象。
systemctl reboot 重启系统
systemctl poweroff 关机, 关机后点击下面的Reset-EVK图标重新给开发板上电
system suspend 让系统进入suspend状态
关机和进入suspend后都需要点击下面的Reset-EVK按钮重启开发板。
还有用于管理systemd里各种服务的启动、停止、重启、查看状态等:
systemctl enable
systemctl start
systemctl status
systemctl stop
systemctl kill
systemctl restart
systemctl analyze
其中systemctl-analyze可以用于分析启动耗时,具体参看《系统启动时间分析案例》。
2. Weston 桌面的使能与关闭
systemctl stop weston 关闭weston桌面,可以看到屏幕变黑了
systemctl start weston 使能weston桌面,如下图
3. 将启动log打印在开发板屏幕上
使用fgconsole命令查看开发板屏幕对应的tty序号。
root@imx8mpevk:~# fgconsole
7
第一次启动板子时,在dmesg中找到kernel cmdline
console=ttymxc1,115200 root=/dev/nfs ip=dhcp nfsroot=192.168.100.250:/opt/REAL/NFS/IMX8MPEVK-4-root,v3,tcp
修改defconfig文件使能屏幕作为console:
diff --git a/arch/arm64/configs/imx_v8_defconfig b/arch/arm64/configs/imx_v8_defconfig
index 85762b37006f..16d8a67b5bd3 100644
--- a/arch/arm64/configs/imx_v8_defconfig
+++ b/arch/arm64/configs/imx_v8_defconfig
@@ -1105,3 +1105,5 @@ CONFIG_CORESIGHT_STM=m
CONFIG_CORESIGHT_CPU_DEBUG=m
CONFIG_CORESIGHT_CTI=m
CONFIG_MEMTEST=y
+CONFIG_CMDLINE_FORCE=y
+CONFIG_CMDLINE="console=tty7 console=tty0,115200 earlycon dtb=imx8mp-evk.dtb root=/dev/mmcblk1p2 rootwait rw"
按照上面的代码修改后,重新配置并编译代码
make imx_v8_defconfig
make -j$(nproc)
将编译好的内核Image上传到云实验室开发板tftp目录(参考《编译内核镜像并在云实验室开发板上运行.pdf》)
点击Reset-EVK按钮,启动过程中可以看到log打印在板子的屏幕上。但是启动后不能输入root来login。需要做如下修改并重启开发板:
root@imx8mpevk:~# vi /etc/systemd/system/weston.service
[Unit]
Description=Weston Wayland Compositor
After=graphical.target
[Service]
Type=simple ExecStart=/usr/bin/weston --tty=7
Restart=always
这样电脑调试串口终端和板子屏幕上的终端都可以输入命令,如上图1和2的位置。
5. Kernel启动logo的定制替换
Kernel启动过程中,会出现四个小企鹅(对于4核8MP),在实际应用中,希望替换成自己制作的logo。
由于kernel的logo格式是ppm的,所以要将一般的bmp图片转换成ppm格式,首先要有一台ubuntu PC,安装格式转换工具:
sudo apt update
sudo apt install netpbm
比如我们用u-boot里的图片freescale.bmp
git clone https://github.com/nxp-imx/uboot-imx.git
cp uboot-imx/tools/logos/freescale.bmp ~/
执行图片转换:
bmptopnm freescale.bmp > logo_linux.pnm
pnmquant 224 logo_linux.pnm > logo_linux_clut224.pnm
pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm
rm logo_linux.pnm logo_linux_clut224.pnm
默认情况下,kernel启动过程中四个小企鹅是和cpu 核数相关,所以需要修改代码,让我们的新logo只显示一份,kernel源码做如下修改并重新编译(参考《编译内核镜像并在云实验室开发板上运行.pdf》):
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index e24b29c4fa0f..74122612f863 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -693,7 +693,7 @@ int fb_show_logo(struct fb_info *info, int rotate)
return 0;
count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count;
- y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count);
+ y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, 1);
y = fb_show_extra_logos(info, y, rotate);
return y;
编译后上传新镜像并重新运行,效果如下,可以看到kernel的小企鹅已替换为我们制作的logo。