modetest命令使用说明

modetest是一个用于测试Linux显示硬件的命令行工具,涉及显示器的crtc、encoder、connector等概念。它允许用户查询和设置输出,如显示模式、分辨率等。在使用过程中,可能会遇到权限问题,如'Permission denied',这通常是因为图形界面已占用设备。解决方法包括在字符界面操作或关闭图形管理器。此外,modetest还支持多种图形模式,如TILES、PLAIN、SMPTE和GRADIENT。
部署运行你感兴趣的模型镜像

目录

1. 显示输出时存在几个概念及关系

2. 查询输出

设置输出

默认输出 

指定输出内容

常见问题


1. 显示输出时存在几个概念及关系

在链接显示器之前,存在图示几个设备crtc 、encoder、connector,modetest 命令即是对这几个设备进行参数控制,包括:

1)控制输出图像的内容

2) 通过哪个显示口进行输出

3) 输出格式等。

2. 查询输出

 modetest -M dc ,此处红色的参数和具体的显卡驱动相关。

通过下述命令的输出,我们可以看到当前设备上存在encoders \connectors\crtc的个数等信息:

1) 通过encoder 信息,可以看到encoder ID 53 相连接的CRTC ID为 48 

2)通过 connectors信息,可以看到connector ID 54 与 encoder 53相链接。并且链接状态(第三列),同时可以看到支持的显示模式,1440x900等等。

通过上述信息,我们知晓:


Encoders:
id      crtc    type    possible crtcs  possible clones
49      0       TMDS    0x00000001      0x00000000
51      0       TMDS    0x00000002      0x00000000
53      48      TMDS    0x00000004      0x00000000

Connectors:
id      encoder status          name            size (mm)       modes   encoders
50      0       disconnected    DP-1            0x0             0       49
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 3
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        19 CRTC_ID:
                flags: object
                value: 0
52      0       disconnected    DP-2            0x0             0       51
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 3
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        19 CRTC_ID:
                flags: object
                value: 0
54      53      connected       DP-3            410x260         20      53
  modes:
        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  #0 1440x900 59.89 1440 1520 1672 1904 900 903 909 934 106500 flags: nhsync, pvsync; type: preferred, driver
  #1 1280x1024 75.02 1280 1296 1440 1688 1024 1025 1028 1066 135000 flags: phsync, pvsync; type: driver
  #2 1280x1024 60.02 1280 1328 1440 1688 1024 1025 1028 1066 108000 flags: phsync, pvsync; type: driver
  #3 1440x900 74.98 1440 1536 1688 1936 900 903 909 942 136750 flags: nhsync, pvsync; type: driver
  #4 1280x960 60.00 1280 1376 1488 1800 960 961 964 1000 108000 flags: phsync, pvsync; type: driver
  #5 1280x800 59.81 1280 1352 1480 1680 800 803 809 831 83500 flags: nhsync, pvsync; type: driver
  #6 1152x864 75.00 1152 1216 1344 1600 864 865 868 900 108000 flags: phsync, pvsync; type: driver
  #7 1024x768 75.03 1024 1040 1136 1312 768 769 772 800 78750 flags: phsync, pvsync; type: driver
  #8 1024x768 70.07 1024 1048 1184 1328 768 771 777 806 75000 flags: nhsync, nvsync; type: driver
  #9 1024x768 60.00 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; type: driver
  #10 832x624 74.55 832 864 928 1152 624 625 628 667 57284 flags: nhsync, nvsync; type: driver
  #11 800x600 75.00 800 816 896 1056 600 601 604 625 49500 flags: phsync, pvsync; type: driver
  #12 800x600 72.19 800 856 976 1040 600 637 643 666 50000 flags: phsync, pvsync; type: driver
  #13 800x600 60.32 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; type: driver
  #14 800x600 56.25 800 824 896 1024 600 601 603 625 36000 flags: phsync, pvsync; type: driver
  #15 640x480 75.00 640 656 720 840 480 481 484 500 31500 flags: nhsync, nvsync; type: driver
  #16 640x480 72.81 640 664 704 832 480 489 492 520 31500 flags: nhsync, nvsync; type: driver
  #17 640x480 66.67 640 704 768 864 480 483 486 525 30240 flags: nhsync, nvsync; type: driver
  #18 640x480 59.94 640 656 752 800 480 490 492 525 25175 flags: nhsync, nvsync; type: driver
  #19 720x400 70.08 720 738 846 900 400 412 414 449 28320 flags: nhsync, pvsync; type: driver
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
                        00ffffffffffff004c2d60053931594d
                        2b13010368291a782ade95a3544c9926
                        0f5054bfef80950f81808140714f8100
                        0101010101019a29a0d0518422305098
                        360098ff1000001c000000fd00384b1e
                        510e000a202020202020000000fc0053
                        796e634d61737465720a2020000000ff
                        00485647534130383336330a2020006f
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        19 CRTC_ID:
                flags: object
                value: 48

CRTCs:
id      fb      pos     size
34      0       (0,0)   (0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type:
  props:
        20 ACTIVE:
                flags: range
                values: 0 1
                value: 0
        21 MODE_ID:
                flags: blob
                blobs:

                value:
        18 OUT_FENCE_PTR:
                flags: range
                values: 0 18446744073709551615
                value: 0
41      0       (0,0)   (0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type:
  props:
        20 ACTIVE:
                flags: range
                values: 0 1
                value: 0
        21 MODE_ID:
                flags: blob
                blobs:

                value:
        18 OUT_FENCE_PTR:
                flags: range
                values: 0 18446744073709551615
                value: 0
48      78      (0,0)   (1440x900)
  #0  59.89 1440 1520 1672 1904 900 903 909 934 106500 flags: nhsync, pvsync; type:
  props:
        20 ACTIVE:
                flags: range
                values: 0 1
                value: 1
        21 MODE_ID:
                flags: blob
                blobs:

                value:
                        04a00100a005f0058806700700008403
                        87038d03a60300000000000006000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000
        18 OUT_FENCE_PTR:
                flags: range
                values: 0 18446744073709551615
                value: 0

Planes:
id      crtc    fb      CRTC x,y        x,y     gamma size      possible crtcs
28      0       0       0,0             0,0     0               0x00000001
  formats: AR30 AB30 RA30 BA30 AR24 AB24 RA24 BA24 XR24 XB24 RX24 BX24 AR12 AB12 RA12 BA12 XR12 XB12 RX12 BX12 AR15 AB15 RA15 BA15 XR15 XB15 RX15 BX15 RG16 BG16 YUYV UYVY
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        16 FB_ID:
                flags: object
                value: 0
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 0
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 0
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 0
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 0
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 0
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000002000000018000000
                        03000000980000004152333041423330
                        52413330424133304152323441423234
                        52413234424132345852323458423234
                        52583234425832344152313241423132
                        52413132424131325852313258423132
                        52583132425831324152313541423135
                        52413135424131355852313558423135
                        52583135425831355247313642473136
                        59555956555956590000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                in_formats blob decoded:
                         AR30:
                         AB30:
                         RA30:
                         BA30:
                         AR24:
                         AB24:
                         RA24:
                         BA24:
                         XR24:
                         XB24:
                         RX24:
                         BX24:
                         AR12:
                         AB12:
                         RA12:
                         BA12:
                         XR12:
                         XB12:
                         RX12:
                         BX12:
                         AR15:
                         AB15:
                         RA15:
                         BA15:
                         XR15:
                         XB15:
                         RX15:
                         BX15:
                         RG16:
                         BG16:
                         YUYV:
                         UYVY:
        30 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1
31      0       0       0,0             0,0     0               0x00000001
  formats: AR24
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 2
        16 FB_ID:
                flags: object
                value: 0
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 0
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 0
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 0
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 0
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 0
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000000100000018000000
                        00000000200000004152323400000000
                in_formats blob decoded:
                         AR24:
        33 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1
35      0       0       0,0             0,0     0               0x00000002
  formats: AR30 AB30 RA30 BA30 AR24 AB24 RA24 BA24 XR24 XB24 RX24 BX24 AR12 AB12 RA12 BA12 XR12 XB12 RX12 BX12 AR15 AB15 RA15 BA15 XR15 XB15 RX15 BX15 RG16 BG16 YUYV UYVY
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        16 FB_ID:
                flags: object
                value: 0
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 0
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 0
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 0
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 0
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 0
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000002000000018000000
                        03000000980000004152333041423330
                        52413330424133304152323441423234
                        52413234424132345852323458423234
                        52583234425832344152313241423132
                        52413132424131325852313258423132
                        52583132425831324152313541423135
                        52413135424131355852313558423135
                        52583135425831355247313642473136
                        59555956555956590000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                in_formats blob decoded:
                         AR30:
                         AB30:
                         RA30:
                         BA30:
                         AR24:
                         AB24:
                         RA24:
                         BA24:
                         XR24:
                         XB24:
                         RX24:
                         BX24:
                         AR12:
                         AB12:
                         RA12:
                         BA12:
                         XR12:
                         XB12:
                         RX12:
                         BX12:
                         AR15:
                         AB15:
                         RA15:
                         BA15:
                         XR15:
                         XB15:
                         RX15:
                         BX15:
                         RG16:
                         BG16:
                         YUYV:
                         UYVY:
        37 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1
38      0       0       0,0             0,0     0               0x00000002
  formats: AR24
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 2
        16 FB_ID:
                flags: object
                value: 0
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 0
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 0
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 0
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 0
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 0
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000000100000018000000
                        00000000200000004152323400000000
                in_formats blob decoded:
                         AR24:
        40 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1
42      48      78      0,0             0,0     0               0x00000004
  formats: AR30 AB30 RA30 BA30 AR24 AB24 RA24 BA24 XR24 XB24 RX24 BX24 AR12 AB12 RA12 BA12 XR12 XB12 RX12 BX12 AR15 AB15 RA15 BA15 XR15 XB15 RX15 BX15 RG16 BG16 YUYV UYVY
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        16 FB_ID:
                flags: object
                value: 78
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 48
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 0
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 1440
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 900
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 94371840
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 58982400
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000002000000018000000
                        03000000980000004152333041423330
                        52413330424133304152323441423234
                        52413234424132345852323458423234
                        52583234425832344152313241423132
                        52413132424131325852313258423132
                        52583132425831324152313541423135
                        52413135424131355852313558423135
                        52583135425831355247313642473136
                        59555956555956590000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                        00000000000000000000000000000000
                in_formats blob decoded:
                         AR30:
                         AB30:
                         RA30:
                         BA30:
                         AR24:
                         AB24:
                         RA24:
                         BA24:
                         XR24:
                         XB24:
                         RX24:
                         BX24:
                         AR12:
                         AB12:
                         RA12:
                         BA12:
                         XR12:
                         XB12:
                         RX12:
                         BX12:
                         AR15:
                         AB15:
                         RA15:
                         BA15:
                         XR15:
                         XB15:
                         RX15:
                         BX15:
                         RG16:
                         BG16:
                         YUYV:
                         UYVY:
        44 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1
45      48      82      0,0             0,0     0               0x00000004
  formats: AR24
  props:
        7 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 2
        16 FB_ID:
                flags: object
                value: 82
        17 IN_FENCE_FD:
                flags: signed range
                values: -1 2147483647
                value: -1
        19 CRTC_ID:
                flags: object
                value: 48
        12 CRTC_X:
                flags: signed range
                values: -2147483648 2147483647
                value: 1292
        13 CRTC_Y:
                flags: signed range
                values: -2147483648 2147483647
                value: 806
        14 CRTC_W:
                flags: range
                values: 0 2147483647
                value: 32
        15 CRTC_H:
                flags: range
                values: 0 2147483647
                value: 32
        8 SRC_X:
                flags: range
                values: 0 4294967295
                value: 0
        9 SRC_Y:
                flags: range
                values: 0 4294967295
                value: 0
        10 SRC_W:
                flags: range
                values: 0 4294967295
                value: 2097152
        11 SRC_H:
                flags: range
                values: 0 4294967295
                value: 2097152
        27 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000000100000018000000
                        00000000200000004152323400000000
                in_formats blob decoded:
                         AR24:
        47 rotation:
                flags: bitmask
                values: rotate-0=0x1
                value: 1

Frame buffers:
id      size    pitch


 

设置输出

默认输出 

根据第二节获取的信息 

modetest -M dc -s 54@48:1440x900

参数说明:

  • -s <connector_id>[,<connector_id>][@<crtc_id>]:[#<mode index>]<mode>[-<vrefresh>][@<format>]:用于在指定的 pipeline 上以某个 mode 显示某个 pattern 的画面。
  • 54: connector id
  • 48:  crtc id
  • 1440x900:显示 mode;

指定输出内容

如果有多个显示器,可能期望在每个显示器上输出不同内容。目前modetest支持以下四种图形:

1.  TILES: 是彩色斜条纹

2. PLAIN: 简单灰度图形,看起来像没有输出

3. SMPTE :默认的输出类型,竖着的彩色条纹

4. GRADIENT: 黑白灰度渐变图形。

enum util_fill_pattern {
    UTIL_PATTERN_TILES,
    UTIL_PATTERN_PLAIN,
    UTIL_PATTERN_SMPTE,
    UTIL_PATTERN_GRADIENT,
};

指定某种图形输出,例如彩色斜条纹

modetest -M dc -s 54@48:1440x900 -Ftiles

常见问题

failed to set mode: Permission denied

  1)控制显示输出的命令即第三节中的命令,需要在非图形界面下操作。例如ubuntu进入图形界面后,首先要切换到字符界面,否则会报错,提示没有权限打开。 
failed to set mode: Permission denied

 modetest -M dc -s 54@48:1440x900
setting mode 1440x900-59.89Hz@XR24 on connectors 54, crtc 48
failed to set mode: Permission denied

原因: 一个显卡只对应一个设备节点,图形界面已经占用此节点。如果此时再通过modetest获取显卡控制节点,则报此错误。

解决方法

# ubuntu 20.04 关闭当前图形界面管理 
sudo systemctl stop gdm3
[sudo] password for user:
#  再次测试控制输出
 modetest -M dc -s 54@48:1440x900
setting mode 1440x900-59.89Hz@XR24 on connectors 54, crtc 48
failed to set gamma: Invalid argument
^C
#测试完毕后重新开启图形基本管理 sudo systemctl start gdm3

此外,还可以通过下述命令开启关闭图形界面,只是此方法多一步重启,相对麻烦

# sudo systemctl set-default multi-user.target
# sudo reboot

# 开启用户图形界面。

# sudo systemctl set-default graphical.target
# sudo reboot

2)同理,开启两个shell,同时运行两个设置命令,其中一个也会报权限问题。

failed to open device 

./modetest -M i915

failed to open device 'i915': No such file or directory

 例如,我们在intel显卡上运行此命令,显卡采用的驱动是i915,但是提示找不到设备。

原因:

桌面管理器占据了设备节点,将桌面管理器退出即可。

分析

源码路径:modetest属于libdrm的一个测试工具, Index of /libdrm 

此处采用2.4.99的版本,更新的版本里面已经只支持meson编译。

编译及安装比较简单,直接configure make make install即可。

采用新库及放开打印,运行modetest命令


 LIBGL_DEBUG=verbose  LD_LIBRARY_PATH=/usr/local/lib ./tests/modetest/.libs/modetest -M i915

 可以看到如下打印信息

drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 3, (OK)  这里说明正常打开了设备节点.
drmGetBusid returned 'pci:0000:00:02.0'   (查看此字段有值,例如左侧这种情况,则标识显卡设备已经被占用。详见 xf86drm.c中的drmOpenByName)
drmOpenDevice: node name is /dev/dri/card1

对应代码

modetest.c -> kms.c    (tests\util)  util_open--> xf86drm.c   drmOpen

以下函数代码均在 xf86drm.c中: 

//此处的参数名字,即为modetest -M name的M参数值
drm_public int drmOpen(const char *name, const char *busid)
{
    return drmOpenWithType(name, busid, DRM_NODE_PRIMARY);
}

此函数继续调用下面接口

static int drmOpenByName(const char *name, int type)
{
    int           i;
    int           fd;
    drmVersionPtr version;
    char *        id;
    int           base = drmGetMinorBase(type);

    if (base < 0)
        return -1;

    /*
     * Open the first minor number that matches the driver name and isn't
     * already in use.  If it's in use it will have a busid assigned already.
     */
    for (i = base; i < base + DRM_MAX_MINOR; i++) {
        if ((fd = drmOpenMinor(i, 1, type)) >= 0) { //此处打开设备
            if ((version = drmGetVersion(fd))) {
                if (!strcmp(version->name, name)) { //此处用从驱动获取的名字和-M 传递进来的名字进行比较
                    drmFreeVersion(version);
                    id = drmGetBusid(fd);
                    drmMsg("drmGetBusid returned '%s'\n", id ? id : "NULL");
                    if (!id || !*id) {  //如果没有获取到ID,则走此流程
                        if (id)
                            drmFreeBusid(id);
                        return fd;
                    } else {
                        drmFreeBusid(id);
                    }
                } else {
                    drmFreeVersion(version);
                }
            }
            close(fd);
        }
    }

GetBusid的实现 ,通过  DRM_IOCTL_GET_UNIQUE 调入到内核中。具体的内核实现待研究。总之,在有应用占据显卡时,此函数返回有效值;否则返回NULL。

drm_public char *drmGetBusid(int fd)
{
    drm_unique_t u;

    memclear(u);

    if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
        return NULL;
    u.unique = drmMalloc(u.unique_len + 1);
    if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) {
        drmFree(u.unique);
        return NULL;
    }
    u.unique[u.unique_len] = '\0';

    return u.unique;
}

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

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值