STM32MP157移植Qt5.12.10

发布者:Serendipity66最新更新时间:2025-02-28 来源: cnblogs关键字:移植  Qt5 手机看文章 扫描二维码
随时随地手机看文章

一 说明

不带GPU功能,只能使用linuxFB方式运行QT程序

STM32MP15-Ecosystem-v2.1.0 release

tf-a-stm32mp-2.2.r2-r0

u-boot-stm32mp-2020.01.r2-r0

linux-stm32mp-5.4.56-r0

Buildroot: buildroot-2021.02.10

tslib: tslib-1.22

qt-everywhere-src-5.12.10

qt-opensource-linux-x64-5.12.10.run

Arm GNU Toolchain: gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf

二 屏幕驱动

屏幕是800x480的RGB-LCD,与开发板的硬件接口与ST官方开发板STM32MP157-EVAL的RGB-LTDC接口引脚一致。


首先修改设备树文件arch/arm/boot/dts/stm32mp157d-custom.dts:


根节点添加panel_backlight和panel_rgb节点



/ {

......

panel_backlight: panel-backlight {

        compatible = 'pwm-backlight';

        pwms = <&pwm4 1 5000000>;

        brightness-levels = <0 32 64 96 128 160 192 224 255>;

        power-supply = <&v3v3>;

        default-brightness-level = <7>;

        status = 'okay';

    };


    panel_rgb: panel-rgb {

        compatible = 'custom,rgb-lcd5';

        backlight = <&panel_backlight>;

        status = 'okay';


        port {

            rgb_panel_in: endpoint {

                remote-endpoint = <<dc_ep0_out>;

            };

        };

};

    ......

};

<dc节点追加内容如下:


<dc {

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

pinctrl-0 = <<dc_pins_b>;

pinctrl-1 = <<dc_pins_sleep_b>;

    status = 'okay';


    port {

        #address-cells = <1>;

        #size-cells = <0>;


        ltdc_ep0_out: endpoint@0 {

            reg = <0>;

            remote-endpoint = <&rgb_panel_in>;

        };

    };

};

接着修改设备树文件arch/arm/boot/dts/stm32mp157d-custom.dtsi:


&timers4节点追加用于控制屏幕背光的内容如下


&timers4 {

    status = 'okay';

    /* spare dmas for other usage */

    /delete-property/dmas;

    /delete-property/dma-names;

    pwm4: pwm {

        pinctrl-0 = <&pwm4_pins_b>;

        pinctrl-1 = <&pwm4_sleep_pins_b>;

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

        #pwm-cells = <2>;

        status = 'okay';

    };

};

接着修改屏幕驱动文件drivers/gpu/drm/panel/panel-simple.c:


platform_of_match数组中添加自己屏幕的匹配数据


static const struct of_device_id platform_of_match[] = {

    ......

    {

.compatible = 'custom,rgb-lcd5',

.data = &custom_rgb_lcd5_desc,

},{

/* sentinel */

}

};

添加自己屏幕的时序参数及相关描述信息


static const struct drm_display_mode custom_rgb_lcd5_mode = {

.clock = 33300, /* 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刷新率,单位:HZ */

.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,

};


static const struct panel_desc custom_rgb_lcd5_desc = {

.modes = &custom_rgb_lcd5_mode,

.num_modes = 1,

.bpc = 8,

.size = {

.width = 117,

.height = 67,

},

.bus_format = MEDIA_BUS_FMT_RGB888_1X24,

};

三 触摸驱动

我手上开发板配套的RGB-LCD使用的触摸芯片型号为GT9147,通信接口使用的是开发板的i2c2,除此之外还有RST复位引脚和IRQ中断引脚。为了使Linux内核匹配该设备驱动,需要修改arch/arm/boot/dts/stm32mp157d-custom.dts设备树文件。在&i2c2节点下追加如下内容:


&i2c2 {

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

pinctrl-0 = <&i2c2_pins_a>;

pinctrl-1 = <&i2c2_pins_sleep_a>;

i2c-scl-rising-time-ns = <185>;

i2c-scl-falling-time-ns = <20>;

clock-frequency = <400000>;

status = 'okay';

/* spare dmas for other usage */

/delete-property/dmas;

/delete-property/dma-names;


    goodix_ts: gt9147@14 {

compatible = 'goodix,gt9147';

reg = <0x14>;

        interrupt-parent = <&gpioe>;

        interrupts = <1 IRQ_TYPE_EDGE_RISING>;

irq-gpios = <&gpioe 1 GPIO_ACTIVE_HIGH>;

reset-gpios = <&gpioa 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;

status = 'okay';

};

};

Linux源码中已有gt9147的驱动文件drivers/input/touchscreen/goodix.c,只需要配置内核使能该驱动即可。该驱动文件匹配列表如下:


static const struct of_device_id goodix_of_match[] = {

{ .compatible = 'goodix,gt1151' },

{ .compatible = 'goodix,gt5663' },

{ .compatible = 'goodix,gt5688' },

{ .compatible = 'goodix,gt911' },

{ .compatible = 'goodix,gt9110' },

{ .compatible = 'goodix,gt912' },

{ .compatible = 'goodix,gt927' },

{ .compatible = 'goodix,gt9271' },

{ .compatible = 'goodix,gt928' },

{ .compatible = 'goodix,gt967' },

{ .compatible = 'goodix,gt9147',},

{ }

};

四 测试显示和触摸

4.1 配置Linux

1、使能DRM(Direct Rendering Module)驱动(st源码默认配置已使能配置)


Device Drivers  --->

Graphics support  ---> 

<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->

<*> DRM Support for STMicroelectronics SoC Series

Display Panels  ---> 

<*> support for simple panels

Backlight & LCD device support  --->

<*>   Generic PWM based Backlight Driver

开启DRM驱动的传统FB(FrameBuffer)框架:


Device Drivers  ---> 

Graphics support  ---> 

<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->  

[*]   Enable legacy fbdev support for your modesetting driver  

2、使能Goodix I2C触摸芯片驱动(st源码默认配置已使能配置)


Device Drivers  --->  

Input device support  ---> 

[*]   Touchscreens  ---> 

<*>   Goodix I2C touchscreen

4.2 配置Buildroot

1、使能libdrm库用来调用DRM驱动测试屏幕


Target packages  ---> 

Libraries  --->  

Graphics  --->   

        [*] libdrm  ---> 

        [*]   Install test programs 

2、使能evtest用来测试触摸


Target packages  --->  

Hardware handling  --->   

[*] evtest  

3、使能字库(后面配置Qt环境变量会用到,否则后面在开发板运行软件会无法正常显示字符)


Target packages  ---> 

Fonts, cursors, icons, sounds and themes  --->

[*] DejaVu fonts

[*]   mono fonts (NEW) 

[*]   sans fonts (NEW) 

[*]   serif fonts (NEW) 

[*]   sans condensed fonts (NEW) 

[*]   serif condensed fonts (NEW) 

配置完成后重新make然后接下来使用新编译的文件系统启动开发板进行测试。


4.3 测试

4.3.1 屏幕测试

使用modetest测试屏幕显示。查看该命令使用帮助如下:


# modetest --help


usage: modetest [-acDdefMPpsCvrw]


 Query options:


        -c      list connectors

        -e      list encoders

        -f      list framebuffers

        -p      list CRTCs and planes (pipes)


 Test options:


        -P @:x[++][*][@]  set a plane

        -s [,][@]:[#][-][@]    set a mode

        -C      test hw cursor

        -v      test vsynced page flipping

        -r      set the preferred mode for all connectors

        -w :: 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.

直接执行modetest命令会自动扫描并尝试打开显示设备,如下:


# modetest

......

trying to open device 'amdgpu'...failed

trying to open device 'imx-drm'...failed

trying to open device 'virtio_gpu'...failed

......

trying to open device 'stm'...done

Encoders:

id      crtc    type    possible crtcs  possible clones

31      35      DPI     0x00000001      0x00000000


Connectors:

id      encoder status          name            size (mm)       modes   encoders

32      31      connected       DPI-1           117x67          1       31

  modes:

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

  #0 800x480 64.62 800 888 936 976 480 512 515 528 33300 flags: phsync, pvsync; 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

[1] [2] [3] [4] [5] [6]
关键字:移植  Qt5 引用地址:STM32MP157移植Qt5.12.10

上一篇:STM32MP157构建OpenSTLinux的QT镜像和SDK
下一篇:STM32MP157开发板调试笔记

推荐阅读最新更新时间:2026-03-25 11:35

stm32mp157教程案例 STM32MP157移植LVGL
1 简介 LVGL(Light and Versatile Embedded Graphics Library)是一个免费开源的嵌入式图形库,界面美观, 内存占用低, 支持C和Python等开发方式。早在几年前它就表现得十分惊艳,现如今被越来越多的人喜爱。笔者之前是使用6版本在单片机上面运行,如今都已经更新到7版本多了,人往高处走,终究得跟上最新版本,于是便有了关于LVGL7版本在linux上移植的这件篇笔记。 本次教程使用的开发板是万象奥科的HD-STM32MP157-STY开发板。该开发板使用STM32MP1家族中是目前性能强劲,资源最为丰富的一款处理器STM32MP157DAA,双核ARM Cortex-A7 @800M
[单片机]
<font color='red'>stm32mp157</font>教程案例 <font color='red'>STM32MP157</font><font color='red'>移植</font>LVGL
s5pv210移植Minigui3.0.12
移植平台: ubuntu:14.04 开发板:s5pv210(A8) Minigui版本:3.0.12 ----------------------------------------------------- 以下软件是开发板正常运行的必须安装包,在MiniGui官网可以下载 http://www.minigui.org/zhcn/【已放在嵌入式软件组资料共享文件夹】 ----------------------------------------------------- ├── freetype-2.3.9-fm20100818.tar.gz ├── jpegsrc.v7.tar.gz ├── libmgplus-1.2.4
[单片机]
飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2
Part0 准备知识 0.1 关键参数说明 0.1.1 开发板说明 OK6410是飞凌公司发布的一款开发板,当前有2个版本,OK6410-A和OK6410-B,我当前使用的是前者;前者也经历过升级,所以有128M ram的和较新的256内存的版本,nand flash大小也有区别,当前新的为4G,内存大小会影响到编译时smdk6410.c文件中mmu部分代码,后续会提到,可以参考飞凌提供的u-boot的该文件内容; 0.1.2 处理器说明 该开发板使用的是三星的s3c6410处理器, cup采用的指令集为: arm1176jzf-s, 属于armv6zk(使用gcc时,可通过-march=armv6zk来指定), 更多的对应关
[单片机]
Linux-2.6.12移植到斯道s3c2410
硬件设备: 网卡: dm9000 NandFlash: K9F1208U0C 64M 1, 下载并解压缩内核,修改顶层Makefile的编译器选项: ARCH ?= arm CROSS_COMPILE ?= arm-softfloat-linux-gnu- 2, 修改linux-2.6.12/arch/arm/mach-s3c2410/devs.c, 使其支持NandFlash和DM9000网卡: 添加头文件: #include linux/dm9000.h //该头文件将从linux-2.6.14的内核中copy到include/linux中去 #include linux/mtd/partit
[单片机]
iTOP-4412开发板-mqtt移植教程(一)
移植环境 Ubuntu:迅为提供的 ubuntu16.04 编译器:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 MOTT 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基 于发布/订阅(publish/subscribe)模式的轻量级协议,该协议构建于 TCP/IP 协议之上, MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 我们这里使
[单片机]
iTOP-44<font color='red'>12</font>开发板-mqtt<font color='red'>移植</font>教程(一)
u-boot-2012.04移植
开发平台:x86 redhat5.5 目标平台:SMDK6410 注意: 该文档是移植完成之后的总结,所以并非按照真正的移植步骤所写, 只做参考 修改完成后运行make进行编译,把编译生成的u-boot-nand.bin烧写到nand的0-0x40000后即可切换为nand启动方式来运行 在uboot启动后手动添加环境变量 # set ipaddr 192.168.1.20 # set serverip 192.168.1.254 # set ethaddr 11:22:33:44:55:66 这些变量也可在smdk6400.h中以宏的方式定义 经测试,nand、tftp等命令都好用,如有问题请
[单片机]
基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 摘要 MMA7660是一个三轴加速度传感器,跟exynos4412之间使用I2C接口进行通信
[单片机]
基于tiny44<font color='red'>12</font>的Linux内核<font color='red'>移植</font> -- MMA7660驱动<font color='red'>移植</font>(九)
06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART
移植u-boot-2012.04之建新单板_时钟_SDRAM_UART (1)新建单板目录,以及配置头文件 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2012.04.01 cd board/samsung/ cp smdk2410 smdk2440 –rf cd ../.. cd /include/configs/ cp smdk2410.h smdk2440.h (2) 修改 boards.cfg: 仿照 smdk2410 arm arm920t - samsung s3c24x0 添加: smdk244
[单片机]
06-S3C2440学习之<font color='red'>移植</font>20<font color='red'>12</font>u-boot到S3C2440(<font color='red'>移植</font>过程一)新建单板+修改时钟+SDRAM+UART
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved