Avalonia_部署到Raspberry Pi OS Lite的注意点

Wan2.2-I2V-A14B

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

注:本文树莓派版本为Raspberry Pi 4 Model B

单视图模式问题

App.axaml.cs部分

通常,Avalonia生成的OnFrameworkInitializationCompleted函数中仅有

            ......

            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
            {
                DisableAvaloniaDataAnnotationValidation();
                desktop.MainWindow = new MainWindow
                {
                    DataContext = provider.GetRequiredService<MainWindowViewModel>()
                };
            }

            ......

而 Raspberry Pi OS Lite 并无桌面概念,故该 if 恒为 false:其中的逻辑永远不会被执行,即 desktop.MainWindow 并未被赋值,表现为显示屏一片漆黑

需要添加:

            else if (ApplicationLifetime is ISingleViewApplicationLifetime single)
            {
                DisableAvaloniaDataAnnotationValidation();

                single.MainView = new MainSingle
                {
                    DataContext = provider.GetRequiredService<MainSingleViewModel>()
                };
            }

此处需要说明:
MainSingle 是 UserControl,如上文所述,Raspberry Pi OS Lite 并无桌面概念,自然也无法理解 Window,所以需要是 UserControl

Program.cs部分

通常,Avalonia生成的Main函数中仅有

        public static void Main(string[] args)
        {
            BuildAvaloniaApp()
                .StartWithClassicDesktopLifetime(args);
        }

与上文所述类似,该Main函数仅适用桌面环境,StartWithClassicDesktopLifetime 依赖 X11/Wayland 等桌面会话,而 Lite 版本需要通过 StartLinuxDrm 使用 DRM 渲染(旧版本 Linux 或许需要使用 Framebuffer 渲染,此处不做说明)

需要修改:

            var builder = BuildAvaloniaApp();
            if (args.Contains("--drm"))
            {
                builder.StartLinuxDrm(args: args, card: null, scaling: 1.0);
            }
            else
            {
                builder.StartWithClassicDesktopLifetime(args);
            }

此时就可通过 sudo ./file_name --drm 来选择使用 DRM 渲染
此处需要说明:
1. StartLinuxDrm 函数需要安装 Avalonia.LinuxFramebuffer,通过 Avalonia 模板创建的项目可能不含它
2. 启动项目时可能会遇到报错:Unhandled exception. System.ComponentModel.Win32Exception (95): drmModeGetResources failed
此时可通过指令 ls /dev/dri 查看 DRM 设备节点,通常会有 card0 与 card1,其中 card0 是内置GPU,可在 StartLinuxDrm 函数中添加 card: "/dev/dri/card0" 参数来指定渲染设备

StartLinuxDrm(args: args, card: "/dev/dri/card0", scaling: 1.0)

MVVM模式问题

Avalonia 提供了 ViewLocator.cs 来实现 View 和 ViewModel 之间的绑定,该绑定是通过反射机制实现的,所以在发布时不可勾选"裁剪未使用的代码",否则会出现:
View 是通过反射调用的,代码中无直接引用,会被裁剪 => ViewLocator 根据 ViewModel 的命名尝试通过反射调用 View,但无法做到,体现为该页面显示 Not Found: YourProject.Views.YourView

您可能感兴趣的与本文相关的镜像

Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值