屏幕与触摸调试
本章配套视频介绍:
《28-屏幕与触摸设置》
【鲁班猫】28-屏幕与触摸设置_哔哩哔哩_bilibili
LubanCat-RK3588系列板卡都支持mipi屏以及hdmi显示屏的显示。
19.1. 旋转触摸屏
参考文章 触摸校准
参考文章 旋转触摸方向
配置触摸旋转方向
1 2 | # 1.查看触摸输入设备 xinput list |
如下图,可以看到 Goodix Capacitive TouchScreen
的设备, Goodix Capacitive TouchScreen
是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts
注意
需要进入桌面后才能使用xinput命令,请保持进入桌面。如果是用ssh进终端操作,请先输入export DISPLAY=:0
123456789 10 11 12 13 14 15 16 17 18 | # 根据名字列出变量 xinput list-props 'pointer:Goodix Capacitive TouchScreen' | grep "Coordinate Transformation Matrix"# 根据id列出变量 xinput list-props 10 | grep "Coordinate Transformation Matrix"#修改触摸方向(可根据名字修改) 默认方向 xinput set-prop 10 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1#修改触摸方向(可根据名字修改) 向左90度 xinput set-prop 10 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1#修改触摸方向(可根据名字修改) 向右90度 xinput set-prop 10 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1#修改触摸方向(可根据名字修改) 旋转180度 xinput set-prop 10 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1 |
19.1.1. 永久配置(单屏)
注意
本方法将会永久配置屏幕的触摸方向,配置完成后需要重启或者重启服务才能运行,直到重新修改配置
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #修改配置文件 sudo vi /etc/X11/xorg.conf.d/20-modesetting.conf#在文件的后面添加或者修改下面内容(四选一,选择自己要调整的) #"Goodix Capacitive TouchScreen"是5.5寸屏的修改方法,树莓派屏可以修改为``fts_ts``#(默认,不旋转) Section "InputClass"Identifier "Goodix Capacitive TouchScreen"Option "Coordinate Transformation Matrix" " 1 0 0 0 1 0 0 0 1 " EndSection#(默认,向右旋转90度) Section "InputClass"Identifier "Goodix Capacitive TouchScreen"Option "Coordinate Transformation Matrix" " 0 1 0 -1 0 1 0 0 1 " EndSection#(默认,向左旋转90度) Section "InputClass"Identifier "Goodix Capacitive TouchScreen"Option "Coordinate Transformation Matrix" " 0 -1 1 1 0 0 0 0 1 " EndSection#(默认,旋转180度) Section "InputClass"Identifier "Goodix Capacitive TouchScreen"Option "Coordinate Transformation Matrix" " -1 0 1 0 -1 1 0 0 1 " EndSection#修改完成后可以重启或者运行下列命令重启显示服务 sudo systemctl restart lightdm.service |
19.1.2. 永久配置(多屏)
注意
当要在多屏上实现触摸的旋转,如果屏幕的名字一样会导致相同名字的屏幕都进行旋转的情况,如果多屏情况下需要分别配置这时候使用id来设置旋转会更好
以下是dsi0和dis1分别接5.5寸屏幕的情况。
123456789 10 11 12 13 14 15 16 | #查看触摸输入设备 xinput list#信息输出如下⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Goodix Capacitive TouchScreen id=7 [slave pointer (2)] ⎜ ↳ Goodix Capacitive TouchScreen id=8 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)]↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]↳ headset-keys id=6 [slave keyboard (3)]↳ rk805 pwrkey id=9 [slave keyboard (3)]↳ febd0030.pwm id=10 [slave keyboard (3)]↳ Goodix Capacitive TouchScreen id=11 [slave keyboard (3)]↳ Goodix Capacitive TouchScreen id=12 [slave keyboard (3)] |
因为设备树插件是顺序加载的,触摸驱动是顺序注册的,所以以上id为7对应dsi0的触摸,id为8对应dsi1的触摸,可以通过以下脚本分别配置两个屏幕触摸。
123456789 10 11 12 13 14 15 16 | #!/bin/bash#获取dsi0触摸id dis0_touch_id=$(xinput list | grep "Goodix Capacitive TouchScreen" | cut -f 2 | cut -d "=" -f 2 | head -n 1) #获取dsi1触摸id dis1_touch_id=$(xinput list | grep "Goodix Capacitive TouchScreen" | cut -f 2 | cut -d "=" -f 2 | tail -n +2 | head -n 1)#打印id信息 echo dis0_touch_id=$dis0_touch_id echo dis1_touch_id=$dis1_touch_id#配置dsi0触摸,可自定义旋转方向 xinput set-prop $dis0_touch_id 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1#配置dsi1触摸,可自定义旋转方向 xinput set-prop $dis1_touch_id 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1 |
19.2. 触摸屏绑定屏幕
1 2 | # 1.查看触摸输入设备 xinput list |
如下图,可以看到 Goodix Capacitive TouchScreen
的设备, Goodix Capacitive TouchScreen
是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts
因为触摸屏是指针设备,所以我们的触摸屏是要带着 slave pointer
123456789 10 11 12 13 14 15 | #查看当前的屏幕 xrandr -qDSI-1:mipi屏 DSI-2:mipi屏 HDMI-1:HDMI屏 DP-1:DP屏幕 eDP-1:eDP屏幕小编在用DSI-1,后面以DSI-1作为屏幕修改配置#已知上面的Goodix Capacitive TouchScreen触摸屏的id号为10 #然后通过触摸屏的id号来绑定屏幕xinput map-to-output 10 DSI-1 |
完成后就可以看到可以支持触摸屏映射了。
19.3. 旋转屏幕方向
19.3.1. 命令行配置
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 | #查看当前的屏幕 xrandr -qDSI-1:mipi屏 DSI-2:mipi屏 HDMI-1:HDMI屏 DP-1:DP屏幕 eDP-1:eDP屏幕小编在用DSI-1,后面以DSI-1作为屏幕修改配置#旋转屏幕-正常 xrandr --output DSI-1 --rotate normal#旋转屏幕-向左90度 xrandr --output DSI-1 --rotate left#旋转屏幕-向右90度 xrandr --output DSI-1 --rotate right#旋转屏幕-旋转180度 xrandr --output DSI-1 --rotate inverted |
19.3.2. 桌面配置
右击打开选择屏幕显示设置,然后可以按照下面图片的方法配置
19.4. 多屏异显
默认情况下为多屏异显,不需要进行配置,打开多个屏幕的设备树插件,接上屏幕即可显示不同内容。
19.5. 多屏同显
19.5.1. 使用命令脚本配置
以下以1080P HDMI屏幕和5.5寸mipi屏幕为例,通过udev规则调用脚本来支持HDMI热插拔时能够同显,通过自启动服务确保启动能够同显:
因为5.5寸屏幕默认是竖屏的,并且只能通过桌面配置图像输出来旋转,无法通过驱动或设备树修改显示方向,所以要通过前面介绍的屏幕和触摸旋转方法进行配置。
19.5.1.1. 创建udev规则
1 2 | #创建udev规则文件 sudo vim /etc/udev/rules.d/99-monitor-hotplug.rules |
然后在99-monitor-hotplug.rules添加以下内容
1 2 | ACTION=="add", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh" ACTION=="remove", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh" |
然后重新加载规则:
1 2 | sudo udevadm control --reload-rules sudo systemctl restart udev |
以上规则是插入和拔掉HDMI都会调用/home/cat/monitor-hotplug.sh脚本。
19.5.1.2. 自启动调用配置
在桌面登录用户的家目录下创建启动文件:
1 2 3 4 5 | #以cat用户为例 mkdir /home/cat/.config/autostart#创建配置文件 vim /home/cat/.config/autostart/screen_settings.desktop |
在screen_settings.desktop文件中添加以下内容:
1 2 3 4 5 6 7 8 | [Desktop Entry] Type=Application Exec=/home/cat/monitor-hotplug.sh Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=My App Comment=Start My App on login |
以上自启动配置是启动自动调用/home/cat/monitor-hotplug.sh脚本
19.5.1.3. 创建同显脚本
1 2 | #创建udev调用的脚本 sudo vim /home/cat/monitor-hotplug.sh |
然后在monitor-hotplug.sh添加以下内容
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/bashexport DISPLAY=:0# Define your desired resolutions and settings DSI_MODE="1080x1920" HDMI_MODE="1920x1080" ROTATION="right"# Function to detect HDMI connection status function check_hdmi_connection {HDMI_STATUS=$(</sys/class/drm/card0-HDMI-A-1/status)if [ "$HDMI_STATUS" = connected ]; thenxrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATIONxrandr --output HDMI-1 --mode $HDMI_MODExrandr --output HDMI-1 --same-as DSI-1 --autoelif [ "$HDMI_STATUS" = disconnected ]; thenxrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATIONfi }# Run the function to check HDMI connection status check_hdmi_connection |
然后添加脚本执行权限:
1 | sudo chmod 777 /home/cat/monitor-hotplug.sh |
以上monitor-hotplug.sh脚本中就使用了前面介绍的命令进行旋转和同显,截取代码如下:
1 2 3 | xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION xrandr --output HDMI-1 --mode $HDMI_MODE xrandr --output HDMI-1 --same-as DSI-1 --auto |
重启后进入可以发现两个屏幕同显了,并且拔掉HDMI再插入也弄够进行同显。
19.6. 关闭桌面登录及保留屏幕开启
一般屏幕开启与桌面登录会绑定在一起,你开启了屏幕,屏幕就会作为一个新的终端, 下文教你如何在使用屏幕的情况下关闭屏幕终端
1 2 3 4 5 6 7 8 9 | #关闭用户图形界面,使用tty登录。sudo systemctl set-default multi-user.target sudo reboot#开启用户图形界面。sudo systemctl set-default graphical.target sudo reboot |
19.7. 屏幕调试方法
19.7.1. mipi 屏幕
mipi屏幕调试一般都要着重关注屏幕的上电初始序列 :panel-init-sequence和下电初始化序列:panel-exit-sequence。
准备工作:在拿到一块新mipi屏幕的时候,一般屏幕厂商都会给我们两样东西,分别是 屏幕规格书
和 屏幕初始化序列
。 以下拿野火5.5寸1080p屏幕为例。屏幕的资料请查阅 (野火)5.5寸 1080p 屏幕资料文档
在 屏幕规格书
可以获取到屏幕参数,在 初始化序列中
可以获取到屏幕的panel-init-sequence代码。如下图:
19.7.1.1. 调试步骤分析:
mipi屏幕的点亮流程如下,以猫2为例。
-
步骤一先将屏幕的背光点亮
在猫2的设备树配置的节点中,我们需要添加关于背光的配置。如图:
由mipi屏幕的接口电路图得知,屏幕背光由PWM4去配置,如下
按照rk屏幕背光的配置方法,我们可以得到如下backlight节点
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | backlight: backlight {status = "okay";compatible = "pwm-backlight";pwms = <&pwm4 0 50000 0>;brightness-levels = <95 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9595 95 95 95 95 95 95 9588 89 90 91 92 93 94 9596 97 98 99 100 101 102 103104 105 106 107 108 109 110 111112 113 114 115 116 117 118 119120 121 122 123 124 125 126 127128 129 130 131 132 133 134 135136 137 138 139 140 141 142 143144 145 146 147 148 149 150 151152 153 154 155 156 157 158 159160 161 162 163 164 165 166 167168 169 170 171 172 173 174 175176 177 178 179 180 181 182 183184 185 186 187 188 189 190 191192 193 194 195 196 197 198 199200 201 202 203 204 205 206 207208 209 210 211 212 213 214 215216 217 218 219 220 221 222 223224 225 226 227 228 229 230 231232 233 234 235 236 237 238 239240 241 242 243 244 245 246 247248 249 250 251 252 253 254 255>;default-brightness-level = <200>;}; |
-
步骤二根据屏幕规格书和初始化序列配置dsi节点
屏幕初始化代码部分截图如下。
在linux系统中,LCD屏会有初始化和反初始化的过程。我们需要在MIPI DSI驱动中,将这些厂家提供的初始化代码转换为相应的DCS序列。
由于屏幕厂商没有提供寄存器手册,所以我不用知道他们到底设置了哪一个寄存器,我们只需要将初始化代码转化为如下格式的设备树配置就行了。
1 | 命令类型+延时+数据长度+数据 |
在屏幕初始化序列代码中包含三类指令,分别是: SET_GENERIC
W_D
delay_ms
在讲转换之前,我们先来看一下rk屏幕设备树初始化序列的命令类型。
-
0x05 命令类型: 单字节数据 (DCS Short Write, no parameters)
-
0x15 命令类型: 双字节数据 (DCS Short Write, 1 parameter)
-
0x39 命令类型: 多字节数据 (DCS Long Write, n parameters n > 2)
那么我们该如何转换呢?首先,我们先数一下个数,以 SET_GENERIC
为开始,下一个 SET_GENERIC
为结束作为一次数据发送,数一数一共有几个数据。其次看延时,看看厂家提供的初始化代码里面有没有延时。
那么对于双字节序列:
1 2 3 | //Set_D2SET_GENERIC(2);W_D(0xD2);W_D(0x77); |
我们将其转化成如下配置:
1 | 15 00 02 D2 77 |
对于多字节序列:
1 2 | SET_GENERIC(4);W_D(0xB9);W_D(0xFF);W_D(0x83);W_D(0x99); |
我们将其转化成如下配置:
1 | 39 00 04 B9 FF 83 99 |
对于单字节延时序列:
1 2 3 | SET_GENERIC(1);W_D(0x11);delay_ms(200); |
我们将其转化成如下配置:
1 | 05 C8 01 11 |
将初始化序列代码整理一下就可以得到RK 屏幕的DCS序列,如下
123456789 10 11 12 13 14 15 16 17 18 19 20 21 | panel-init-sequence = [39 00 04 B9 FF 83 9915 00 02 D2 7739 00 10 B1 02 04 74 94 01 32 33 11 11 AB 4D 56 73 02 0239 00 10 B2 00 80 80 AE 05 07 5A 11 00 00 10 1E 70 03 D415 00 02 36 0239 00 2D B4 00 FF 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 21 03 01 00 0F B8 8B 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 01 00 0F B8 0139 05 22 D3 00 00 00 00 00 00 06 00 00 10 04 00 04 00 00 00 00 00 00 00 00 00 00 01 00 05 05 07 00 00 00 05 4039 05 21 D5 18 18 19 19 18 18 21 20 01 00 07 06 05 04 03 02 18 18 18 18 18 18 2F 2F 30 30 31 31 18 18 18 1839 05 21 D6 18 18 19 19 40 40 20 21 06 07 00 01 02 03 04 05 40 40 40 40 40 40 2F 2F 30 30 31 31 40 40 40 4039 00 11 D8 A2 AA 02 A0 A2 A8 02 A0 B0 00 00 00 B0 00 00 0015 00 02 BD 0139 00 11 D8 B0 00 00 00 B0 00 00 00 E2 AA 03 F0 E2 AA 03 F015 00 02 BD 0239 00 09 D8 E2 AA 03 F0 E2 AA 03 F015 00 02 BD 0039 00 03 B6 8D 8D39 05 37 E0 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 7705 C8 01 1105 C8 01 29]; |
再结合屏幕规格书中的屏幕参数,得到如下配置。
123456789 10 11 12 13 14 15 16 17 18 | disp_timings0: display-timings {native-mode = <&dsi0_timing0>;dsi0_timing0: timing0 {clock-frequency = <131376000>;hactive = <1080>;vactive = <1920>;hsync-len = <10>;hback-porch = <20>;hfront-porch = <10>;vsync-len = <5>;vback-porch = <20>;vfront-porch = <10>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;};}; |
-
步骤三打开对应的dsi节点,开机logo,pwm等
123456789 10 11 12 13 14 15 16 17 18 19 20 | &route_dsi0 {status = "okay";connect = <&vp1_out_dsi0>; };&video_phy0 {status = "okay"; };&dsi0_in_vp0 {status = "disabled"; };&dsi0_in_vp1 {status = "okay"; };&pwm4 {status = "okay"; }; |
-
步骤四编译烧写,调试屏幕
19.7.2. lvds 屏幕
-
GM8775C
原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现单/双通道lvds屏幕的驱动。下面介绍使用GM8775C芯片的显 示方案。以rk3566 LubanCat-1H为例。
GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,电路图如下
GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。 GM8775C 主要应用于前端视频应用处理器和后端显示设备之间,用于做 DSI 到 LVDS转换驱动输出功能。前端视频应用处理器输出 4lane DSI 数据,并 同步输出 1lane DSI 时钟信号。 GM8775C 将该 DSI 信号转换成 LVDS 差分信号输出,驱动后级显示器完成转换、传输和显示功能。示意图如下
以野火在售的单通道lvds屏幕为例,panel-init-sequence 需要填写 MIPI 向 GM8775C 芯片下发的寄存器参数,根据屏幕时序参数和硬件连接情况,此 处借助 GM8775C 配套的上位机软件,在软件界面中设置屏幕的参数,即可得到转换好的实际寄存器设置参数。
屏幕参数如下
123456789 10 11 12 13 14 15 16 17 18 | dsi0_timing0: timing0 {clock-frequency = <71107200>;hactive = <1280>;vactive = <800>;hsync-len = <32>;hback-porch = <80>;hfront-porch= <48>; //1440vsync-len = <6>;vback-porch = <14>;vfront-porch = <3>; //823hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;}; |
上位机软件配置如下
mipi时钟计算 dsi clk = Bitclk / 2 = H-total x V-total x fps x 位深 / lane number / 2
后续加上SSR展频,得到完整panel-init-sequence配置
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | panel-init-sequence = [23 00 02 27 AA23 00 02 48 0223 00 02 B6 2023 00 02 01 0023 00 02 02 2023 00 02 03 3523 00 02 04 0823 00 02 05 2023 00 02 06 0A23 00 02 07 0023 00 02 08 0323 00 02 09 0623 00 02 0A 0323 00 02 0B 8223 00 02 0C 2723 00 02 0D 0123 00 02 0E 8023 00 02 0F 2023 00 02 10 2023 00 02 11 0323 00 02 12 1B23 00 02 13 0323 00 02 14 0123 00 02 15 2323 00 02 16 4023 00 02 17 0023 00 02 18 0123 00 02 19 2323 00 02 1A 4023 00 02 1B 0023 00 02 1E 4623 00 02 51 3023 00 02 1F 1023 00 02 2A 01//如下为SSR展频,不加可能点不亮23 00 02 6A 0823 00 02 6C 9E23 00 02 6D 0723 00 02 6E 0023 00 02 6F 8A23 00 02 70 1923 64 02 71 00]; |
19.7.3. edp 屏幕
edp屏幕的适配较为简单,只需要修改下时序即可。野火在售的edp屏幕的设备树插件配置如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #include <dt-bindings/gpio/gpio.h>#include <dt-bindings/pinctrl/rockchip.h>#include <dt-bindings/display/drm_mipi_dsi.h>#include <dt-bindings/interrupt-controller/irq.h>#include <dt-bindings/display/rockchip_vop.h>/ {fragment@0 {target = <&route_edp>;__overlay__ {status = "okay";connect = <&vp0_out_edp>;};};fragment@1 {target = <&edp_phy>;__overlay__ {status = "okay";};};fragment@2 {target = <&edp_in_vp0>;__overlay__ {status = "okay";};};fragment@3 {target = <&edp_in_vp1>;__overlay__ {status = "disabled";};};fragment@4 {target = <&edp>;__overlay__ {status = "okay";// hpd-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>; //热插拔信号检测force-hpd; //强制hpd,忽略物理hdp信号ports {#address-cells = <1>;#size-cells = <0>;port@1 {reg = <1>;edp_out_panel: endpoint@0 {remote-endpoint = <&panel_in_edp>;};};};};};fragment@5 {target-path = "/";__overlay__ {edp_panel: edp-panel {compatible = "simple-panel";backlight = <&backlight_lvds_edp>;status = "okay";//bus-format = <MEDIA_BUS_FMT_RBG888_1X24>;prepare-delay-ms = <100>; //AUX通信前延时enable-delay-ms = <100>;display-timings {native-mode = <&timing0>;timing0: timing0 {clock-frequency = <75590000>;hactive = <1280>;vactive = <800>;hfront-porch = <126>;hsync-len = <100>;hback-porch = <10>;vfront-porch = <16>;vsync-len = <12>;vback-porch = <3>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;};};ports {panel_in_edp: endpoint {remote-endpoint = <&edp_out_panel>;};};};};};fragment@6 {target = <&route_hdmi>;__overlay__ {status = "disabled";};};fragment@7 {target = <&hdmi_in_vp0>;__overlay__ {status = "disabled";};};fragment@8 {target = <&hdmi_in_vp1>;__overlay__ {status = "disabled";};};fragment@9 {target = <&hdmi>;__overlay__ {status = "disabled";};};fragment@10 {target = <&vp0>;__overlay__ {rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | \1 << ROCKCHIP_VOP2_SMART0)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;};};}; |
相关文章:

屏幕与触摸调试
本章配套视频介绍: 《28-屏幕与触摸设置》 【鲁班猫】28-屏幕与触摸设置_哔哩哔哩_bilibili LubanCat-RK3588系列板卡都支持mipi屏以及hdmi显示屏的显示。 19.1. 旋转触摸屏 参考文章 触摸校准 参考文章 旋转触摸方向 配置触摸旋转方向 1 2 # 1.查看触摸输入设备 xinput…...

使用 百度云大模型平台 做 【提示词优化】
1. 百度云大模型平台 百度智能云千帆大模型平台  平台功能:演示了阿里云大模型的百炼平台,该平台提供Prompt工程功能,支持在线创建和优化Prompt模板模板类型:平台提供多种预制模板,同时也支持用户自定义…...
C 语言_常见排序算法全解析
排序算法是计算机科学中的基础内容,本文将介绍 C 语言中几种常见的排序算法,包括实现代码、时间复杂度分析、适用场景和详细解析。 一、冒泡排序(Bubble Sort) 基本思想:重复遍历数组,比较相邻元素,将较大元素交换到右侧。 代码实现: void bubbleSort(int arr[], i…...

IJCAI 2025 | 高德首个原生3D生成基座大模型「G3PT」重塑3D生成的未来
国际人工智能联合会议(IJCAI)是人工智能领域最古老、最具权威性的学术会议之一,自1969年首次举办以来,至今已有近六十年的历史。它见证了人工智能从萌芽到蓬勃发展的全过程,是全球人工智能研究者、学者、工程师和行业专…...

Samtec助力电视广播行业
【摘要前言】 现代广播电视技术最有趣的方面之一就是界限的模糊。过去,音频和视频是通过射频电缆传输的模拟技术采集的,而现在,数字世界已经取代了模拟技术。物理胶片和磁带已让位于数字存储设备和流媒体。 在这个过程中,连接器…...

密码学--仿射密码
一、实验目的 1、通过实现简单的古典密码算法,理解密码学的相关概念 2、理解明文、密文、加密密钥、解密密钥、加密算法、解密算法、流密码与分组密码等。 二、实验内容 1、题目内容描述 ①随机生成加密密钥,并验证密钥的可行性 ②从plain文件读入待…...
生成式图像水印研究综述
生成式图像水印研究综述 一、引言二、生成式图像水印研究背景三、生成式图像水印算法研究进展3.1 基于流模型的方案3.2 基于生成对抗网络的方案3.3 基于扩散模型的方案3.3.1 修改图像数据3.3.2 调整生成模型3.3.3 修改隐变量空间四、算法的性能与评价指标五、常用数据集六、本章…...
TCP协议详细讲解及C++代码实例
目录 一. TCP协议详细讲解及C代码实例1、TCP协议概述2、TCP通信流程1) 三次握手2) 数据传输3) 四次挥手 3、关键点解析1) 套接字创建2) 三次握手实现3) 数据传输4) 四次挥手实现 4、TCP与UDP对比 一. TCP协议详细讲解及…...
深度剖析:Vue2 项目兼容第三方库模块格式的终极解决方案
当我们为 Vue2 项目引入某些现代 JavaScript 库时,常常会遇到这样的报错: error in ./node_modules/some-lib/lib/index.mjs Cant import the named export xxx from non EcmaScript module这类问题的本质是模块格式的世纪之争 —— ES Moduleÿ…...
APISQL免费版安装教程(视频)
APISQL 一款通用的API开发管理软件,支持将主流数据库中的表、视图、SQL语句、存储过程等快速封装为标准的 RESTful API,支持多种安全认证方式和可视化管理界面。适用于接口开发、系统集成、数据共享等场景。 支持主流数据库的表、视图、自定义函数、存储…...

SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)
简言: 在万物互联的时代,MQTT协议凭借其轻量级、高效率的特性,已成为物联网通信的事实标准。本教程将带领您在Ubuntu系统上搭建EMQX 5.9.0消息服务器,并使用Spring Boot快速实现两个客户端的高效通信。通过本指南,您将…...

从零开始掌握FreeRTOS(2)链表之节点的定义
目录 节点 节点定义 节点实现 根节点 根节点定义 精简节点定义 根节点实现 在上篇文章,我们完成了 FreeRTOS 的移植。在创建任务之前,我们需要先了解FreeRTOS的运转机制。 FreeRTOS是一个多任务系统,由操作系统来管理执行每个任务。这些任务全都挂载到一个双向循…...
Java的While循环写的出票简单程序
import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);int balance 0;while(true){System.out.print("请投币: ");int amount in.nextInt();balance balance amount;if(balance >10 )…...
详解Windows(十一)——网络连接设置
Windows网络连接设置完全指南 1. Windows网络连接基础 网络连接类型 有线连接: 通过网线将电脑连接到路由器或调制解调器优点:连接稳定,速度快,延迟低适合:需要高速稳定网络的场景,如游戏、大文件下载、…...
多线程爬虫语言选择与实现
之前文中有人提到:想要一个简单易用、能快速实现多线程爬虫的方案,而且目标是小网站,基本可以确定对反爬虫措施要求不高,这些就比较简单了。 以往我肯定要考虑常见的编程语言中哪些适合爬虫。Python、JavaScript(Node…...

【数据结构】——双向链表
一、链表的分类 我们前面学习了单链表,其是我们链表中的其中一种,我们前面的单链表其实全称是单向无头不循环链表,我们的链表从三个维度进行分类,一共分为八种。 1、单向和双向 可以看到第一个链表,其只能找到其后一个…...
AI助力:零基础开启编程之旅
一、代码调试 三步解决BUG 1. 错误信息翻译 指令模板: 错误诊断模式我遇到【编程语言】报错“粘贴报错信息“ 请: 用小白能懂的话解释问题本质标注可能引发该错误的三个场景给出最可能的修复方案和其他备选方案 2. 上下文分析 进阶指令 结合上下文代…...

mybatis中${}和#{}的区别
先测试,再说结论 userService.selectStudentByClssIds(10000, "wzh or 11");List<StudentEntity> selectStudentByClssIds(Param("stuId") int stuId, Param("field") String field);<select id"selectStudentByClssI…...
【计算机组成原理】第二部分 存储器--分类、层次结构
文章目录 分类&层次结构0x01 分类按存储介质分类按存取方式分类按在计算机中的作用分类 0x02 层次结构 分类&层次结构 0x01 分类 按存储介质分类 半导体存储器磁表面存储器磁芯存储器光盘存储器 按存取方式分类 存取时间与物理地址无关(随机访问&#…...

抗量子计算攻击的数据安全体系构建:从理论突破到工程实践
在“端 - 边 - 云”三级智能协同理论中,端 - 边、边 - 云之间要进行数据传输,网络的安全尤为重要,为了实现系统总体的安全可控,将构建安全网络。 可先了解我的前文:“端 - 边 - 云”三级智能协同平台的理论建构与技术实…...
正则表达式: 从基础到进阶的语法指南
正则表达式语法详解 前言一、基础概念二、基础元字符2.1 字符匹配2.2 字符类2.3 预定义字符类 三、重复匹配3.1 贪婪与非贪婪匹配3.2 精确重复匹配 四、边界匹配4.1 行首与行尾匹配4.2 单词边界匹配 五、分组与引用5.1 分组5.2 反向引用5.3 命名分组 六、逻辑运算符6.1 或运算 …...

uniapp|实现手机通讯录、首字母快捷导航功能、多端兼容(H5、微信小程序、APP)
基于uniapp实现带首字母快捷导航的通讯录功能,通过拼音转换库实现汉字姓名首字母提取与分类,结合uniapp的scroll-view组件与pageScrollTo API完成滚动定位交互,并引入uni-indexed-list插件优化索引栏性能。 目录 核心功能实现动态索引栏生成联系人列表渲染滚动定位联动性…...

【Linux】基础IO(二)
📝前言: 上篇文章我们对Linux的基础IO有了一定的了解,这篇文章我们来讲讲IO更底层的东西: 重定向及其原理感受file_operation文件缓冲区 🎬个人简介:努力学习ing 📋个人专栏:Linux…...
SpringBoot异步处理@Async深度解析:从基础到高阶实战
一、异步编程基础概念 1.1 同步 vs 异步 特性同步异步执行方式顺序执行,阻塞调用非阻塞,调用后立即返回线程使用单线程完成所有任务多线程并行处理响应性较差,需等待前任务完成较好,可立即响应新请求复杂度简单直观较复杂&#…...

【生存技能】ubuntu 24.04 如何pip install
目录 原因解决方案说明关于忽略系统路径 在接手一个新项目需要安装python库时弹出了以下提示: 原因 这个报错是因为在ubuntu中尝试直接使用 pip 安装 Python 包到系统环境中,ubuntu 系统 出于稳定性考虑禁止了这种操作 这里的kali是因为这台机器的用户起名叫kali…...

SHAP分析!Transformer-GRU组合模型SHAP分析,模型可解释不在发愁!
SHAP分析!Transformer-GRU组合模型SHAP分析,模型可解释不在发愁! 目录 SHAP分析!Transformer-GRU组合模型SHAP分析,模型可解释不在发愁!效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SHAP分析…...
Tcp 通信简单demo思路
Server 端 -------------------------- 初始化部分 ------------------------------- 1.创建监听套接字: 使用socket(协议家族,套接字的类型,0) 套接字类型有 SOCK_STREAM:表示面向连接的套接字(Tcp协议)&…...
MySQL 8.0安装(压缩包方式)
MySQL 8.0安装(压缩包方式) 下载安装包并解压 下载 https://dev.mysql.com/downloads/mysql/可关注“后端码匠”回复“MySQL8”关键字获取 解压(我解压到D:\dev\mysql-8.4.5-winx64目录下) 创建mysql服务 注意,这步之前一定要保证自己电…...
常见标签语言的对比
XML、JSON 和 YAML 是常见的数据序列化格式 相同点 结构化数据表示 三者均支持嵌套结构,能描述复杂的数据层级关系(如对象、数组、键值对)。跨平台兼容性 均为纯文本格式,可被多种编程语言解析,适用于跨系统数据交换…...

知名人工智能AI培训公开课内训课程培训师培训老师专家咨询顾问唐兴通AI在金融零售制造业医药服务业创新实践应用
AI赋能未来工作:引爆效率与价值创造的实战营 AI驱动的工作革命:从效率提升到价值共创 培训时长: 本课程不仅是AI工具的操作指南,更是面向未来的工作方式升级罗盘。旨在帮助学员系统掌握AI(特别是生成式AI/大语言模型…...