STMCU小助手
发布时间:2022-9-30 18:13
|
1.实验原理* e( r0 D' X3 G0 q. u& [" ?+ q DSI(Display Serial Interface),是有MIPI联盟定义的一组通信协议的一部分,MIPI DSI主机控制器是一个数字核心,实现MIPI DSI规范中定义的所有协议功能。它提供了系统和MIPI D_PHY中间的接口,允许用户和符合DSI的显示器进行通信。STM32MP157A系列芯片集成MIPI DSI主机控制器。; r% v- L; Q2 A% l! T ( h# M4 ?* E1 V: t& n5 p ] MIPI®DSI主机包括内部连接到LTDC的专用视频接口以及一个通用的APB接口,可用于向显示器传输信息。
" e! T0 x; G% }- f* X FS-MP1A提供两组LCD显示接口,分别是RGB和MIPI接口,本节介绍如何在Linux中完成MIPI LCD的支持。! t2 h9 i9 K2 u# m ) X" o7 ]8 D! c4 ^/ Y- g' S" C! B
- I1 t% r2 Q5 Z6 r* b 上图为MIPI LCD的接口,接口信号线分为两组,分别是由DSI_D0P、DSI_D0N、DSI_D1P、DSI_D1N、DSI_CKP、DSI_CKN、DSI_TE、DSI_RST、LCD_PWM组成的LCD接口和由I2C2_SCL、I2C2_SDA、TP_RST、TP_IRQ组成的触摸屏接口,本节介绍LCD的支持。 DSI_D0P、DSI_D0N、DSI_D1P、DSI_D1N、DSI_CKP、DSI_CKN是DSI-MIPI的信号线,DSI_TE未使用,DSI_RST是LCD屏复位信号LCD_PWM是背光控制信号。 4 i2 o+ I0 X( A' d x: \ MIPI LCD接口管脚对应关系: 3 a% U4 h' Y+ g& p3 d
# B. ~4 [3 W8 N( Z; i
3 P2 V0 B# V: b# |* T, l3 C
+ o' Y c b% w: q6 w9 ?
3 ^& `9 ^: x$ a/ L4 { 1.PWM设备节点8 N _2 N# M j5 X" g 1 M* ?0 X* U2 S 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:/ d0 `1 z8 C+ ^1 t# K+ z1 { + C" P; K+ |, L8 u9 a arch/arm/boot/dts/stm32mp151.dtsi stm32mp151中timers2定义如下:* W$ M( e% p0 `8 W 2 d# W D7 G# a timers2: timer@40000000 { #address-cells = <1>; #size-cells = <0>; 9 `9 V5 E) u" c! r compatible = "st,stm32-timers"; 7 l+ [# E- b" |0 z reg = <0x40000000 0x400>; 8 o' o/ a5 Y+ a0 x. v3 |/ X, d clocks = <&rcc TIM2_K>; - h& K. r% B% X& m: T* V3 b/ s clock-names = "int";' E9 i( X( J* q: y* e' i) g& a0 ] 7 u5 C( I5 X' H; | dmas = <&dmamux1 18 0x400 0x80000001>,$ U6 [7 X _- a& c+ X% h7 w6 F " ?" ]. V6 v/ A; l6 ^ <&dmamux1 19 0x400 0x80000001>, 9 c- k! U+ g# l. O <&dmamux1 20 0x400 0x80000001>,' ?0 K5 k5 {, c! w0 k 7 O8 Q& g# y' _3 ?0 C; j <&dmamux1 21 0x400 0x80000001>, <&dmamux1 22 0x400 0x80000001>;! o$ F0 D; P: f( l* P + s9 M) \5 V. L- V2 G4 N- Q dma-names = "ch1", "ch2", "ch3", "ch4", "up";8 e9 n4 \& q3 Y2 J' I/ X) m; G status = "disabled";0 L8 ~7 ?! ]- D! m5 G* l, ~ " N) Z% R! u1 R* r2 T; f pwm {& [3 ?! R# j7 d# c5 }- p& j3 o + s' [: O, G, f% m% U5 } compatible = "st,stm32-pwm";% w' M" L1 d$ V# J #pwm-cells = <3>; / }( j# m2 F5 W6 S% k Y status = "disabled";5 B* w' p; _! C2 x0 K! u) j 2 F. A- o2 v% H' } }; timer@1 {) a J5 K8 V+ F& s2 G n7 ` compatible = "st,stm32h7-timer-trigger"; reg = <1>; status = "disabled";" N0 A) e5 i' }3 L }; 9 q* j! \, Y1 ?+ w counter { compatible = "st,stm32-timer-counter";8 y, w. X" r( ~+ _; T, h status = "disabled"; };' B7 L, ^$ R4 ?, | ( \; m; r4 t& u" n% B3 R }; 上述代码只对timers5做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。 参考文档或stm32mp15xx-dkx.dtsi对于i2c设备节点的描述,增加timers内容如下:. c; a4 H# r& z, i$ `! c ; S" Q. W( S# j$ K &timers2 {, ~1 C3 X. a0 @$ D3 h ' T6 t1 e6 W# f; C /* spare dmas for other usage */+ q$ `6 e* I% ^ /delete-property/dmas;3 @: K: n4 H2 O0 l4 _( E) C9 | /delete-property/dma-names;# i# \4 i; p/ f a ! N6 d% l& U% I' k' B% G status = "okay";& w1 a3 U% \+ Y- }9 b7 D8 k* {1 Q ) F; E( p% F3 V( {7 Y pwm2: pwm { $ |2 {$ u& W4 c pinctrl-0 = <&pwm2_pins_b>; 7 }2 l- b. n# ~2 o. ]% | pinctrl-1 = <&pwm2_sleep_pins_b>;- }! T) E3 O" e' o3 Z! J$ P- @0 J9 r , s* [0 a' G7 y9 @( ^ pinctrl-names = "default", "sleep"; - n, k1 P, {& T6 B #pwm-cells = <2>;! Z2 u: {0 P0 L# z% e. \ ) r0 Z$ A8 A# y$ L0 l) H status = "okay"; & K+ \9 W: b- h! y/ b, z6 E }; timer@2 { 9 D0 u7 w) d. w3 @$ n2 s9 C8 D& e& m status = "disabled";) J2 \ N& g/ P) I0 K; q, M5 M" j; E };; i( G7 J) G9 i: _/ a; C, H ! K* }* a) k7 z4 E5 i }; stm32mp15-pinctrl.dtsi对于pwm2的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容:- g& c4 z$ d- v1 X& @) h pwm2_pins_b: pwm2-0 {1 c* p, M( U+ `8 V " X7 L7 a+ j* U5 Z pins { 5 m* L+ g1 _; C( y! ? pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */ $ c: @6 T1 @( V7 i bias-pull-down; " t& @! k& o: k, ~* m drive-push-pull;+ T6 d# c9 n3 Z7 F' m! e! ^ slew-rate = <0>;+ h! m: r9 C1 W9 ` $ I8 D/ R- B G/ _* { };- }2 X- z( q% w2 b }; 4 P9 T$ K/ q% z) d4 }5 O pwm2_sleep_pins_b: pwm1-sleep-0 {2 \6 K* a C" |7 i1 w/ R pins { pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */& g1 w' L9 N$ w' F6 M* I };0 O* j A7 t& \: j 6 h. O N+ t- B8 j ` }; 2.背光设备节点, R3 Z9 l- ]) r. g V / l, I& @% {# t FS-MP1A背光可以通过GPIO驱动也可通过PWM2的通道1驱动,可以对比参考文档或内核中其他设备树关于背光的定义。0 i% J& C9 l$ K8 J. V' G8 K5 p ?/ T/ S+ k# S7 U2 W$ g n) c GPIO驱动背光节点内容如下:- H- S# f5 d3 n: u/ H 1 E* ^; f' R) g C- U- \7 V panel_backlight: panel-backlight { compatible = "gpio-backlight";& q3 y/ ^& [ o I gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;- j$ a+ T# K- ]3 R5 ] + t4 a6 e3 `8 u/ H' P# l default-on; status = "okay";8 s7 R- d2 t( V9 z" V: B& }4 ~ + F, L# _& r L0 k! o5 Z# C }; 6 C+ G# q9 ~2 J; `" v. [ PWM驱动背光节点内容如下: panel_backlight: panel-backlight {5 c3 N8 K# k% U1 m+ W: r) f # F* E; t; ]! e" k p1 F! G compatible = "pwm-backlight"; . ?7 }7 ], U( z6 Y) ]5 B pwms = <&pwm2 0 5000000>; ! z% N5 W9 N+ E2 t; p1 K brightness-levels = <0 4 8 16 32 64 128 255>;5 f3 x1 l$ m0 @* @/ [3 ]' H2 G0 M) J 7 w6 @5 S# t% j: g; e' b: Z9 F default-brightness-level = <6>; ! N) f8 r* D( @7 D) @! B" g status = "okay"; , Y( p1 }# k# H! r& H ^+ h };3 l: N# P5 p" R$ P * q3 K; e3 A3 o1 d 3.LTDC设备节点 由于前面章节已经对LTDC做了讲解,并且已经增加了LTDC的设备节点,本节只需在原有基础上增加DSI对应的数据通道即可。: R& k$ r( G5 V 5 C5 w. n& B7 N9 E2 ] <dc { 1 a9 H- x$ u& x; @/ x status = "okay";' s( s/ M2 k# K4 J5 B) M! b. C! E # F |: S* L1 R port { #address-cells = <1>; #size-cells = <0>; ltdc_ep1_out: endpoint@1 {5 b. i @' @; X' ^ 2 l5 T* s @' | reg = <1>; remote-endpoint = <&dsi_in>; 3 x6 g$ K4 X- o; T& I; c };7 b- C2 Z( ^" D$ \ % j+ }( L% l5 _: _2 m5 g };: w) m8 t( O" o8 h- L& [ 6 c( g( s) x4 k6 o }; 4.Panel设备树节点: x$ ~. ~4 c5 W 0 I" Y" a* M; S9 d- ?1 ^9 ^ 结合参考文档及内核中STM32MP157其他设备树文件,Panel设备树节点为:5 A; f; A) ]" V panel: panel@0 { compatible = "sitronix,st7701";4 v# q7 L$ k9 r6 F* R+ x# @ ' ^ D/ S9 G# s1 Y: f; L6 E reg = <0>;; V. X$ \* A: X3 C" c/ o reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>; , t: P% e* V$ U* m5 p power-supply = <&v3v3>; status = "okay";5 X/ x0 d& ~4 \ port { panel_in: endpoint { ' A$ B% K; \: G4 N- z6 e% r3 i$ P _ remote-endpoint = <&dsi_out>; };$ h. i/ Q1 N- Y * o$ @; J& O8 g( L9 s3 P }; };( y; I# i( r% m( S& A) E ' U! @5 e% d0 d2 s 5.DSI设备树节点; r! u+ J, J6 z6 S/ B% R7 W % v7 j" L9 g1 E+ E! D 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见: arch/arm/boot/dts/stm32mp157.dtsi 8 Z. P ~' ~1 n! B; _ stm32mp157中dsi定义如下: 9 E7 i/ U7 `1 R% Y9 F( R7 r' { dsi: dsi@5a000000 { compatible = "st,stm32-dsi"; reg = <0x5a000000 0x800>; phy-dsi-supply = <®18>;1 U, ^% f1 y' \ clocks = <&rcc DSI_K>, <&scmi0_clk CK_SCMI0_HSE>, <&rcc DSI_PX>;5 W7 |# Q0 v- h6 l- D- W% ]) A 9 x, n. o% T9 w6 A0 H9 @ clock-names = "pclk", "ref", "px_clk";& |! Y2 J/ |2 l% S5 Q- |# v4 H; @ . s4 m( H% i0 _5 u; Z resets = <&rcc DSI_R>; - N+ O9 `+ y1 l reset-names = "apb"; 6 ]% o: B/ l1 b; o1 Q0 i status = "disabled"; + v. Q) i1 }- f3 `8 y! k };# ^9 `! n D" M. v + V* `/ T! v; L 上述代码只对dsi做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。补齐后内容如下: &dsi {9 ~3 S6 M" q( U( r9 `/ v$ y #address-cells = <1>;$ f- ^* h' N, Z2 y6 j; j; ]. @& X #size-cells = <0>;& O; [. j5 ~4 B- x I8 f0 d& ?* I ; e9 E! H, m# g9 L+ v6 i status = "okay";7 _ X) B/ U% E2 g1 z) f ports { 2 R8 B) T4 I2 K #address-cells = <1>; 0 C) o/ P0 p8 z% U #size-cells = <0>;+ z- s4 P/ F7 T1 E port@0 { % N( V/ |9 v6 k5 j9 U reg = <0>;; o- F4 u: S7 y: p) \9 [1 @ 2 G( ]0 A2 ?: j# }. M! z dsi_in: endpoint {: [+ W$ G! J3 o$ f6 U; x 8 o6 H1 S# a" J/ H& O, E remote-endpoint = <<dc_ep1_out>; 6 H7 m) n; T, U/ K2 ]/ ] };- l$ V- e0 ^8 O" }# r };4 s1 Y) b: J! Y3 a) g3 w* w port@1 {4 q [7 w# T# p3 ] : x! ^8 P7 W# W7 y, j; K reg = <1>;5 V6 ^4 h6 {: c ! Y7 d% ^9 }. E9 w# E# Y9 J dsi_out: endpoint { 3 x; J/ d( E! R% W' g7 l remote-endpoint = <&dsi_panel_in>;; Y e+ c+ j3 q' L9 Z$ L* v" F1 L [ };6 t3 o% P& d% L ] c _$ s/ U# m };4 @8 ^3 C" c; ~; ^ V/ U, @* a8 } }; % r5 X2 V! i% A1 u5 a8 Q panel_dsi: panel-dsi@0 { - }, Z3 A( n, T compatible = "sitronix,st7701"; / v) g* x& G+ ~; @' Q: M3 w3 u reg = <0>;/ g1 H8 j( s# W1 ]. u5 \: H* M reset-gpios = <&gpiog 9 GPIO_ACTIVE_LOW>; backlight = <&panel_backlight>;( B1 a5 ]1 \7 o: s$ v& @4 H0 {# Q7 h power-supply = <&v3v3>;( N3 E- ^ V1 ] " o& ~1 l7 U' ? status = "okay"; port { dsi_panel_in: endpoint {% ~: Z. [9 g$ k5 r! \ 0 o( O. K5 [/ K3 @4 Z remote-endpoint = <&dsi_out>;. z l9 P' w) _9 _ $ E3 U$ s; o3 l0 H }; ) p- y6 h5 m: O% @2 h+ N. q };& _# Q0 w9 N I# T };! h* O5 j$ X0 _: T9 Q+ C1 w4 { };$ {3 o5 m$ |( q4 K , K+ Q' q' K: o% S$ Y, D, m 2.实验目的3 e( _, \7 U. p0 t* r6 l5 V; | 熟悉基于Linux操作系统下的MIPI-LCD设备驱动移植配置过程。 3.实验平台. d/ p# Z2 N+ J Y2 ?3 Q 华清远见开发环境,FS-MP1A平台;( E! r3 c* B, z0 K$ f1 s) ?" B5 W 4.实验步骤 1.导入交叉编译工具链 linux@ubuntu source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi; p$ s1 e* O8 R4 T$ P$ O 2.添加MIPI-LCD驱动0 O- E" I1 d; @! S, f' r4 G" F FS-MP1A配套MIPI屏幕主控芯片是st7701,内核中并没有提供其的驱动,所以需要移植st7701的驱动 将下的panel-sitronix-st7701.c复制到内核源码下的drivers/gpu/drm/panel/目录下。) x1 T! q9 g- a" S# K 5 l' l/ Y; x" [) a" e0 n. r; Q linux@ubuntu $> cp panel-sitronix-st7701.c drivers/gpu/drm/panel/ ! G: L$ C/ ^' T9 m; u 3.添加pwm2内容$ b& J3 Q3 F, }9 Y K 修改stm32mp15xx-fsmp1x.dtsi,在stm32mp15xx-fsmp1x.dtsi文件末尾添加如下内容:% T3 Q4 }' T. D1 D4 I) N, G) r0 C 5 |( p, ^/ b" C &timers2 { 0 I. {+ R, ?; s, j2 n /* spare dmas for other usage */ 8 [1 ?& ^/ S" \9 c) X# i) X /delete-property/dmas;7 ~) c% y& E) ?& e6 l! @. i * v/ s- o' U$ @4 E& t /delete-property/dma-names;" K2 c& X3 F% t( o3 q& a status = "okay"; pwm2: pwm { pinctrl-0 = <&pwm2_pins_b>; pinctrl-1 = <&pwm2_sleep_pins_b>; pinctrl-names = "default", "sleep"; q* O8 I' a) j/ h5 N #pwm-cells = <2>;& f7 `3 U, |3 d# e 9 s) Z! C6 G! s6 b. Q4 y7 e status = "okay";& o: e& d$ r' a$ e1 N }; # I; n T9 {9 R/ N+ ?2 ] timer@2 {8 c& D: |$ O1 i; o1 Z8 z status = "disabled";5 R. U6 ]& u9 U) [' V ( |" E1 j: q6 w& `/ S }; };) ~0 n2 q0 k" ^ &pinctrl { & y* K# s9 q4 H8 P4 v4 C pwm2_pins_b: pwm2-0 { pins {4 K* s! P2 _9 C! _7 ? pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */$ k, \5 D" B0 R3 [# ?3 l% A bias-pull-down; drive-push-pull; 5 R) _4 w/ x; {, c slew-rate = <0>; }; }; pwm2_sleep_pins_b: pwm1-sleep-0 {" _5 _2 ~# k/ r) ]5 k9 k3 s / N( q( m8 x- D: a) s" F pins { - i' A1 @' v+ P9 p0 a pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */ }; 9 I& B5 _6 K8 t1 Y! W1 k' o }; |0 N3 y9 d8 z: V2 Y- P }; 4.添加背光内容 修改stm32mp15xx-fsmp1x.dtsi,在根节点中添加如下内容:+ } f" B M% d3 C7 c* p ! Y$ L8 m3 [, }) c8 E panel_backlight: panel-backlight { compatible = "pwm-backlight"; pwms = <&pwm2 0 5000000>;* d! e) H# Y8 H- t X1 l# D 8 Z! U& f: p6 g' ]) I6 S brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <6>; status = "okay";. O; F$ J1 q# p) i, H( n & n: ?' l3 B4 ^! l };1 g A9 D; R5 `9 W2 B* ]# | : r% n. w2 j- c8 x) s2 F 5.增加设备树文件$ \! }5 o7 |' \8 ~% p+ G. M E 由于MIPI LCD并非FS-MP1A必须配置,本节增加一个设备树文件,对应增加了屏幕的设备。1 r9 B8 v$ H" L. b# Y+ q; l* z : A( ^0 w" K3 g0 r 在内核的arch/arm/boot/dts目录下新建文件stm32mp157a-fsmp1a-mipi050.dts文件并添加如下内容: #include "stm32mp157a-fsmp1a.dts"; V4 [# }" E- W& B! t# j; ^3 o+ ] 8 D9 `- ^8 w9 N3 [( X* s" r / { model = "HQYJ STM32MP157 FSMP1A MIPI Discovery Board";+ Y& N3 O. `- U3 m# w) x) C* K* Y compatible = "st,stm32mp157a-dk1", "st,stm32mp157"; " ?' y% x# v8 [3 O, D };% F* h. N! R7 G( A/ O- \4 U' A 由于增加了新的设备树文件需修改arch/arm/boot/dts/Makefile,在文件中增加新的条目,红色字体部分为增加内容 ) {. D e8 e$ }7 D" v- T0 n8 X dtb-$(CONFIG_ARCH_STM32) += \ % a( l, ~6 M! T! |' L# q- R …..9 t D- t' x: V7 x* [ stm32mp157a-dk1.dtb \ stm32mp157a-fsmp1a.dtb \ stm32mp157a-fsmp1a-mipi050.dtb \5 s; s3 R; l9 t/ E7 l* Y ; z! a! ] g# H. P& y stm32mp157d-dk1.dtb \ 6.添加ltdc内容1 S2 C6 p) q2 W, s; {5 ? 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容: 9 J6 j% \% l4 H/ N <dc {* j, S: P7 V* o: e" k 9 `0 f6 f) k; z( Q: c- K status = "okay"; 1 }0 _8 J2 A$ D" \ port { / E2 E9 U2 h& U/ s( o7 x #address-cells = <1>; % v! a. S7 G: w6 \ #size-cells = <0>;7 I2 s$ t3 F/ r. t / {) s3 ~% k5 J# K ltdc_ep1_out: endpoint@1 { reg = <1>;& Y$ F7 y+ X* L0 [: z+ r2 U# T, p, | + k7 |, a+ U9 s/ \6 s4 \ remote-endpoint = <&dsi_in>;! j& {, C6 Q7 i 6 e: A) o6 b* C }; : k* E7 w# U3 k }; # X" L$ |' Y0 A* t6 Q! H };. ^1 {9 R) C* _" `. z" U+ E 7.添加dts内容 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容: &dsi { 5 N: I8 s4 D7 P: h) o0 _ #address-cells = <1>; #size-cells = <0>;+ D. }7 t" J% _7 x4 n7 o U1 R1 t status = "okay";4 _! f# E2 Z! O7 H/ x! U; j# V ports { #address-cells = <1>;" \% Z4 i! }: z8 q" Q 1 Q) p" V8 Y6 q: q! d0 ^$ @; a #size-cells = <0>; 5 y4 F0 j$ ^0 L5 t port@0 {4 v+ W* `' T& ^1 p& [ reg = <0>;* w) H+ Q, S1 A4 C0 Z( e6 L dsi_in: endpoint { % M5 m' R; b$ k& h( M remote-endpoint = <<dc_ep1_out>; };! Q; _' l: }" l1 }; m$ K }; 8 Q, B9 u3 j0 v; n; d' L port@1 {; u& w- g6 N1 @5 D [0 T J' ~+ O4 B6 Z4 h reg = <1>; dsi_out: endpoint { 7 D; F7 W, B, w; }% K remote-endpoint = <&dsi_panel_in>;& G% \& d4 X- t$ x2 e7 N };! A$ l; V# ~& N0 ~ 5 Y: U/ g% k% G: ?. C };% H, A. d. x- I/ f' ~" }7 \: q + R. P& e0 t/ a };! k8 G0 G+ G+ V panel_dsi: panel-dsi@0 {- O3 a' W$ x M% J0 m 9 l' X) V7 k$ j: B compatible = "sitronix,st7701"; N1 z; y3 @, e" u: I reg = <0>;5 m ]! r \! ^: s- t reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>;& z; l. o" c7 @$ A$ t , M9 ?9 J3 d7 v) |5 d C power-supply = <&v3v3>; u& h5 c0 m! R3 w: l status = "okay"; port { dsi_panel_in: endpoint { ) q6 f3 S- a/ Y: o! y" b2 l% y remote-endpoint = <&dsi_out>; }; }; }; 3 e0 J+ w* E) l+ Q6 J( l* G7 s: X5 N }; M, C& @6 g1 \0 r1 P, j! \ " @- K( Y( a; Z2 x/ s: ?/ H# r' E 8.配置内核' U: u: a; j1 H7 {$ p1 W 配置内核支持st7701,并列出主要选项,如下:5 Q3 B9 }7 W& \7 B% b5 f9 l linux@ubuntu make menuconfig1 z6 A- W4 S- ]Device Drivers --->: \- p1 L f. X$ l0 T" u. H Graphics support --->9 u/ \0 V+ g; w3 N6 q 8 q+ _ o4 F- {- M( [8 Q; \% j <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->; n, Y4 ]# i: | <*> DRM Support for STMicroelectronics SoC Series1 ]" ~' }, u- `4 {& p2 J 2 n1 A3 r0 G& Y( C" z <*> STMicroelectronics specific extensions for Synopsys MIPI DSI* O$ d% S9 t4 x' J/ y% l ( K* L4 e4 [% {, G% W Display Panels ---> 2 n# h* D/ R6 F& K, ~$ q# ^ <*> Sitronix ST7701 panel driver. y4 s6 v5 Q8 e. [2 ~2 X' A0 r6 j% _ ) Z6 ~* v% y; i5 G- }' Q7 l1 K Backlight & LCD device support --->- L3 c9 Z- _3 t) U7 I. a ( O0 b: o6 Q, {+ t- {: Z' n% s <*> Generic PWM based Backlight Driver7 H T3 Y6 u d 9 q2 u+ ^8 g: F. X! j <*> Generic GPIO based Backlight Driver8 b- o0 g9 _6 I3 G2 Z, e 9.增加启动项8 `' B' n; d6 l/ @ @ 在虚拟机/tftpboot /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17末尾添加 ' {2 W* }* s6 Z. I, w LABEL stm32mp157a-fsmp1a-mipi KERNEL /uImage FDT /stm32mp157a-fsmp1a-mipi050.dtb APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200- T; [, D& W& A+ R: U" U ; [; J4 P) C$ A/ {( {4 \ 10.编译内核及设备树 linux@ubuntu make -j4 uImage dtbs LOADADDR=0xC2000040重启测试 将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,设备连接HDMI显示器,重启设备后查看/sys/class/drm会多出HMID的信息,同时显示器会有显示。 ———————————————— 版权声明:华清远见IT开放实验室 - G4 M, T% N, k' |1 N, O |
STM32MP157双A核Linux + 自研RTOS双系统镜像免费下载
扩展STM32微处理器,实现高性价比、低功耗和灵活性能
STM32MP1 自举程序编程:USB DFU/USART 协议全解析
兔哥心中的ST中文论坛
我心中的ST中文论坛
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
深度拆解 STM32MP1 Boot 链路
STM32串口自动识别波特率的原理
STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决
STM32--STM32 微控制器详解
微信公众号
手机版