树莓派4使用DRM运行Avalonia应用时出现drmModeGetResources失败错误
树莓派4 Raspberry OS Lite下Avalonia DRM模式运行失败排查
问题现象
按官方步骤通过DRM运行Avalonia应用时,触发以下错误:
Unhandled exception. System.ComponentModel.Win32Exception (95): drmModeGetResources failed at Avalonia.LinuxFramebuffer.Output.DrmResources..ctor(Int32 fd) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmBindings.cs:line 89 at Avalonia.LinuxFramebuffer.Output.DrmOutput..ctor(String path) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs:line 30 at LinuxFramebufferPlatformExtensions.StartLinuxDrm[T](T builder, String[] args, String card, Double scaling) in /_/src/Linux/Avalonia.LinuxFramebuffer/LinuxFramebufferPlatform.cs:line 142
相关代码文件
MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:LeanovationHitachi="clr-namespace:LeanovationHitachi" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="480" x:Class="LeanovationHitachi.MainWindow" HasSystemDecorations="false" WindowStartupLocation="CenterScreen" Width="800" Height="480" WindowState="Maximized" Title="LeanovationHitachi"> <LeanovationHitachi:MainView/> </Window>
MainSingleView.axaml
<UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:LeanovationHitachi="clr-namespace:LeanovationHitachi" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="LeanovationHitachi.MainSingleView"> <LeanovationHitachi:MainView/> </UserControl>
MainView.axaml
<UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:fa="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="LeanovationHitachi.MainView" Width="800" Height="480"> <Border> //All my code </Border> </UserControl>
Program.cs
using Avalonia; using Projektanker.Icons.Avalonia; using Projektanker.Icons.Avalonia.FontAwesome; using System; using System.Linq; using System.Threading; namespace LeanovationHitachi; class Program { [STAThread] public static int Main(string[] args) { var builder = BuildAvaloniaApp(); if (args.Contains("--drm")) { SilenceConsole(); return builder.StartLinuxDrm(args); } return builder.StartWithClassicDesktopLifetime(args); } private static void SilenceConsole() { new Thread(() => { Console.CursorVisible = false; while (true) Console.ReadKey(true); }) { IsBackground = true }.Start(); } public static AppBuilder BuildAvaloniaApp() { return AppBuilder.Configure<App>() .UsePlatformDetect() .LogToTrace() .WithIcons(container => container .Register<FontAwesomeIconProvider>()); } }
App.axaml.cs
using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; namespace LeanovationHitachi; public partial class App : Application { public override void Initialize() { AvaloniaXamlLoader.Load(this); } public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) desktop.MainWindow = new MainWindow(); else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView) singleView.MainView = new MainSingleView(); base.OnFrameworkInitializationCompleted(); } }
排查及解决方法
1. 检查DRM设备权限
DRM设备文件位于/dev/dri/,当前用户需具备访问权限。执行以下命令将用户加入video组:
sudo usermod -aG video $USER
执行后需重新登录或重启系统生效。
2. 显式指定DRM设备路径
默认情况下Avalonia可能无法自动识别正确的DRM设备,启动应用时显式指定设备路径:
./LeanovationHitachi --drm --drm-card=/dev/dri/card0
先通过ls /dev/dri/确认设备列表,常见为card0或card1。也可在代码中固定指定,修改Program.cs中的启动逻辑:
return builder.StartLinuxDrm(args, card: "/dev/dri/card0");
3. 启用树莓派DRM驱动
编辑/boot/config.txt,确保启用KMS/DRM驱动:
- 注释掉
dtoverlay=vc4-fkms-v3d(如果存在) - 添加或确保
dtoverlay=vc4-kms-v3d存在
保存后重启树莓派。
4. 安装依赖库
确保系统已安装DRM相关依赖:
sudo apt update && sudo apt install libdrm-dev libgbm-dev
5. 验证Avalonia版本兼容性
确保使用的Avalonia版本与官方教程一致,建议使用最新稳定版,避免版本适配问题。
内容的提问来源于stack exchange,提问作者Larry FisherMac
相关产品推荐
相关产品推荐

