Linux第99步_Linux之点亮LCD

主要学习如何在Linux开发板点亮屏,以及modetest命令的实现。

很多人踩坑,我也是一样。关键是踩坑后还是实现不了,这样的人确实很多,从群里可以知道。也许其他人没有遇到这个问题,我想是他运气好。

1、修改设备树

1)、打开“stm32mp15-pinctrl.dtsi”,找到“ltdc_pins_b”节点和“ltdc_pins_sleep_b”节点,如下:

ltdc_pins_b: ltdc-b-0 {

pins {

pinmux = <STM32_PINMUX('I', 14, AF14)>, /* LCD_CLK */

 <STM32_PINMUX('I', 12, AF14)>, /* LCD_HSYNC */

 <STM32_PINMUX('I', 13, AF14)>, /* LCD_VSYNC */

 <STM32_PINMUX('K',  7, AF14)>, /* LCD_DE */

 <STM32_PINMUX('I', 15, AF14)>, /* LCD_R0 */

 <STM32_PINMUX('J',  0, AF14)>, /* LCD_R1 */

 <STM32_PINMUX('J',  1, AF14)>, /* LCD_R2 */

 <STM32_PINMUX('J',  2, AF14)>, /* LCD_R3 */

 <STM32_PINMUX('J',  3, AF14)>, /* LCD_R4 */

 <STM32_PINMUX('J',  4, AF14)>, /* LCD_R5 */

 <STM32_PINMUX('J',  5, AF14)>, /* LCD_R6 */

 <STM32_PINMUX('J',  6, AF14)>, /* LCD_R7 */

 <STM32_PINMUX('J',  7, AF14)>, /* LCD_G0 */

 <STM32_PINMUX('J',  8, AF14)>, /* LCD_G1 */

 <STM32_PINMUX('J',  9, AF14)>, /* LCD_G2 */

 <STM32_PINMUX('J', 10, AF14)>, /* LCD_G3 */

 <STM32_PINMUX('J', 11, AF14)>, /* LCD_G4 */

 <STM32_PINMUX('K',  0, AF14)>, /* LCD_G5 */

 <STM32_PINMUX('K',  1, AF14)>, /* LCD_G6 */

 <STM32_PINMUX('K',  2, AF14)>, /* LCD_G7 */

 <STM32_PINMUX('J', 12, AF14)>, /* LCD_B0 */

 <STM32_PINMUX('J', 13, AF14)>, /* LCD_B1 */

 <STM32_PINMUX('J', 14, AF14)>, /* LCD_B2 */

 <STM32_PINMUX('J', 15, AF14)>, /* LCD_B3 */

 <STM32_PINMUX('K',  3, AF14)>, /* LCD_B4 */

 <STM32_PINMUX('K',  4, AF14)>, /* LCD_B5 */

 <STM32_PINMUX('K',  5, AF14)>, /* LCD_B6 */

 <STM32_PINMUX('K',  6, AF14)>; /* LCD_B7 */

bias-disable;/*禁止使用内部偏置电压*/

drive-push-pull;/*设置引脚为推挽输出*/

slew-rate = <1>;/*设置引脚的速度为1档,0最慢,3 最高*/

};

ltdc_pins_sleep_b: ltdc-b-1 {/*在sleep模式下RGB LCD的pinmux配置*/

pins {

pinmux = <STM32_PINMUX('I', 14, ANALOG)>, /* LCD_CLK */

 <STM32_PINMUX('I', 12, ANALOG)>, /* LCD_HSYNC */

 <STM32_PINMUX('I', 13, ANALOG)>, /* LCD_VSYNC */

 <STM32_PINMUX('K',  7, ANALOG)>, /* LCD_DE */

 <STM32_PINMUX('I', 15, ANALOG)>, /* LCD_R0 */

 <STM32_PINMUX('J',  0, ANALOG)>, /* LCD_R1 */

 <STM32_PINMUX('J',  1, ANALOG)>, /* LCD_R2 */

 <STM32_PINMUX('J',  2, ANALOG)>, /* LCD_R3 */

 <STM32_PINMUX('J',  3, ANALOG)>, /* LCD_R4 */

 <STM32_PINMUX('J',  4, ANALOG)>, /* LCD_R5 */

 <STM32_PINMUX('J',  5, ANALOG)>, /* LCD_R6 */

 <STM32_PINMUX('J',  6, ANALOG)>, /* LCD_R7 */

 <STM32_PINMUX('J',  7, ANALOG)>, /* LCD_G0 */

 <STM32_PINMUX('J',  8, ANALOG)>, /* LCD_G1 */

 <STM32_PINMUX('J',  9, ANALOG)>, /* LCD_G2 */

 <STM32_PINMUX('J', 10, ANALOG)>, /* LCD_G3 */

 <STM32_PINMUX('J', 11, ANALOG)>, /* LCD_G4 */

 <STM32_PINMUX('K',  0, ANALOG)>, /* LCD_G5 */

 <STM32_PINMUX('K',  1, ANALOG)>, /* LCD_G6 */

 <STM32_PINMUX('K',  2, ANALOG)>, /* LCD_G7 */

 <STM32_PINMUX('J', 12, ANALOG)>, /* LCD_B0 */

 <STM32_PINMUX('J', 13, ANALOG)>, /* LCD_B1 */

 <STM32_PINMUX('J', 14, ANALOG)>, /* LCD_B2 */

 <STM32_PINMUX('J', 15, ANALOG)>, /* LCD_B3 */

 <STM32_PINMUX('K',  3, ANALOG)>, /* LCD_B4 */

 <STM32_PINMUX('K',  4, ANALOG)>, /* LCD_B5 */

 <STM32_PINMUX('K',  5, ANALOG)>, /* LCD_B6 */

 <STM32_PINMUX('K',  6, ANALOG)>; /* LCD_B7 */

};

上面的连接和原理图一致,不用修改。

2)、检查是否有被使用的引脚:

PI12被hdp0_pins_a节点占用,要屏蔽,见下图:

3)、打开“stm32mp157d-atk.dts”,添加内容如下(注意:不是在根节点“/”下添加):

ltdc {

pinctrl-names = "default", "sleep";

pinctrl-0 = <<dc_pins_b>;/*pinctrl-0为default模式*/

pinctrl-1 = <<dc_pins_sleep_b>;/*pinctrl-1为sleep模式*/

/*设置了两个pinmux模式:pinctrl-0为default模式,pinctrl-1为sleep模式,

系统默认使用default模式。*/

status = "okay";

port {

#address-cells = <1>;

#size-cells = <0>;

ltdc_ep0_out: endpoint@0 {/*ltdc_ep0_out为port的子节点*/

reg = <0>;

remote-endpoint = <&rgb_panel_in>;

/*remote-endpoint属性告诉ltdc节点输出到rgb_panel_in接口*/

};

};

};

4)、在stm32mp157d-atk.dts文件的根节点/下,添加“输出接口”如下所示内容:

panel_rgb: panel-rgb {

compatible = "zgq,lcd-rgb";

/*在 panel-simple.c 文件里的platform_of_match数组增加一个

of_device_id结构体,此结构体的compatible成员属性值为“zgq,lcd-rgb”。*/

backlight = <&backlight>;/*此属性值为引用背光节点*/

status = "okay";

port {

rgb_panel_in: endpoint {

remote-endpoint = <<dc_ep0_out>;

/*要从ltdc节点里获取显示数据*/

};

};

};

2、修改“panel-simple.c”程序

1)、打开“panel-simple.c”,修改platform_of_match[]数组,添加内容如下:

{

.compatible = "zgq,lcd-rgb",

.data = &zgq_desc,

}

2)、在“panel-simple.c”中添加“zgq_desc”参数。

我用的是ATK4384,4.3寸800*480分辨率,参数如下:

/* LCD屏ATK4384的时序参数信息需要向厂家要:4.3寸800*480分辨率 */

static const struct drm_display_mode ATK4384_mode = {

.clock = 31000, /* LCD像素时钟,单位KHz */

.hdisplay = 800, /* LCD X轴像素个数 */

.hsync_start = 800 + 88, /* LCD X轴+hbp的像素个数 */

.hsync_end = 800 + 88 + 48, /* LCD X轴+hbp+hspw的像素个数 */

.htotal = 800 + 88 + 48 + 40,/* LCD X轴+hbp+hspw+hfp */

.vdisplay = 480, /* LCD Y轴像素个数 */

.vsync_start = 480 + 32, /* LCD Y轴+vbp的像素个数 */

.vsync_end = 480 + 32 + 3, /* LCD Y轴+vbp+vspw的像素个数 */

.vtotal = 480 + 32 + 3 + 13,/* LCD Y轴+vbp+vspw+vfp */

.vrefresh = 60, /* LCD的刷新频率为60HZ */

};

static const struct panel_desc zgq_desc = {

.modes = &ATK4384_mode,

.num_modes = 1,

.bus_format = MEDIA_BUS_FMT_RGB888_1X24,

};

3、再次修改设备树头文件,在“stm32mp15-pinctrl.dtsi”中添加“背光节点”

1)、打开“stm32mp15-pinctrl.dtsi”,找到“pwm4_pins_b”,内容如下:

pwm4_pins_b: pwm4-1 {

pins {

pinmux = <STM32_PINMUX('D', 13, AF2)>; /* TIM4_CH2 */

bias-pull-down;

drive-push-pull;

slew-rate = <0>;

};

};

pwm4_sleep_pins_b: pwm4-sleep-1 {

pins {

pinmux = <STM32_PINMUX('D', 13, ANALOG)>; /* TIM4_CH2 */

};

};

2)、在“stm32mp157d-atk.dts”文件里,添加“&timers4”如下所示内容:

&timers4 {

status = "okay";

/* spare dmas for other usage */

/delete-property/dmas;/*设置此节点不使用DMA*/

/delete-property/dma-names;/*设置此节点不使用DMA*/

pwm4: pwm {/*pwm4是我们为pwm设置的一个别名。*/

pinctrl-0 = <&pwm4_pins_b>;/*设置PWM所使用的IO配置*/

pinctrl-1 = <&pwm4_sleep_pins_b>;/*设置PWM所使用的IO配置*/

pinctrl-names = "default", "sleep";

#pwm-cells = <2>;

status = "okay";

};

};

3)、修改设备树文件,在stm32mp157d-atk.dts文件里,在根节点里,添加“backlight”节点:

backlight: backlight {

compatible = "pwm-backlight";

pwms = <&pwm4 1 5000000>;

/*设置背光使用pwm4的第2个通道,PWM频率为1000000000/5000000=200Hz*/

brightness-levels = <0 4 8 16 32 64 128 255>;

/*设置背 8 级背光(0~7),分别为 0、4、8、16、32、64、128、255,

对应占空比为 0%、1.57%、3.13%、6.27%、12.55%、25.1%、50.19%、100%*/

power-supply = <&v3v3>;

default-brightness-level = <7>;

/*设置默认背光等级为7,也就是100%的亮度*/

status = "okay";

};

4)、修改“pwm_bl.c”文件

因为背光的驱动代码有点bug,如果设置0级,屏不会灭屏,打开pwm_bl.c文件,将下面的代码修改一下:

if (brightness > 0) {

pwm_get_state(pb->pwm, &state);

state.duty_cycle = compute_duty_cycle(pb, brightness);

pwm_apply_state(pb->pwm, &state);

pwm_backlight_power_on(pb);

}

改成如下:

if (brightness >= 0) {

pwm_get_state(pb->pwm, &state);

state.duty_cycle = compute_duty_cycle(pb, brightness);

pwm_apply_state(pb->pwm, &state);

pwm_backlight_power_on(pb);

}

见下图:

4、配置“Linux内核”

1)、打开终端。

2)、输入“cd linux/atk-mp1/linux/my_linux/linux-5.4.31/回车”,切换到“linux/atk-mp1/linux/my_linux/linux-5.4.31/”目录;

3)、输入“make menuconfig回车”,打开linux内核图形化配置界面:

4)、移动“向下光标键”至“Device Drivers”,见下图:

5)、按下“回车键”,移动“向下光标键”至“Graphics support”,见下图:

6)、按下“回车键”,移动“向下光标键”至“Direct Rendering Manager (XFree86 4.1.0 and higher DRI suppor”,按“Y键”,见下图:

7)、移动“向下光标键”至“DRM Support for Samsung SoC EXYNOS Series”,按“Y键”,见下图:

8)、先“保存”,按“TAB键”至“Save”,按下“回车”,得到下面的界面。

9)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:

10)、按“回车”,保存完成。得到下面的界面。

11)、按“回车”,退出保存界面。

12)、移动“向下光标键”至“Display Panels”,见下图:

13)、按“回车键”,移动“向下光标键”至“support for simple panels”,按“Y键”,见下图:

14)、按一下“TAB键”至“Exit”。注意:最好也保存一下,防止配置软件有bug。见下图:

15)、按“回车键”,移动“向下光标键”至“Backlight & LCD device support”,见下图:

16)、按“回车键”,移动“向下光标键”至“Generic PWM based Backlight Driver”,按下“Y键”,见下图:

17)、按“TAB键”至“Save”,按下“回车”,得到下面的界面。

18)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:

19)、按“回车”,保存完成。得到下面的界面。

20)、按“回车”,退出。

21)、按8次“ESC键”,得到下图:

22)、输入make stm32mp1_atk_defconfig回车”。

注意:图形化配置完后,要在终端输入“make stm32mp1_atk_defconfig回车”,更新“.config”这个文件,才叫图形化配置完成,因为参与编译的文件是".config"这个文件。我编译成功,完全是巧合。

5、编译设备树

在VSCode终端,输入“make uImage dtbs LOADADDR=0XC2000040 -j8回车”,执行编译“Image”和“dtbs”,并指定装载的起始地址为0XC2000040,j8表示指定采用8线程执行。make dtbs”,用来指定编译设备树。

②输入“ls arch/arm/boot/uImage -l

查看是否生成了新的“uImage”文件

③输入“ls arch/arm/boot/dts/stm32mp157d-atk.dtb -l

查看是否生成了新的“stm32mp157d-atk.dtb”文件

4)、拷贝输出的文件:

①输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC;

②输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC

③输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

④输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

⑤输入“ls -l /home/zgq/linux/atk-mp1/linux/bootfs/回车”,查看“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的所有文件和文件夹

⑥输入“ls -l /home/zgq/linux/tftpboot/回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

⑦输入“chmod 777 /home/zgq/linux/tftpboot/stm32mp157d-atk.dtb回车

给“stm32mp157d-atk.dtb”文件赋予可执行权限

⑧输入“chmod 777 /home/zgq/linux/tftpboot/uImage回车 ,给“uImage”文件赋予可执行权限

⑨输入“ls /home/zgq/linux/tftpboot/ -l回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

6、文件系统使能libdrm库

如果没有libdrm库,是不能调用drm驱动的,所以我们要在文件系统中使能libdrm库。

1)、输入“cd /home/zgq/linux/buildroot/buildroot-2020.02.6回车

2)、输入“make menuconfig回车”,打开“buildroot的图形化配置界面

3)、移动“向下光标键”至“Target packages”,见下图:

4)、按“回车键”,移动“向下光标键”至“Libraries”,见下图:

5)、按“回车键”,移动“向下光标键”至“Graphics”,见下图:

6)、按“回车键”,移动“向下光标键”至“libdrm”,按下“Y键”,见下图:

7)、按“TAB键”,移动“向右光标键”至“Save”,按“回车键”。

注意:这里必须要先保存,否则一次性保存会失败,我试过了,不要踩坑

8)、将“/zgq/linux/buildroot/buildroot-2020.02.6/.config”修改为

./configs/stm32mp1_atk_defconfig”,见下图:

9)、移动“向下光标键”至“Ok”,按“回车键”;按“ESC

10)、按下“回车键”,移动“向下光标键”至“Install test programs”,按下“Y键”,见下图:

11)、按“TAB键”,移动光标至“Save”,按“回车键

12)、将“/zgq/linux/buildroot/buildroot-2020.02.6/.config”修改为

./configs/stm32mp1_atk_defconfig”,见下图:

13)、移动“向下光标键”至“Ok”,按“回车键”完成保存;

这里,我们将配置项命名为“stm32mp1_atk_defconfig”,以后要重新配置buildroot的话,就可以直接输入“make stm32mp1_atk_defconfig回车”。

15)、按“ESC键”退出,直到出现下图:

16)、输入“make stm32mp1_atk_defconfig回车

注意:图形化配置完后,要在终端输入“make stm32mp1_atk_defconfig回车”,更新“.config”这个文件,才叫图形化配置完成,因为参与编译的文件是".config"这个文件。我编译成功,完全是巧合。可以这么理解“stm32mp1_atk_defconfig”好比是缓存,而“.config”才是我们要修改的文件。

7、编译“buildroot”

1)、在“/home/zgq/linux/buildroot/buildroot-2020.02.6”目录,

输入“make -j8”,编译“buildroot”,-j8表示采用8线程编译

2)、等待下载“host-python3 3.8.5”见下图:

3)、等待下载“host-python3-setuptools 41.4.0” 

4)、查看编译结果:

输入“cd output/”切换到“output”目录

输入“ls”,查看“output”目录下的所有文件和文件夹

输入“cd images/”切换到“images”目录

输入“ls”,查看“images”目录下的所有文件和文件夹

5)、打开第2个终端

输入“cd linux/nfs/rootfs”,切换到“linux/nfs/rootfs”目录

输入“ls回车

输入“sudo rm * -rf回车”,删除“rootfs”目录下所有的文件和文件夹,前面已经做了备份

输入“ls回车

输入“cd ..回车”,返回到“nfs”目录

输入“ls回车

6)、回到第1个打开的终端

输入“cp rootfs.tar /home/zgq/linux/nfs/rootfs回车”

将“/home/zgq/linux/buildroot/buildroot-2020.02.6/output/images”目录下的“rootfs.tar”拷贝到“/home/zgq/linux/nfs/rootfs”目录中

7)、回到第2个打开的终端

输入“cd rootfs/回车

输入“ls回车

输入“sudo tar -axvf rootfs.tar”,解压

8)、输入“ls回车

输入“rm rootfs.tar回车”,删除压缩包

输入“ls回车

得到buildroot生成的根文件系统。

8、使用“buildroot”构建根文件系统

1)、给开发板上电。

输入“root回车

输入密码“123456回车

输入“cd /”,切换到根目录

输入“ls”,可以执行了

2)、输入“reboot回车

输入“root回车

输入“depmod回车”,报告“depmod: can't change directory to 'lib/modules/5.4.31': No such file or directory

输入“mkdir /lib/modules/5.4.31 -p回车

输入“depmod回车

输入“cd /lib/modules/5.4.31回车

输入“ls回车

9、使用vsftpd搭建FTP服务器

1)、输入“vi /etc/vsftpd.conf回车

按“ESC键”,输入“/local_enable=回车”,搜索字符串“local_enable=

,先按下“A”,然后移动光标至“#local_enable=YES”,删除“#”,修改为“local_enable=YES

按“ESC键”,输入“/write_enable=回车”,搜索字符串“write_enable=

,先按下“A”,然后移动光标至“#write_enable=YES”,删除“#”,修改为“write_enable=YES

2)、按“ESC键”,输入“:wq回车”,保存退出。

10、测试:使用SSH服务通过网络远程登录开发板

1)、输入“ls /etc/vsftpd.conf -l回车

报告“-rw-r--r--    1 sshd     sshd          4591 Feb 17  2024 /etc/vsftpd.conf”,表示该文件所属用户为“sshd”;

输入“chown root:root /etc/vsftpd.conf回车”,将/etc/vsftpd.conf修改为“root”用户。

输入“ls /etc/vsftpd.conf -l回车

报告“-rw-r--r--    1 root     root          4591 Feb 17  2024 /etc/vsftpd.conf”,表示该文件所属用户为“root”;

2)、输入“adduser Zhanggong回车”,使用adduser命令创建开发板用户名为Zhanggong

输入密码“123456

输入密码“123456

输入“cd /home/回车

输入“ls回车

3)、打开“FileZilla”

4)、点击“文件”,再点击“站点管理器

5)、点击“新站点”,修改为“MP157开发板

6)、等待开发板启动完成,输入“root回车”,输入“ifconfig回车”,查询卡发板的IP地址

7)、设置开发板的IP地址,用户名和密码

8)、在串口终端输入“reboot”,重启开发板。

9)、等待开发板启动完成,再点击“连接

10、在串口终端输入“root回车”,输入“ps回车

11)、输入“chown root:root /var/empty回车”,将“/var/empty”修改为“root”用户。

输入“reboot回车”,重启开发板

12)、等待开发板启动完成后,在串口终端输入“root回车”,输入“ps回车

13)、点击“sesson”,点击“SSH”,然后按照下图设置开发板:

14)、输入密码“123456

输入“cd /回车”,切换至根目录

输入“ls回车

至此,我们完成了SSH测试。

11、创建“自启动文件”

1)、输入“cd /etc/init.d/”,切换到“init.d”目录

输入“ls

输入“touch Sautorun”,创建Sautorun文件

输入“ls

输入“chmod 777 Sautorun”,给“Sautorun”赋可执行权限

输入“ls

2)、输入“vi  Sautorun回车

先按“A”,然后输入内容:

#!/bin/sh

cd /

按“ESC键”,输入“:wq回车

12、设置开发板需要显示路径

1)、输入“vi /etc/profile回车

按“ESC键”,输入“:q!回车”,不保存退出。

输入“cd /etc/profile.d回车

输入“ls回车

输入“touch myprofile.sh”,创建脚本文件“myprofile.sh”

输入“ls回车

输入“chmod 777 myprofile.sh”,给myprofile.sh赋可执行权限

输入“ls回车

输入“vi myprofile.sh”,打开myprofile.sh文件

先按“A”,再输入内容如下

#!/bin/sh

PS1='[\u@\h]:\w$ '  #\u表示用户名,\h表示主机名,\w表示显示当前工作目录的路径

export PS1

2)、按“ESC键”,输入“:wq回车”,保存退出。

3)、输入“reboot”重启开发板

等待开发板启动完成,输入“root回车

输入“cd /回车

输入“ls回车

输入“cd etc/回车

可以看到工作路径了。

13、使能“sysfs debug”目录

1)、输入“cd /sys/kernel/debug/

输入“ls回车

在“Sautorun”文件中,添加“mount -t debugfs none /sys/kernel/debug

输入“vi  /etc/init.d/Sautorun

输入内容如下:

#!/bin/sh

mount -t debugfs none /sys/kernel/debug

4)、按“ESC键”,输入“:wq回车”,保存退出。

输入“reboot”重启开发板

6)、等待开饭启动完成,输入“root回车

输入“ls

输入“ls /sys/kernel/debug/

至此,根文件系统测试完成了。

7)、输入“modetest --help回车”,发现可以执行“modetest --help”

14、点亮显示屏

1)、输入“modetest --help回车

2)、输入“modetest -M stm回车

输入“modetest -M stm回车

输入“modetest -M stm -s 32@35:800x480回车

具体显示内容如下:

Welcome to zgq STM32MP157

ATK-stm32mp1 login: root

[root@ATK-stm32mp1]:~$ modetest --help

usage: modetest [-acDdefMPpsCvw]

 Query options:

        -c      list connectors

        -e      list encoders

        -f      list framebuffers

        -p      list CRTCs and planes (pipes)

 Test options:

        -P <plane_id>@<crtc_id>:<w>x<h>[+<x>+<y>][*<scale>][@<format>]  set a plane

        -s <connector_id>[,<connector_id>][@<crtc_id>]:<mode>[-<vrefresh>][@<format>]   set a mode

        -C      test hw cursor

        -v      test vsynced page flipping

        -w <obj_id>:<prop_name>:<value> set property

        -a      use atomic API

        -F pattern1,pattern2    specify fill patterns

 Generic options:

        -d      drop master after mode set

        -M module       use the given driver

        -D device       use the given device

        Default is to dump all info.

[root@ATK-stm32mp1]:~$ modetest -M stm

Encoders:

id      crtc    type    possible crtcs  possible clones

31      0       DPI     0x00000001      0x00000000

Connectors:

id      encoder status          name            size (mm)       modes   encoders

32      0       connected       DPI-1           105x67          1       31

  modes:

        name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)

  800x480 60 800 888 936 976 480 512 515 528 31000 flags: ; type: preferred, driver

  props:

        1 EDID:

                flags: immutable blob

                blobs:

                value:

        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

        4 TILE:

                flags: immutable blob

                blobs:

                value:

        20 CRTC_ID:

                flags: object

                value: 0

CRTCs:

id      fb      pos     size

35      0       (0,0)   (0x0)

   0 0 0 0 0 0 0 0 0 0 flags: ; type:

  props:

        22 ACTIVE:

                flags: range

                values: 0 1

                value: 0

        23 MODE_ID:

                flags: blob

                blobs:

                value:

        19 OUT_FENCE_PTR:

                flags: range

                values: 0 18446744073709551615

                value: 0

        24 VRR_ENABLED:

                flags: range

                values: 0 1

                value: 0

        28 GAMMA_LUT:

                flags: blob

                blobs:

                value:

        29 GAMMA_LUT_SIZE:

                flags: immutable range

                values: 0 4294967295

                value: 256

Planes:

id      crtc    fb      CRTC x,y        x,y     gamma size      possible crtcs

33      0       0       0,0             0,0     0               0x00000001

  formats: AR24 XR24 RG24 RG16 AR15 XR15 AR12 XR12 C8

  props:

        8 type:

                flags: immutable enum

                enums: Overlay=0 Primary=1 Cursor=2

                value: 1

        17 FB_ID:

                flags: object

                value: 0

        18 IN_FENCE_FD:

                flags: signed range

                values: -1 2147483647

                value: -1

        20 CRTC_ID:

                flags: object

                value: 0

        13 CRTC_X:

                flags: signed range

                values: -2147483648 2147483647

                value: 0

        14 CRTC_Y:

                flags: signed range

                values: -2147483648 2147483647

                value: 0

        15 CRTC_W:

                flags: range

                values: 0 2147483647

                value: 0

        16 CRTC_H:

                flags: range

                values: 0 2147483647

                value: 0

        9 SRC_X:

                flags: range

                values: 0 4294967295

                value: 0

        10 SRC_Y:

                flags: range

                values: 0 4294967295

                value: 0

        11 SRC_W:

                flags: range

                values: 0 4294967295

                value: 0

        12 SRC_H:

                flags: range

                values: 0 4294967295

                value: 0

        30 IN_FORMATS:

                flags: immutable blob

                blobs:

                value:

                        01000000000000000900000018000000

                        01000000400000004152323458523234

                        52473234524731364152313558523135

                        41523132585231324338202000000000

                        ff010000000000000000000000000000

                        0000000000000000

                in_formats blob decoded:

                         AR24:  LINEAR

                         XR24:  LINEAR

                         RG24:  LINEAR

                         RG16:  LINEAR

                         AR15:  LINEAR

                         XR15:  LINEAR

                         AR12:  LINEAR

                         XR12:  LINEAR

                         C8  :  LINEAR

36      0       0       0,0             0,0     0               0x00000001

  formats: AR24 RG24 RG16 AR15 AR12 C8

  props:

        8 type:

                flags: immutable enum

                enums: Overlay=0 Primary=1 Cursor=2

                value: 0

        17 FB_ID:

                flags: object

                value: 0

        18 IN_FENCE_FD:

                flags: signed range

                values: -1 2147483647

                value: -1

        20 CRTC_ID:

                flags: object

                value: 0

        13 CRTC_X:

                flags: signed range

                values: -2147483648 2147483647

                value: 0

        14 CRTC_Y:

                flags: signed range

                values: -2147483648 2147483647

                value: 0

        15 CRTC_W:

                flags: range

                values: 0 2147483647

                value: 0

        16 CRTC_H:

                flags: range

                values: 0 2147483647

                value: 0

        9 SRC_X:

                flags: range

                values: 0 4294967295

                value: 0

        10 SRC_Y:

                flags: range

                values: 0 4294967295

                value: 0

        11 SRC_W:

                flags: range

                values: 0 4294967295

                value: 0

        12 SRC_H:

                flags: range

                values: 0 4294967295

                value: 0

        30 IN_FORMATS:

                flags: immutable blob

                blobs:

                value:

                        01000000000000000600000018000000

                        01000000300000004152323452473234

                        52473136415231354152313243382020

                        3f000000000000000000000000000000

                        0000000000000000

                in_formats blob decoded:

                         AR24:  LINEAR

                         RG24:  LINEAR

                         RG16:  LINEAR

                         AR15:  LINEAR

                         AR12:  LINEAR

                         C8  :  LINEAR

Frame buffers:

id      size    pitch

[root@ATK-stm32mp1]:~$ modetest -M stm -s 32@35:800x480

setting mode 800x480-60Hz@XR24 on connectors 32, crtc 35

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497042.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻破 kioprix level 4 靶机

又又又来了... 法一、 基本步骤 1.确认主机ip&#xff0c;扫描端口确定服务和版本 2.访问网站&#xff0c;扫描目录&#xff0c;查找敏感信息 3.利用敏感信息和SQL注入进入网站 4.ssh服务连接主机 5.shell逃逸并查找敏感信息&#xff08;与数据库等相关&#xff09; 6.m…

Qt自定义步骤引导按钮

1. 步骤引导按钮 实际在开发项目过程中&#xff0c;由一些流程比较繁琐&#xff0c;为了给客户更好的交互体验&#xff0c;往往需要使用step1->step2这种引导对话框或者引导按钮来引导用户一步步进行设置&#xff1b;话不多说&#xff0c;先上效果 2. 实现原理 实现起来…

解决nuxt3下载慢下载报错问题

在下载nuxt3时总是下不下来&#xff0c;最后还报错了。即使改成国内镜像源也不行。 解决方法&#xff1a; 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录&#xff1a; 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…

ShenNiusModularity项目源码学习(6:访问控制)

ShenNius.Admin.API项目中的控制器类的函数如果需要访问控制&#xff0c;主要是调用ShenNius.Infrastructure项目下的AuthorityAttribute特性类实现的。AuthorityAttribute继承自ActionFilterAttribute抽象类&#xff0c;后者用于在调用控制器操作函数前后自定义处理逻辑&#…

【连续学习之SSL算法】2018年论文Selfless sequential learning

1 介绍 年份&#xff1a;2018 期刊&#xff1a; arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID&#xff08;Sparse coding through Local Neural Inhibition and…

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念

1.2 技术理念 在万物智联时代重要机遇期&#xff0c;HarmonyOS结合移动生态发展的趋势&#xff0c;提出了三大技术理念&#xff08;如下图3-1所示&#xff09;&#xff1a;一次开发&#xff0c;多端部署&#xff1b;可分可合&#xff0c;自由流转&#xff1b;统一生态&#xf…

基于springboot校园招聘系统源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 使用旧方法对校园招聘系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园招聘系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比…

【小程序】自定义组件的data、methods、properties

目录 自定义组件 - 数据、方法和属性 1. data 数据 2. methods 方法 3. properties 属性 4. data 和 properties 的区别 5. 使用 setData 修改 properties 的值 自定义组件 - 数据、方法和属性 1. data 数据 在小程序组件中&#xff0c;用于组件模板渲染的私有数据&…

Python 敲电子木鱼,见机甲佛祖,修赛博真经

Python 敲电子木鱼&#xff0c;见机甲佛祖&#xff0c;修赛博真经 相关资源文件已经打包成EXE文件&#xff0c;可下载相关资源压缩包后双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&…

acitvemq AMQP:因为消息映射策略配置导致的MQTT接收JMS消息乱码问题 x-opt-jms-dest x-opt-jms-msg-type

使用ActiveMQ&#xff08;5.14.5&#xff09;作消息系统服务的场景下&#xff0c; 当我用Apache Qpid Proton发送消息(使用AMQP协议)发送JMS消息&#xff0c;用Paho MQTT接收消息的时候&#xff0c; 收到的消息前面总是有一串乱码&#xff0c;大概就是这样&#xff1a; 4Sp?AS…

viva-bus 航空机票网站 Akamai3 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

pyQT + OpenCV相关练习

一、设计思路 1、思路分析与设计 本段代码是一个使用 PyQt6 和 OpenCV 创建的图像处理应用程序。其主要功能是通过一个图形界面让用户对图片进行基本的图像处理操作&#xff0c;如灰度化、翻转、旋转、亮度与对比度调整&#xff0c;以及一些滤镜效果&#xff08;模糊、锐化、边…

【数据库初阶】Linux中库的基础操作

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 Linux…

Element Plus 日期时间选择器大于当天时间置灰

效果&#xff1a; 实现思路&#xff1a; 点击官方链接的日期时间选择器的属性查看&#xff0c;发现disabled-date属性 一个用来判断该日期是否被禁用的函数&#xff0c;接受一个 Date 对象作为参数。 应该返回一个 Boolean 值&#xff0c;即用函数返回布尔值。 前言 JavaScrip…

线性直流电流

电阻网络的等效 等效是指被化简的电阻网络与等效电阻具有相同的 u-i 关系 (即端口方程)&#xff0c;从而用等效电阻代替电阻网络之后&#xff0c;不 改变其余部分的电压和电流。 串联等效&#xff1a; 并联等效&#xff1a; 星角变换 若这两个三端网络是等效的&#xff0c;从任…

Java与SQL Server数据库连接的实践与要点

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Java和SQL Server数据库交互是企业级应用开发中的重要环节。本文详细探讨了使用Java通过JDBC连接到SQL Server数据库的过程&#xff0c;包括加载驱动、建立连接、执行SQL语句、处理异常、资源管理、事务处理和连…

【Halcon】例程讲解:基于形状匹配与OCR的多图像处理(附图像、程序下载链接)

1. 开发需求 在参考图像中定义感兴趣区域&#xff08;ROI&#xff09;&#xff0c;用于形状匹配和文本识别。通过形状匹配找到图像中的目标对象位置。对齐多幅输入图像&#xff0c;使其与参考图像保持一致。在对齐后的图像上进行OCR识别&#xff0c;提取文本和数字信息。以循环…

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…

Artec Space Spider助力剑桥研究团队解码古代社会合作【沪敖3D】

挑战&#xff1a;考古学家需要一种安全的方法来呈现新出土的陶瓷容器&#xff0c;对比文物形状。 解决方案&#xff1a;Artec Space Spider, Artec Studio 效果&#xff1a;本项目是REVERSEACTION项目的一部分&#xff0c;旨在研究无国家社会中复杂的古代技术。研究团队在考古地…

IPv6 基础协议-NDP

IPv6 基础协议报文 何为基础协议&#xff1f;像v4中的icmp、arp、hdcp之类的 在v6中只需要NDP协议&#xff0c;他是通过ICMPv6报文完成的&#xff0c;她能够实现邻居发现、无状态地址检测、重复地址检测、PMTU等功能 RS&#xff08;133&#xff09;RA&#xff08;134&#x…