
1.实验原理 DSI(Display Serial Interface),是有MIPI联盟定义的一组通信协议的一部分,MIPI DSI主机控制器是一个数字核心,实现MIPI DSI规范中定义的所有协议功能。它提供了系统和MIPI D_PHY中间的接口,允许用户和符合DSI的显示器进行通信。STM32MP157A系列芯片集成MIPI DSI主机控制器。 * e0 q4 ?2 M* R4 b. x MIPI®DSI主机包括内部连接到LTDC的专用视频接口以及一个通用的APB接口,可用于向显示器传输信息。 ![]() ! P6 z1 r5 \' M# W" l) W0 w FS-MP1A提供两组LCD显示接口,分别是RGB和MIPI接口,本节介绍如何在Linux中完成MIPI LCD的支持。 8 _) `2 C G5 T( z' x ![]() 上图为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的支持。8 r( ?4 k6 h, v2 d' W. W- | ) Z8 x3 A7 f# _/ u( l m DSI_D0P、DSI_D0N、DSI_D1P、DSI_D1N、DSI_CKP、DSI_CKN是DSI-MIPI的信号线,DSI_TE未使用,DSI_RST是LCD屏复位信号LCD_PWM是背光控制信号。* ]$ a( \; [/ {6 V4 U" w8 p( x, a- u MIPI LCD接口管脚对应关系:, O+ E% J* B3 q; y& \ $ z7 x' k4 H0 J7 p ![]() p7 A" h+ w3 S* v! U0 [9 h ![]() ![]() $ P6 M8 H9 c- @# ^9 m- b- }* z. d ![]() ![]() 1.PWM设备节点) A! J* T6 |+ _/ _6 X. w 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:& t1 _% D1 q9 H v% o* O ( m F. z; ^7 H% I arch/arm/boot/dts/stm32mp151.dtsi 5 r; B0 c+ \8 U9 J0 Z. l" g" b7 d stm32mp151中timers2定义如下: 0 u: B- t( w& ^/ H# F1 S. N% { timers2: timer@40000000 {6 \* c: L: a7 F4 M8 `6 J- W 0 `7 w3 c# T5 ?5 v1 q, m #address-cells = <1>;) \( V! d. \3 H* e8 K #size-cells = <0>; compatible = "st,stm32-timers"; reg = <0x40000000 0x400>;" w u: b9 K- s % h0 r& F2 h5 H6 ]& F/ T& d# d clocks = <&rcc TIM2_K>; # u# t( l# {8 _& V clock-names = "int";6 d7 |3 @+ x( ? dmas = <&dmamux1 18 0x400 0x80000001>,! |/ Q# I; s( u: R( W/ ` <&dmamux1 19 0x400 0x80000001>, <&dmamux1 20 0x400 0x80000001>,# q& d z _$ F( @: l! x" z6 R( T& Q 9 s6 Q* ^0 N2 B4 j4 s <&dmamux1 21 0x400 0x80000001>,1 P0 y9 s1 K( D2 w, h) } $ {) p$ J3 ^$ Y0 x <&dmamux1 22 0x400 0x80000001>;6 G' q' p$ K' e/ d7 E9 N 7 w' x/ P0 _) c( F dma-names = "ch1", "ch2", "ch3", "ch4", "up"; 6 D; m8 y& I0 |4 J9 H" D% D; V status = "disabled";" e5 r. [/ `9 k8 t# } pwm {/ @2 N0 C0 C6 `) u compatible = "st,stm32-pwm"; l" W5 X7 K( m* Q 8 X$ K5 q5 ]7 O1 C7 t #pwm-cells = <3>;2 X, b9 K e) n) Z3 w& L status = "disabled";+ J0 S+ |& ^5 l7 t( J1 }) F };6 q3 A' F7 h/ m' e timer@1 { compatible = "st,stm32h7-timer-trigger"; 5 d N( G; v! _" Z2 T' T4 r" X$ Y reg = <1>; + n# J1 x4 ]! Y- v status = "disabled"; }; counter { compatible = "st,stm32-timer-counter";4 _7 B6 T' a1 V$ e2 x ( K8 O+ [5 K, Y status = "disabled";5 J: }( v# i; J 5 H0 ^- }% P8 b5 m2 E };' @" b) t W$ ~/ b4 k5 d) ~1 m5 n- Q };, m4 }9 V: s p/ o 上述代码只对timers5做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。3 d5 p, V# M9 _% l2 s: Q ) q' w7 H; w* S: f: Z 参考文档或stm32mp15xx-dkx.dtsi对于i2c设备节点的描述,增加timers内容如下: : |; e+ T4 ?# S# ?! V# s+ S &timers2 {! l. |; q5 P# W, ]6 B0 ? ) d3 s6 _0 f" w9 o& C/ P) X/ @ /* spare dmas for other usage */! g2 \% ^" J0 i. m q! U7 B! a2 I& x- Y5 a /delete-property/dmas; /delete-property/dma-names; status = "okay"; 4 t3 P* C# \0 j7 d0 r- N) C pwm2: pwm {- z7 q; \! D3 M$ [0 Q! y : A2 i2 H6 Y8 a pinctrl-0 = <&pwm2_pins_b>;% z! i! d5 d/ L! _8 O: @6 v / R e4 i: Z% C pinctrl-1 = <&pwm2_sleep_pins_b>;0 G; }4 u3 {. h pinctrl-names = "default", "sleep";7 v* e$ g+ b0 z- |7 p 7 p; t) j4 u) u/ H #pwm-cells = <2>;0 V# B8 W5 l, g! ^) ] 6 N6 x" A# h" T/ E. @ status = "okay";" n: v8 x7 c: q. k9 G- ^3 o% R 4 f: r* e6 W7 c" {- v };3 e, X4 T; g& R. ?8 K timer@2 { status = "disabled";8 T4 q | b6 O( W };0 W7 Q+ d4 ^4 x0 W" Z U/ w4 ? }; stm32mp15-pinctrl.dtsi对于pwm2的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容: 0 p6 O' w$ i. F9 U* M2 S% _ pwm2_pins_b: pwm2-0 { 5 S8 N! i X( J( e" V) X pins { pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */ . i0 w+ E* w$ j* } bias-pull-down;& [- {6 ]$ r7 Z& W3 f6 u3 V drive-push-pull;1 r: H( ^9 d) \2 `8 h ( e P7 K8 x% n" k- Z slew-rate = <0>;# }8 L; a6 M: P/ ^9 ~ q ( [$ S! Z- U2 V4 c1 y };6 l* b# h, k$ }! Z: W9 I7 F+ P- J. B+ [ }; 4 h. b8 [/ P8 r& x( _% G pwm2_sleep_pins_b: pwm1-sleep-0 { % i( U e' h$ j- Q pins {; J+ O) T, d& ?3 }3 ` pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */& D( D7 X0 q. V ' L7 p8 c; t) ]0 U' z" d };0 f) @2 B: p2 e- r( L8 T6 } }; " D! H- e0 f$ C7 @7 v2 | 2.背光设备节点 1 p& `! q6 x m( X& M( K/ y, b0 e. ~ FS-MP1A背光可以通过GPIO驱动也可通过PWM2的通道1驱动,可以对比参考文档或内核中其他设备树关于背光的定义。7 [" p% x/ {8 F+ d2 X M - ]) f) [& A2 p! e+ f: L; _ GPIO驱动背光节点内容如下: panel_backlight: panel-backlight {6 |! s [. U1 s* T( _ 6 V6 _" j7 [. n' e; v' z compatible = "gpio-backlight"; . b! ?; ^! A7 z# p) a$ X/ B gpios = <&gpiod 13 GPIO_ACTIVE_LOW>; default-on;; x, X" e5 J4 G' L. n: B7 ?& P, R+ w# e $ n) p8 U# B+ ^$ ~9 ~ status = "okay"; }; - x# g" }( D4 k6 V4 p- j8 G3 @ PWM驱动背光节点内容如下:5 A+ o4 U* v } panel_backlight: panel-backlight { : p9 K0 d: o, \1 _0 i; y; N- \ compatible = "pwm-backlight";! L x6 a8 t# x; ]# v! F r pwms = <&pwm2 0 5000000>;& J% l; X! n& }. q 3 _5 C! p# ]% ?- i4 { brightness-levels = <0 4 8 16 32 64 128 255>; * @3 [3 K" d! R% X* ^ default-brightness-level = <6>;2 f- t' D/ j* L( q1 m# Z status = "okay"; d: b# m; C) z4 n% K0 N8 y+ ] ) l" j0 D& w$ h! n2 H ^/ U };& H0 N9 E" W$ s5 Z q , T9 Y4 h$ a o) _3 u 3.LTDC设备节点 由于前面章节已经对LTDC做了讲解,并且已经增加了LTDC的设备节点,本节只需在原有基础上增加DSI对应的数据通道即可。0 k4 S6 v' q6 P: M" n, w2 F* e ( l0 W( a8 H5 `4 A- K5 G <dc { status = "okay"; * ^1 z, N7 ^, W" @9 r5 E; ] port {; L9 y* o1 }! K+ A4 n% J* K G8 ~* ?- _8 h7 u; Z6 I #address-cells = <1>; #size-cells = <0>;+ M, S" p0 D' T) L( | ltdc_ep1_out: endpoint@1 { , l+ B5 o: `4 Y/ e* s; Y- c reg = <1>;$ J* v- p- s7 n4 O, C( u7 M" { 1 `: J8 y0 r6 m/ b v& D% s remote-endpoint = <&dsi_in>;; c" U6 k; q+ F1 t ; l3 I% H% d4 ~! K. z: v };; F9 G) H! Q4 {3 R& ~+ O' y; V: m / b) F }. |9 c" t* [. e }; ( J8 e9 t+ A( G8 f I/ B }; 4.Panel设备树节点$ A5 t5 E$ }+ [ 6 Z w+ D- h2 J 结合参考文档及内核中STM32MP157其他设备树文件,Panel设备树节点为: panel: panel@0 {- \+ u7 Q2 l% Z: P R7 g$ C compatible = "sitronix,st7701"; $ @; `5 x; J8 _9 p- v reg = <0>;# {# S9 t3 l3 {/ Z* t: u) q reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>;% I" Q( G: U7 r. A8 A power-supply = <&v3v3>; status = "okay"; # @& P9 e, i8 F) g, B( V. o8 K* f port {) p' V5 v+ r( g. K" N D + C4 F2 I! H+ F: j. l panel_in: endpoint { ( V* }1 ~0 o3 p1 {3 S remote-endpoint = <&dsi_out>; };2 d( I! F( j/ v }; 5 W4 x' j. H. e' D7 p" M }; 5.DSI设备树节点 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:+ L! k% c. l6 \$ J+ q& ` arch/arm/boot/dts/stm32mp157.dtsi * P4 F5 e2 A: T0 Q6 R) a3 L" o# m stm32mp157中dsi定义如下: dsi: dsi@5a000000 {) u; g& h2 E8 ~ compatible = "st,stm32-dsi"; 7 P$ B" {! i$ s S2 J+ {& N: N; ^ reg = <0x5a000000 0x800>;4 Z: S% N( i, }8 } & Q0 y; B' A. S( u+ T! `5 @ phy-dsi-supply = <®18>;4 G2 e% p+ I e/ r+ k: y . f% e- O) A% D8 x y/ v clocks = <&rcc DSI_K>, <&scmi0_clk CK_SCMI0_HSE>, <&rcc DSI_PX>; ) v/ d( u% k4 Z+ B% e clock-names = "pclk", "ref", "px_clk";0 ]4 [( |5 k! v5 p $ t- u) u, O' i6 w, `% B! L resets = <&rcc DSI_R>; x, ]8 H' Z6 C4 G \+ u! V& ^+ Z+ S: a7 Q reset-names = "apb"; 2 Y C2 }' Y. ~" k5 p" |) Z status = "disabled"; }; 1 i$ Z% A, n7 B4 p/ z 上述代码只对dsi做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。补齐后内容如下:$ n* {6 [1 N) i4 _6 l' t5 R4 d1 ^& \% D 3 S" D- G; w! t) o5 n3 f3 c3 D &dsi { 0 \7 ^* O+ t9 m+ X) ? #address-cells = <1>; ; y3 n' }$ v v1 n, n { #size-cells = <0>;/ h% V$ W3 g& X2 [4 N) I status = "okay";/ f$ {9 Y, _: h) G 0 h. [5 J4 G x, R0 T0 M( _ ports {! W* s; D* e& C# K9 U4 H% J #address-cells = <1>;9 ]) n1 u0 b- e( j# T . R+ U( u ^% S4 u# u1 E, D #size-cells = <0>; " x) Y; h$ _, }6 v port@0 { $ |) J- R: X; |& P! \2 I2 w3 L, h reg = <0>; dsi_in: endpoint {2 e, y/ R$ r {7 @6 y0 ^* C 3 ^8 b" v* Y; Q% ~' }+ K remote-endpoint = <<dc_ep1_out>; };+ G, E- I0 P6 A2 X8 g" t };- C2 N# J* U x+ H port@1 { - ~/ Q/ a4 K$ ?( e ^: Z' O f8 u reg = <1>; dsi_out: endpoint {1 O+ N2 j; c. F# v1 k- A' g 6 \6 V. [+ s3 \3 g$ d( E0 V9 l remote-endpoint = <&dsi_panel_in>; }; 6 I( x9 v% D* \! T };9 Y: d( w) o7 F% |8 n };' }. h+ s4 x2 O3 w' @& i/ f ! M) \/ ]6 I# e; r" ^ panel_dsi: panel-dsi@0 {" u/ S# _ H: | X ) t$ l4 |0 g" x, Y) n) y" ?( ]3 Q& j( q compatible = "sitronix,st7701";* a. j. q9 T e6 t + ?! T% k2 ?. V+ B9 @8 L reg = <0>; reset-gpios = <&gpiog 9 GPIO_ACTIVE_LOW>; backlight = <&panel_backlight>; . @/ L# ?' T. q; | power-supply = <&v3v3>; 3 x( T! }2 p0 r+ b status = "okay";: H" O! V& C& L8 o" e# f port {) @0 p4 S9 W& y0 v9 J: a dsi_panel_in: endpoint { remote-endpoint = <&dsi_out>; 6 y9 Q `6 a( \4 c }; }; }; ! {- g6 e) D# I1 D };1 a; Q3 Y: d( C; [9 M5 I 2.实验目的 熟悉基于Linux操作系统下的MIPI-LCD设备驱动移植配置过程。 3.实验平台2 }; w3 o' Y# C 华清远见开发环境,FS-MP1A平台; 8 ?; c: s- Q) I4 ^ 4.实验步骤 1.导入交叉编译工具链* f8 T3 k& m7 ] linux@ubuntu ![]() & t. E8 C0 j. u$ C- z) o 2.添加MIPI-LCD驱动 FS-MP1A配套MIPI屏幕主控芯片是st7701,内核中并没有提供其的驱动,所以需要移植st7701的驱动 将下的panel-sitronix-st7701.c复制到内核源码下的drivers/gpu/drm/panel/目录下。 ! s/ ?! R+ m3 j4 i- f6 | linux@ubuntu $> cp panel-sitronix-st7701.c drivers/gpu/drm/panel/. W% b) [; y& Y 3.添加pwm2内容& H J9 z! s! g4 v8 O7 \ 修改stm32mp15xx-fsmp1x.dtsi,在stm32mp15xx-fsmp1x.dtsi文件末尾添加如下内容:! w% w5 r6 k+ | F4 w0 S &timers2 {: o4 V8 k: x4 A- s # s! E8 }6 d* ^$ z V! ? /* spare dmas for other usage */ % f ] A& S' D9 c8 H% Y /delete-property/dmas; /delete-property/dma-names;5 L) A, t. x4 D8 ^) B status = "okay";4 f6 C' H Y4 U 7 | @) Y( v* R3 v pwm2: pwm { pinctrl-0 = <&pwm2_pins_b>; . f: Q. ?4 F# F pinctrl-1 = <&pwm2_sleep_pins_b>;! `0 M4 `$ s# | ! q, n. A7 C8 M pinctrl-names = "default", "sleep"; #pwm-cells = <2>;1 O$ g) o! o! c# B; Q % _4 x. @* z/ p1 [ status = "okay"; z; N" Q. S! p/ _ }; timer@2 {# ~7 d, X+ T! L0 z' M4 Y( G V 7 v9 i' p. Z- U1 A status = "disabled"; };( m9 [, u1 V3 l7 e0 Q! Z/ p5 M5 N };& G, S6 X5 O5 V( p* \2 O- ]4 t &pinctrl { pwm2_pins_b: pwm2-0 { pins { pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */ 2 x, y) ^, {5 _& b6 b; d$ W bias-pull-down;: v/ g" F) m+ }* G$ [8 J) n- _ ( }" L+ E3 C! e' W" }2 h! l drive-push-pull; slew-rate = <0>;, K: m- K, {) `+ Y. X5 ^# s+ | }; 6 P" M/ j0 p) u" p };$ J5 H4 b8 |* f; v3 Q pwm2_sleep_pins_b: pwm1-sleep-0 {; Q6 ?2 C M/ x& _' u2 ]1 t- l7 r * `- N( p3 E- }7 C0 s) j pins { pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */4 ]7 a k" T/ U! |( \0 F" d };; l# v9 B4 l9 {6 w5 w( K };6 d0 U; B/ K0 P2 ^; {. i: `5 R9 S5 C : y" [ ~1 g; o9 b, K& A4 v }; & H/ r& d$ ^3 F# l' m4 t4 W 4.添加背光内容 修改stm32mp15xx-fsmp1x.dtsi,在根节点中添加如下内容: ( d2 D# @% u% C7 z1 K panel_backlight: panel-backlight {0 a8 x: Z/ a8 o& q: m, @ compatible = "pwm-backlight";+ e& D, ]* v" p% E8 c/ t% t pwms = <&pwm2 0 5000000>;, d6 j9 H! w- g- f7 O9 g8 ~) A brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <6>; 8 N; V" T, l- G0 ^" _; u status = "okay";8 k! f2 O: ], e q 6 F( m/ z0 O$ Z! [ };3 R' e" x8 t) c8 r0 J5 u5 o 5.增加设备树文件 由于MIPI LCD并非FS-MP1A必须配置,本节增加一个设备树文件,对应增加了屏幕的设备。 在内核的arch/arm/boot/dts目录下新建文件stm32mp157a-fsmp1a-mipi050.dts文件并添加如下内容: + Z$ ?3 w, F% q& R& W+ | #include "stm32mp157a-fsmp1a.dts", D" g! b+ P0 \ / { model = "HQYJ STM32MP157 FSMP1A MIPI Discovery Board"; ! t; r& o3 u1 o2 V5 Z j( U; d0 |+ V compatible = "st,stm32mp157a-dk1", "st,stm32mp157";# G( T4 H8 I. y& W: ^+ K };( b" H/ \" l1 D9 D' M* |: ]% ^ 4 \# \" \! @& L; u$ F 由于增加了新的设备树文件需修改arch/arm/boot/dts/Makefile,在文件中增加新的条目,红色字体部分为增加内容7 j& i2 z7 R& L' U9 d# U: L/ F dtb-$(CONFIG_ARCH_STM32) += \0 m" c6 i0 O; Y6 t / L9 z$ `0 o2 x6 q/ n3 P ….. stm32mp157a-dk1.dtb \ $ w Z" y, Y2 u1 J' i stm32mp157a-fsmp1a.dtb \ " Z/ V) P# V; q- J2 a stm32mp157a-fsmp1a-mipi050.dtb \5 P) L5 p' z2 [- r% ~8 E" X0 c - f" m) \/ e& y/ ?+ g) k stm32mp157d-dk1.dtb \ 9 P) Y) @' N( ^! |8 H& `+ q1 l8 u. L 6.添加ltdc内容0 T7 C5 b7 b0 i$ A 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容:) b) Z2 `3 A1 _8 z0 V! L$ D / Q" B7 I3 N9 P( D0 P$ T5 Y* q <dc {& Q6 B2 V4 T7 ?1 ^# d L8 D) n; l: U status = "okay"; $ |2 @( Y+ x* |: b2 b, x. |( C port { / G- l1 \" i4 F: e( k ~ #address-cells = <1>; / \% ?. b7 y2 c #size-cells = <0>;0 J! x" c$ d0 x' s2 I3 z ltdc_ep1_out: endpoint@1 {) m2 f' o ]7 S2 B/ ^2 } U; t: S& R1 D( q7 O8 k reg = <1>;6 L. G+ q# H& S$ H 3 r5 }7 v- Y6 j6 ~: m remote-endpoint = <&dsi_in>; B9 u3 f m; ?- E d' N# R A 0 C4 X: `3 ]& ^# t v9 s }; 0 H, w; |: c5 t5 v1 p- c3 L" |# x }; };- T+ I3 C1 b0 ^2 l- p 5 d3 E9 c8 C' |2 K1 B1 v r 7.添加dts内容, C/ N4 M( z. h! b/ B* J' \ 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容:! \1 Q. D* }1 V. F. p; E. d5 U &dsi { #address-cells = <1>; * u1 l) c7 w5 N #size-cells = <0>;0 n- P! v+ j/ J% n4 i status = "okay"; ports { #address-cells = <1>; #size-cells = <0>;; ^, P% p6 m% q2 T; } port@0 {. R% ]7 q: j; U! g! s9 q + D1 `( j6 y; O6 Q& D. ^ reg = <0>; dsi_in: endpoint {8 B. ^; k6 }- I8 |3 `% G' c 5 B" W2 s4 n) w) R. L6 h remote-endpoint = <<dc_ep1_out>; };- u+ p- d3 d- P! |* P 2 L8 @: O% D7 i) ]: g };1 w/ i( t$ {0 ?# _1 l3 s3 c port@1 {9 u( m R$ P0 }$ [3 F4 E9 p2 t reg = <1>;2 i4 q$ w7 ~$ T0 x% d4 z$ @ 0 g: j& }+ Z) l4 l+ y2 d& ~ dsi_out: endpoint {( H; B2 I$ s% ~) j1 w$ }! L# } 0 V9 |" J& r* A, X d1 i* C remote-endpoint = <&dsi_panel_in>; 0 w k' H0 S3 M };) a1 _5 q8 f7 S& C, \ d2 e+ @ ! e. R) P9 Z. p% d }; };$ O w: v: g+ e( J+ F, G' M, S4 a ! T2 o3 M# t& u }$ K- n: V panel_dsi: panel-dsi@0 { ! h) b( f" S) \5 G compatible = "sitronix,st7701";- v6 \" Z' Q. x/ S, X 5 I6 V1 e8 Z2 z" S2 r reg = <0>;; u! v/ u `- x( g . P' g7 f, M7 b reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>; power-supply = <&v3v3>;/ L( O% a$ p0 ^( c5 c* W9 d 9 r% X! {$ k. j1 b: o status = "okay"; + Y) ^8 r+ p* k% A* g7 I port {& I4 c f1 z1 s1 @5 h* D; g / a0 }' B; Y: r6 K! {4 G G0 i) o dsi_panel_in: endpoint {. h, P9 B! k2 W5 V! W2 ^2 j+ J. f2 T 1 K3 j T! ?; M* n" w9 ?6 S. {7 p remote-endpoint = <&dsi_out>; }; };7 U0 y) O+ Y+ z! ~8 t) A' S8 d1 d3 | 5 p" |( e; G }- Q }; / _, `$ r0 J$ [$ j. V9 s/ h }; 1 G+ u& m1 \$ I( |+ p 8.配置内核 配置内核支持st7701,并列出主要选项,如下: linux@ubuntu ![]() 3 `& _, M6 ?: E( u! j* t6 }( P5 \ Device Drivers --->6 T9 G3 @. ]9 I 5 R; P2 J$ v h6 d Graphics support --->6 C7 @. l z" V2 A$ W <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->: G1 C6 j" h; l9 i <*> DRM Support for STMicroelectronics SoC Series <*> STMicroelectronics specific extensions for Synopsys MIPI DSI Display Panels --->3 i# h* Z1 y. g2 X , v$ k$ [# D' t. c: H# q <*> Sitronix ST7701 panel driver Backlight & LCD device support ---> : L5 T; V5 F% ]. X7 S( a* n' X <*> Generic PWM based Backlight Driver 7 G: ]% S3 P% J* d7 S' Z/ Q <*> Generic GPIO based Backlight Driver' ~( p/ l3 l' X7 U6 _$ j3 n4 C0 m 9.增加启动项& m: u e7 x, w) Q( I9 C7 H 在虚拟机/tftpboot /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17末尾添加7 k, ?$ N k* A4 X+ @9 S8 u" H 6 P( w$ q& h u; R4 ?% g LABEL stm32mp157a-fsmp1a-mipi% W$ l6 F V+ r8 ?; W" @ KERNEL /uImage FDT /stm32mp157a-fsmp1a-mipi050.dtb3 J; R4 Z; |0 k S4 C& W3 T APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,1152000 [& s/ s" P8 L& K! Z0 z . E3 Y# ~$ q( w 10.编译内核及设备树/ ?6 y6 y5 C/ q- ^* u6 J5 v: \ linux@ubuntu ![]() 重启测试 将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,设备连接HDMI显示器,重启设备后查看/sys/class/drm会多出HMID的信息,同时显示器会有显示。8 f0 ^- P8 w2 g+ X; m! { ———————————————— 版权声明:华清远见IT开放实验室/ E7 z) V- ~. d& `" { " p6 z1 Q, m: V3 a3 z |
基于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安全启动》 课程学习心得