
1.实验原理 DSI(Display Serial Interface),是有MIPI联盟定义的一组通信协议的一部分,MIPI DSI主机控制器是一个数字核心,实现MIPI DSI规范中定义的所有协议功能。它提供了系统和MIPI D_PHY中间的接口,允许用户和符合DSI的显示器进行通信。STM32MP157A系列芯片集成MIPI DSI主机控制器。 + O+ [; `, ^' H% S/ M8 [) H$ K5 ~ MIPI®DSI主机包括内部连接到LTDC的专用视频接口以及一个通用的APB接口,可用于向显示器传输信息。 ![]() ' g+ \( q* ~8 \) A N FS-MP1A提供两组LCD显示接口,分别是RGB和MIPI接口,本节介绍如何在Linux中完成MIPI LCD的支持。 ![]() ; T0 Y1 ^1 P3 i* H" T& Z: ~* 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的支持。/ z! f7 _/ [4 m + \1 w) Y! i( s, a3 S+ e5 H* ` DSI_D0P、DSI_D0N、DSI_D1P、DSI_D1N、DSI_CKP、DSI_CKN是DSI-MIPI的信号线,DSI_TE未使用,DSI_RST是LCD屏复位信号LCD_PWM是背光控制信号。 . T" i6 q/ e! f7 U& a. i0 `* n MIPI LCD接口管脚对应关系:2 I& L8 i+ v% U" U ![]() + J: L) [: U; c7 K7 n# f2 k ![]() ![]() / B; Z# w! ~4 ~% |7 i2 @ ![]() ![]() $ x. D; T' y3 E$ r% @ 1.PWM设备节点6 k" B+ `* C* J( y* g& c 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见: arch/arm/boot/dts/stm32mp151.dtsi 8 [6 Y; |0 I6 x+ ^( c3 u stm32mp151中timers2定义如下: timers2: timer@40000000 { #address-cells = <1>; 5 E# d5 ]: [6 u: _ #size-cells = <0>;2 Z* e" v2 Y/ T compatible = "st,stm32-timers";! `( G u6 g# k8 @ ' K' L: ]2 M! M$ {1 E reg = <0x40000000 0x400>; clocks = <&rcc TIM2_K>; 3 }$ t$ c$ m: d5 |7 u9 Z3 j clock-names = "int";1 N+ J2 c8 i# O$ Y! X4 U% Z2 c H) B W' J/ ~$ \5 A7 ^ dmas = <&dmamux1 18 0x400 0x80000001>, <&dmamux1 19 0x400 0x80000001>,+ b; r6 `+ L3 l$ v( z3 s8 O 0 a6 q. W- C2 x0 K <&dmamux1 20 0x400 0x80000001>, # c& M/ d- s, x# s& H _ <&dmamux1 21 0x400 0x80000001>, <&dmamux1 22 0x400 0x80000001>; dma-names = "ch1", "ch2", "ch3", "ch4", "up"; status = "disabled"; pwm { compatible = "st,stm32-pwm";* D# t# q$ S. z4 s* g; G #pwm-cells = <3>; status = "disabled";2 Q$ v, g3 T- q0 j };3 f Y$ F& V" F( t timer@1 {* L8 h( B, Z# C% Z6 D9 K compatible = "st,stm32h7-timer-trigger";7 N& |, u7 P2 d* Z$ h reg = <1>;; W/ a; v! p, G) z: v( a h' j, @: \. l) R" ?; } status = "disabled"; };4 I- q; d- u& P$ | R counter { 9 z" m: G# v% A" A9 s compatible = "st,stm32-timer-counter"; status = "disabled";; B" e, O; d& p1 x5 { . `8 I. {: m: @% r- r$ a. P };9 Z4 g1 X: Z' `; @- E2 c 1 z3 J: X, \* n$ K2 @. l6 ` };# r: X# J2 n; Q: ~6 b0 L * F, [+ B m% T+ z. v 上述代码只对timers5做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。0 R0 ]( E+ w# F% V# B 7 T9 P& u9 q% m: R0 \4 p" r8 I 参考文档或stm32mp15xx-dkx.dtsi对于i2c设备节点的描述,增加timers内容如下: &timers2 {" I; w1 ^& A. u8 i( u& U3 d /* spare dmas for other usage */, U" C" `: m2 w" \5 H/ t1 u F0 K /delete-property/dmas; /delete-property/dma-names;+ q; e4 g+ V5 x+ f2 n status = "okay"; pwm2: pwm { " J: y( c+ z; h; y6 @2 `+ Y: ]+ @ pinctrl-0 = <&pwm2_pins_b>;9 k6 D; v# C$ B) {( q" ?: ] pinctrl-1 = <&pwm2_sleep_pins_b>; pinctrl-names = "default", "sleep"; #pwm-cells = <2>;7 D# C' z* E3 h; c status = "okay";2 l, Q( J/ S [1 O2 h6 |+ U$ ~ }; ; u) X- u! b' y( } timer@2 { 2 W S( p7 N- L6 H status = "disabled"; };# Q* G% J# u( _ ( A; ^, v$ x$ L, H8 s4 q };4 C: N$ k8 _9 H' c/ r # O& O d. D4 X8 Y; ?2 C! B stm32mp15-pinctrl.dtsi对于pwm2的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容: 4 F6 h7 Q9 n+ A- F9 @6 y+ w7 x pwm2_pins_b: pwm2-0 { 2 q; o Z* F- q, x* C2 y: x* o pins { ~1 g k5 _; _2 p; r pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */ + M7 ] n+ }. r9 G a% { bias-pull-down;) e' b7 y/ T( l3 | drive-push-pull;* q9 q3 E. o4 y: ?5 j0 F4 G slew-rate = <0>; y8 `$ Y% ` \" [9 y7 k }; }; pwm2_sleep_pins_b: pwm1-sleep-0 { , ?. u6 G" Z6 b/ F: M3 G) n pins {0 G0 i* \. I: w) l pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */ };9 v1 E0 z) f( f8 T D- b5 c( n - [' t! U( {& E" j, Z% I }; ; l: ~9 s1 ]5 o" W9 w; x 2.背光设备节点 FS-MP1A背光可以通过GPIO驱动也可通过PWM2的通道1驱动,可以对比参考文档或内核中其他设备树关于背光的定义。 " x8 F. W/ C6 m' N) v b GPIO驱动背光节点内容如下: - C% t0 J- i5 U! `! W panel_backlight: panel-backlight {% A4 k+ t7 O7 ]1 n% c! P2 e& Z compatible = "gpio-backlight"; $ R* s: G" [2 o% A gpios = <&gpiod 13 GPIO_ACTIVE_LOW>; 7 ?# S v* p/ O default-on;$ u, r, w7 j4 L 6 k8 l2 _6 o+ v; w: c4 l0 q! } status = "okay";! O9 Y3 l; B, [: L; J+ | };- {. {4 K- L8 d & D% ]5 J) ?2 ^% k$ z PWM驱动背光节点内容如下:, p0 S9 J7 t) e6 P' n5 U9 w s) b 8 T" d' _3 \" p0 f/ s panel_backlight: panel-backlight { ! F" O8 u* H; w; t0 Q+ R/ g1 T compatible = "pwm-backlight"; pwms = <&pwm2 0 5000000>;9 ^" w0 O$ V0 \* q# j( w4 f/ N brightness-levels = <0 4 8 16 32 64 128 255>;% ]/ x6 y/ Z0 M6 S* L( O . j. P& R* L; @; L; F default-brightness-level = <6>;! g7 z$ c; O* ~- ` 6 @: T4 k. C( t* g status = "okay";2 i+ h* x! I8 d$ r4 k3 j };+ y( H2 S( @2 Y# n1 K) b7 V: f : H: h" P; B! G 3.LTDC设备节点7 W! I' ]' ?6 W3 E0 ` , @, x# y; B y) s d3 t 由于前面章节已经对LTDC做了讲解,并且已经增加了LTDC的设备节点,本节只需在原有基础上增加DSI对应的数据通道即可。0 \: M" V3 i* g6 I, \ . g% z% c9 i3 ]( @% l7 g <dc { status = "okay"; port { ( `* H: m( ]$ U* n9 K) o* J7 t4 G #address-cells = <1>; #size-cells = <0>;1 F2 M- X- _9 q- a 9 S0 ?0 D+ n, g) q" S9 f- n* d3 o ltdc_ep1_out: endpoint@1 {$ y: S2 S9 z; q4 g) q7 Q, x 7 N% J! W# ]! N* Z$ M8 K reg = <1>;# u- K/ ]3 s% t. j% C) Z0 F ) T2 [7 @- Y. _$ w0 N8 @5 l remote-endpoint = <&dsi_in>;" h# n2 t$ ~& a( \ }; . i3 {/ o, ~4 M' l }; };& N# ~( \8 }, F 4.Panel设备树节点* H# {9 X5 u% Q/ D- E7 h7 y 结合参考文档及内核中STM32MP157其他设备树文件,Panel设备树节点为:! [: Z4 l, N9 O3 w/ w# W; K panel: panel@0 {% b) z2 J1 M, q8 [' L. r- Q . _; U5 j3 M0 Z7 k# x1 ]7 H3 V compatible = "sitronix,st7701";7 H5 B+ u4 F; F( ?- v 6 {5 N: K. g# D reg = <0>; " [0 {% Q: ~& E- w$ G3 ]3 ?4 ] reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>;5 a) K0 O3 O- i: k7 Z power-supply = <&v3v3>; 4 z$ S. e/ s$ p: X; F status = "okay"; port {( D/ N+ e. w/ `" d" u9 Y panel_in: endpoint { ( P$ ?6 y: x- h0 c remote-endpoint = <&dsi_out>; }; 4 Z; ^8 E" U5 T/ D# w" J }; };. \- q( [. {( ?- U/ Y( \$ x* P 5.DSI设备树节点. {3 Y9 u) j" F a1 [ 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:3 x, U- Y K/ K% Y1 j) [ arch/arm/boot/dts/stm32mp157.dtsi0 r% g* k) @* F, A. u% F3 o' ?2 o2 h 4 W" C9 ~ X* B7 b% `* l stm32mp157中dsi定义如下:% M2 ^- V: b8 Q9 p& B7 o+ [ 2 Q9 o- ~; @6 i% C dsi: dsi@5a000000 {9 B' `: Q5 d6 C' F( j: b, Z compatible = "st,stm32-dsi"; reg = <0x5a000000 0x800>; ( P# \$ [) u2 m# p! M5 r' R phy-dsi-supply = <®18>;2 [- R# R) }& S! |# U2 ` clocks = <&rcc DSI_K>, <&scmi0_clk CK_SCMI0_HSE>, <&rcc DSI_PX>;4 F6 c. h6 P1 j. R5 ?7 a% L clock-names = "pclk", "ref", "px_clk";) x" |7 Y: b9 U8 T' [% w- N4 G resets = <&rcc DSI_R>; 4 R3 ` n) g4 [/ o5 ^ reset-names = "apb"; 1 U' n) P) g/ ~% g, R0 p status = "disabled"; };. q$ p( m% Y5 G. }. i 上述代码只对dsi做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。补齐后内容如下: &dsi {% ]2 p; C2 ^1 l& }# m. f @, B , j, C$ I- f9 m$ e2 p #address-cells = <1>;1 c. p- s7 C! V2 @ #size-cells = <0>; status = "okay"; ports {5 |- ~, Y+ Z9 j #address-cells = <1>; 3 E4 o7 u7 C# j7 m' z# \. h/ s) { #size-cells = <0>;* t" d) p7 `0 Z3 @# p L% B7 s 1 q1 U( |& D7 Q' X) d port@0 {( @8 C5 k, C6 s8 |: m3 f; t reg = <0>;) l3 r$ b& m# {! ?. D6 H dsi_in: endpoint {4 u6 K; q5 B4 J9 R; J, e % a. H) B" U8 k* } remote-endpoint = <<dc_ep1_out>;, [. s- y4 y- n/ |$ k5 `* s ) I3 D* w' Y8 e* o+ k9 V7 e }; # V; }& V& v t) r }; port@1 { reg = <1>;/ P+ p; u3 T. C6 v$ }+ a$ F 2 V4 B9 `& m2 C; @& F" b" L0 t- a% g dsi_out: endpoint { remote-endpoint = <&dsi_panel_in>; }; };+ G9 Q& t$ G$ f9 u# J+ P) @: f };% j" n' J" {; V panel_dsi: panel-dsi@0 { compatible = "sitronix,st7701"; reg = <0>; reset-gpios = <&gpiog 9 GPIO_ACTIVE_LOW>; : e) k4 V; s* R2 n5 d4 V. @ backlight = <&panel_backlight>; 4 p& B* e' G3 s: N } power-supply = <&v3v3>; 8 n$ J, M, M' g2 ]$ N& A- H status = "okay"; port {; ]7 h' w! I1 [- N: p! m5 R dsi_panel_in: endpoint { % B9 {8 f# S$ j; T6 e) P remote-endpoint = <&dsi_out>; : O, k. m( i u7 U! o- {. |6 f }; : P2 r. ^9 F! z! a, E };# h$ a2 ? k% _! y, f" b };8 l+ k+ Q a& Y. Y + z. m" I2 _! s& k };! V- z' M4 _8 G i- }) {3 i7 M " A. O; o/ r( u: _$ Y! [: P 2.实验目的' o& M2 }. c( v5 a* P 熟悉基于Linux操作系统下的MIPI-LCD设备驱动移植配置过程。( P' j' b- q. e! d- M+ b2 W 3.实验平台 华清远见开发环境,FS-MP1A平台;8 Z2 s' @* F: d0 `- f. A- `( M 4.实验步骤# I. p+ g' {4 G7 a; H7 ` 1.导入交叉编译工具链 linux@ubuntu ![]() - A+ p' N. I: @- Y4 M u 2.添加MIPI-LCD驱动 FS-MP1A配套MIPI屏幕主控芯片是st7701,内核中并没有提供其的驱动,所以需要移植st7701的驱动" ?: M* y8 M7 |8 P* v - d$ b6 n+ \% N1 a: g" n 将下的panel-sitronix-st7701.c复制到内核源码下的drivers/gpu/drm/panel/目录下。; Q# Z2 @& K1 Z: P linux@ubuntu $> cp panel-sitronix-st7701.c drivers/gpu/drm/panel/1 m! Z0 n. m) i T " l2 M& m7 j- y) U5 V9 @ 3.添加pwm2内容& R$ `" d6 S! L* @4 B' P 修改stm32mp15xx-fsmp1x.dtsi,在stm32mp15xx-fsmp1x.dtsi文件末尾添加如下内容: ; q% a# e1 E* O T &timers2 { 4 P$ g {: s' Y. m" e /* spare dmas for other usage */" s) K9 d& |/ {1 P( } /delete-property/dmas;4 m$ f' H, Y9 _# o /delete-property/dma-names;, g' O/ v( R$ _ {# v( @3 x# e+ [ status = "okay";2 T' z0 w* `6 B# U( G : L/ e* D' n+ ~: K pwm2: pwm { pinctrl-0 = <&pwm2_pins_b>; ( Y' e- t& }6 d8 I pinctrl-1 = <&pwm2_sleep_pins_b>;4 w% i. V: Q2 r4 o1 j4 T " ]. k N8 q; C, F# b- N5 p pinctrl-names = "default", "sleep"; #pwm-cells = <2>;0 [3 d. i; Y R; L ' R- f8 c: I2 k! W7 b status = "okay"; 9 B: G* w: j& o# q/ C- L4 S };% e: E1 \% u7 h" L9 }2 u timer@2 {) f" Y. ]( u7 M8 z. o 1 N. ?& F/ p* B* `5 d* s status = "disabled";4 \4 b* h/ `0 Q! x, { };& H8 A& S9 C* \$ ^$ h& \ }; &pinctrl {& K7 m5 y6 i' c+ Z( O* K pwm2_pins_b: pwm2-0 { 0 J1 R; T5 k. \1 F P" u S6 y" m' x1 u% _ pins { " G, r* m% G8 \/ V pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */7 ?# K K5 j5 h! z' Q0 d7 i / V5 N" u" v. R; |9 I$ I! v bias-pull-down;+ ~. T, n7 j4 K7 F 5 s6 @5 [ R, k2 O/ Z3 ] drive-push-pull; slew-rate = <0>; 4 X. d" c0 G3 E* k! c };- _9 G8 o5 ?; W8 z2 y }; pwm2_sleep_pins_b: pwm1-sleep-0 { pins {, @# C$ i) T, T7 p" B4 `& Y 8 m9 E0 _- z" [+ k9 R pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */* h: a; a g; ]! f 3 N6 s, U$ W2 e- w }; }; 8 F/ ?- x; N# w0 | }; 4.添加背光内容 修改stm32mp15xx-fsmp1x.dtsi,在根节点中添加如下内容:+ d5 [9 V# u2 S+ u 9 z& z( W0 [2 T! s& P7 [9 G panel_backlight: panel-backlight { # {/ u2 h0 U; a2 n% m compatible = "pwm-backlight";9 X* ?! E: @$ I pwms = <&pwm2 0 5000000>;( n: X5 }3 r9 n l: P+ z. p 7 {$ i3 E. Q9 V% L0 L, r: b% i" k* f brightness-levels = <0 4 8 16 32 64 128 255>;: w2 e0 w4 ~4 ]3 r0 S/ `, n * K/ I; D+ A+ S2 k# m default-brightness-level = <6>; ; c1 ]/ m, k; x. P$ m- W status = "okay"; }; $ B+ ^ ^( K9 O z5 d) m6 y2 F6 S 5.增加设备树文件3 F1 J7 @7 T, _- \* \ 由于MIPI LCD并非FS-MP1A必须配置,本节增加一个设备树文件,对应增加了屏幕的设备。 在内核的arch/arm/boot/dts目录下新建文件stm32mp157a-fsmp1a-mipi050.dts文件并添加如下内容:$ e- e% B# V5 Q: A o6 z' l * x" G1 }1 `; L" C% {0 o$ E0 f #include "stm32mp157a-fsmp1a.dts" / { : M- p) s- g3 f; P4 F' K model = "HQYJ STM32MP157 FSMP1A MIPI Discovery Board"; compatible = "st,stm32mp157a-dk1", "st,stm32mp157"; , m* b* B' U+ v! E7 f4 v };/ q- j6 b/ y B0 E" T+ T1 ^6 z 由于增加了新的设备树文件需修改arch/arm/boot/dts/Makefile,在文件中增加新的条目,红色字体部分为增加内容1 d; B- t8 |3 A dtb-$(CONFIG_ARCH_STM32) += \/ I5 F# v$ ?; ]% o( ]3 r4 S( B …..7 r( j8 Q7 ^7 q$ K 4 g3 v' h; j/ S, W- \% d stm32mp157a-dk1.dtb \4 f9 g5 U- A0 Q7 y9 v# y0 G: w * a! ?* }/ a: ^% C$ c, k5 B stm32mp157a-fsmp1a.dtb \$ L7 k) ^ v0 T , X: t: b" _. Z- f7 A6 v stm32mp157a-fsmp1a-mipi050.dtb \ stm32mp157d-dk1.dtb \ 6.添加ltdc内容- {3 \* n1 o# e ?+ M 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容:$ y8 _; e' L6 a( E0 ~- `: ~% [ <dc { 0 }' L" D2 q1 G$ G9 B) j status = "okay";0 c0 p' ?/ B/ M1 M) u port {# O9 D; k4 c ~1 L7 p #address-cells = <1>;: \$ S) i8 V! |- M/ b9 h #size-cells = <0>;2 ]2 H- B! g) y. l( F) R ( U4 w: f$ ^" ?9 W% e1 R) T ltdc_ep1_out: endpoint@1 {/ P7 a& a( v; N4 C. m0 { reg = <1>; % a* w7 q+ E0 r remote-endpoint = <&dsi_in>;+ N X8 |5 O: x1 T; k0 x - f7 }9 h7 S7 d };! l3 k! f( x' i0 _5 R$ _ }; }; 1 z8 V, L3 z6 K* ] 7.添加dts内容 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容: &dsi { $ N+ H" W- X0 e #address-cells = <1>; #size-cells = <0>;3 V& f- ?- w/ Z2 Y2 t j) Z . q8 s% ^# @; s1 C' w4 N" o status = "okay";& \: r* j. @- [: }; ` ports {+ }9 N/ R- s* O: b #address-cells = <1>;% N/ Q( \: V# U7 {# E: A: p$ ^9 H1 X/ y #size-cells = <0>;" X) K; }4 m! n5 l# m: @ 0 f. ]' `, K$ s; O/ `4 E port@0 {9 c8 k: A2 n5 ]$ I 2 O/ ]7 ]' m. L; S4 u reg = <0>;" y- R% L* _9 J: ~ dsi_in: endpoint { remote-endpoint = <<dc_ep1_out>;# r+ Z1 @, \# T5 Z) x1 w 4 U9 |1 I2 B* r9 T" W7 T };5 F2 |4 W {( S% q v2 ?5 o 9 V/ G! [, P# F };6 Q9 ]# D8 }: d+ B' r port@1 { * N% x& t# I. q reg = <1>; , |9 e8 N9 U( G$ T7 K( k- A7 n dsi_out: endpoint {2 d: G8 B9 n9 a3 J . ^0 [( {3 Q7 b4 l, v% b remote-endpoint = <&dsi_panel_in>; ; Q6 ?+ `: }$ T0 H% R: m" ] };; `" u# k6 N+ N/ |" v$ X6 v5 _ : o I# S5 M; V. S) | }; }; panel_dsi: panel-dsi@0 { compatible = "sitronix,st7701"; reg = <0>;& [; e- e& P4 u+ U) T( ]" [, h3 C R, f 5 H: z$ Q4 f! x3 ?% x. _3 Z reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>;% b; T, k; t/ K ' E0 P) d! y2 ], F power-supply = <&v3v3>;+ |; M0 @0 k* U: F# E6 t # j( M; t) I6 I; t$ U3 f- S status = "okay"; u$ L9 F6 i! Z8 e. ~$ ^+ w! O ' V+ w9 r+ v u, z, @& s: k6 @4 R port {" s Q1 q1 b+ y+ W/ [1 j8 d( L* M 4 o2 p/ O J$ B4 O2 d& E dsi_panel_in: endpoint { remote-endpoint = <&dsi_out>;% g0 i* P( w4 t/ \4 k2 c }; }; " } _" Q& S; n };4 P6 l3 f% I0 x6 n o) J " o& C+ _' x. T5 N };& s$ h! B- U( A: { 8 s, {9 E( e, r, }, Y: {& u 8.配置内核: @, R, {' |3 N1 x5 N 配置内核支持st7701,并列出主要选项,如下:9 T7 i8 N$ V6 I3 t linux@ubuntu ![]() Device Drivers --->8 O0 C2 u/ U9 f% a) w: G+ r Graphics support --->+ B3 e8 m. L% Z+ F <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> <*> DRM Support for STMicroelectronics SoC Series <*> STMicroelectronics specific extensions for Synopsys MIPI DSI1 P* A+ a. b2 I & Q! n& t. [8 ~) X& M Display Panels ---> 1 E# q/ }) i4 m/ l, x4 { N- |4 G <*> Sitronix ST7701 panel driver+ h) f& H- a$ J/ `- g* O2 u . x' S1 V3 h4 A |$ {( _ P Backlight & LCD device support ---> ! w% s# O( ?4 ~" s+ K* s% A <*> Generic PWM based Backlight Driver; s/ H' d7 ]$ o$ m% u1 p7 A5 w 0 f; {$ K& g7 j <*> Generic GPIO based Backlight Driver0 G2 }% F1 K' ]3 }2 [* X. P 9.增加启动项% S8 K/ f4 ~# E; O6 w) ~( Y 在虚拟机/tftpboot /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17末尾添加; Q s- x2 ^1 B% p LABEL stm32mp157a-fsmp1a-mipi9 ]0 E. [7 @- W* n KERNEL /uImage! T% _% B7 C c FDT /stm32mp157a-fsmp1a-mipi050.dtb APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200( q9 I0 g7 _' _, b3 ]4 ?- p( G8 X; M ( |2 A) [' I7 \0 k% K& ~3 n 10.编译内核及设备树 linux@ubuntu ![]() 重启测试 将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,设备连接HDMI显示器,重启设备后查看/sys/class/drm会多出HMID的信息,同时显示器会有显示。3 H9 x2 d. h* k' D2 T F ———————————————— 版权声明:华清远见IT开放实验室 + k, O# r4 Z; v" {* P 4 q2 `, M; e, j |
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得