1.实验原理 DSI(Display Serial Interface),是有MIPI联盟定义的一组通信协议的一部分,MIPI DSI主机控制器是一个数字核心,实现MIPI DSI规范中定义的所有协议功能。它提供了系统和MIPI D_PHY中间的接口,允许用户和符合DSI的显示器进行通信。STM32MP157A系列芯片集成MIPI DSI主机控制器。 2 t' u3 k. Q0 V MIPI®DSI主机包括内部连接到LTDC的专用视频接口以及一个通用的APB接口,可用于向显示器传输信息。 5 i7 \2 i$ c, Z3 U FS-MP1A提供两组LCD显示接口,分别是RGB和MIPI接口,本节介绍如何在Linux中完成MIPI LCD的支持。) } M) K1 f1 P/ `4 l . O: H1 s6 F U- J) R. f 上图为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的支持。$ E2 _ j; [; e: p ) e4 C$ c4 g/ `8 Z- I DSI_D0P、DSI_D0N、DSI_D1P、DSI_D1N、DSI_CKP、DSI_CKN是DSI-MIPI的信号线,DSI_TE未使用,DSI_RST是LCD屏复位信号LCD_PWM是背光控制信号。 6 z7 `0 v3 z) ~, K3 y1 O1 J- i MIPI LCD接口管脚对应关系:4 A: g+ R; H E8 b! T 9 Z" t. ]7 Y) I# x & k v5 N8 H2 q # i$ e$ i( C4 e( [. E; k 5 L8 B1 Z( V/ {5 h* _& ~ 1.PWM设备节点 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:' k( ^+ P' H4 p 7 T* k5 D9 D, x# R' U+ p R arch/arm/boot/dts/stm32mp151.dtsi/ q! Q; k" S2 K/ ?3 @ stm32mp151中timers2定义如下:' `& c" b2 ?) m# R7 L3 } timers2: timer@40000000 {! a, e; i2 _( ~, I" B* c 2 ^ z, r/ }& Y& c$ U$ S( u0 |) M* q #address-cells = <1>; * E6 A9 \9 Q$ x: F) G+ ~ #size-cells = <0>;4 f/ U$ c8 F/ s* t1 m compatible = "st,stm32-timers";. Z0 h, M8 ~+ I' x reg = <0x40000000 0x400>;: U* `) h O+ w* D* Q clocks = <&rcc TIM2_K>;% r, a6 }4 @; n$ S; k$ z* b z& U' G , s: B$ m& l8 f/ F8 j% K5 M' y5 {. u4 { clock-names = "int"; . j( O2 m- v/ x" f. r% q dmas = <&dmamux1 18 0x400 0x80000001>, <&dmamux1 19 0x400 0x80000001>,* i- ?( Q/ z$ P/ s' B & c+ N# S% ~! i4 I! N/ K <&dmamux1 20 0x400 0x80000001>, 4 x& b5 w/ p9 X+ R7 a4 Y <&dmamux1 21 0x400 0x80000001>, 3 I/ f% N( W; S- h2 t) y9 s <&dmamux1 22 0x400 0x80000001>;0 U# u. _' Z5 E8 \5 z * \# \9 C% w- |( r' P9 D dma-names = "ch1", "ch2", "ch3", "ch4", "up";' s* G e+ W! \; Y" S 0 `2 {: E0 @: o5 V) R9 w status = "disabled"; pwm {' H8 P* `7 Z. I1 r# \9 u5 m" A9 @ " Z: k4 a- q5 M0 I compatible = "st,stm32-pwm";: `. h, M1 s3 R; f& i6 } #pwm-cells = <3>; status = "disabled"; / y" Y1 B) h6 m+ s4 h; n b };5 _. |0 f3 b* Z+ W) [+ L 3 |" r, f% B0 V: n v timer@1 { compatible = "st,stm32h7-timer-trigger";; I9 E9 k" m# `; ]5 G6 k5 H $ U: K) m2 A, y, Q' y0 Y reg = <1>; status = "disabled"; ' ~7 `! C! f' ~+ Q: E; T3 O }; + y) A y! k! }2 m& W s1 i counter { compatible = "st,stm32-timer-counter"; b% m" _, Z5 b) u, }4 L status = "disabled";& h7 j3 f6 H' y. o # g1 [7 j8 D+ v' h+ s( T! e) b }; 6 c8 H: D: ]* C }; 上述代码只对timers5做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。5 K4 \: ]8 y8 s 参考文档或stm32mp15xx-dkx.dtsi对于i2c设备节点的描述,增加timers内容如下: &timers2 { * j/ P0 B9 E5 o0 {! Q0 W j /* spare dmas for other usage */6 x. P! v; [3 _2 ?) N* W# T) S$ H 8 @- c# {+ Q( R9 V* ] f0 P) x /delete-property/dmas;9 f7 u+ {) N2 s/ b% r( V $ v. u0 F$ B: E- |! Y" r7 l /delete-property/dma-names; 0 n5 w& O' p% B7 L# L5 J @ status = "okay";2 N! }8 }" C5 J7 ` a) V, Y6 S' `$ r1 I $ K; N+ ]$ d0 @9 _8 J5 b: R pwm2: pwm { / w7 ]& I0 T% F/ @$ A pinctrl-0 = <&pwm2_pins_b>; ' l2 U2 ?3 P2 p: k! R pinctrl-1 = <&pwm2_sleep_pins_b>; ) W. P! d. M, T1 | pinctrl-names = "default", "sleep"; #pwm-cells = <2>; $ v' x8 E: ^, w status = "okay"; + ~ z5 E0 F, h# M8 | }; & E) k# H# a; B/ ? _0 I timer@2 {/ r! J9 G3 A3 m- M$ F , u2 B) a, d% ] d4 U status = "disabled"; , F, \4 Z8 l0 B0 R }; };/ [; I- c# e; O1 ] * f3 T. q( l- {2 H stm32mp15-pinctrl.dtsi对于pwm2的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容: % P; L/ F. ~0 i pwm2_pins_b: pwm2-0 {$ j' K/ o0 M* t0 |+ T' K' z. M; s pins {! A* S+ y, r& {# y; u $ ^5 Z1 [+ V" o! S; \ u pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */0 r, S( A( p1 ^* { bias-pull-down;8 y% M5 f2 \9 i; M drive-push-pull;- t' m/ ~- f$ {* {$ f slew-rate = <0>; ; v6 j% a; C* W2 f& G8 M( z };) ~; ^+ R& l7 R) d7 E- M }; pwm2_sleep_pins_b: pwm1-sleep-0 {! R5 u* O. C6 @5 p6 h& E, ~ pins {2 J5 [8 ]3 k9 m6 n7 B% X% {: g 4 Y O9 L- M4 N# S- Q pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */ & l" w0 t0 {" A/ x3 ]0 N f. |# @ };6 D+ J% O: }7 z3 d9 w4 k+ g };. N. u' K3 g2 V1 h0 q; N( j a 2.背光设备节点 3 e9 ~$ H. |- c8 X( k FS-MP1A背光可以通过GPIO驱动也可通过PWM2的通道1驱动,可以对比参考文档或内核中其他设备树关于背光的定义。 % f7 J `# c5 e( t GPIO驱动背光节点内容如下:: w! p# p- r' ]- N5 X9 f# V ) o: o% D* l" C/ C8 p. A; u& d4 f panel_backlight: panel-backlight {9 ]0 o4 {0 {9 V' @# w compatible = "gpio-backlight"; gpios = <&gpiod 13 GPIO_ACTIVE_LOW>; default-on;8 c1 I% T0 O7 K% P6 c: V status = "okay"; ; B4 l3 k8 s6 }- s }; : ^: b2 k$ j( { PWM驱动背光节点内容如下: 7 U: n1 R0 F4 [, @9 i# `, M+ d panel_backlight: panel-backlight { compatible = "pwm-backlight"; + @% J0 L" O$ S% P pwms = <&pwm2 0 5000000>;" {% ^+ f( c, b3 s 2 V9 d" h, W1 o: B. h brightness-levels = <0 4 8 16 32 64 128 255>;: A Y6 D9 O' L% H6 S+ Q! \ default-brightness-level = <6>;( g: n, m4 i. e+ }; \7 V; w % O% g; }+ _& M1 L8 B4 s g/ u9 X status = "okay"; }; K4 }# s+ h, @ 0 x5 u# C" ^" n! h" c2 m0 A 3.LTDC设备节点 由于前面章节已经对LTDC做了讲解,并且已经增加了LTDC的设备节点,本节只需在原有基础上增加DSI对应的数据通道即可。* F3 G: Z- b/ x* [ <dc {7 B( p5 f/ h7 o) I! i4 B- G! ~ status = "okay"; port { + ~% p0 q8 R9 J0 k/ u #address-cells = <1>;* [" c& m4 G' I: c" ~( x #size-cells = <0>;, e$ j& p7 `/ U& P ; | N6 A, M/ B, `2 f+ | ltdc_ep1_out: endpoint@1 {) y6 C. @1 k& Y9 C1 M3 r# l reg = <1>;2 J; v" C0 L0 }- S' E5 h% e remote-endpoint = <&dsi_in>;) j$ ? i0 w4 ?! P8 i5 V& t ; v9 c8 k& n* i0 `) c };+ [3 `0 l" A. T }; };/ _, W! B! e) p9 i1 g' ]$ f" K 4.Panel设备树节点 结合参考文档及内核中STM32MP157其他设备树文件,Panel设备树节点为:: F. p2 v, C$ W) l 2 z: @& ?+ l' C$ J5 n: { panel: panel@0 {. U! O( m0 L3 W9 ]) w M compatible = "sitronix,st7701"; reg = <0>;" P4 b1 d5 `3 j . C6 `/ M" [. N+ T5 G, m0 Y. q reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>;; o2 _: p# e l j9 ` , a0 {. L0 \1 N0 e: ~ power-supply = <&v3v3>; status = "okay";% C0 f+ H, v* \. R5 | port { & w: C! k, Y0 g7 P: J- e; f; t panel_in: endpoint { Z9 e! K: o9 I. G8 @0 i4 c t# u remote-endpoint = <&dsi_out>; }; }; };' f! P; w7 o0 m$ v8 c% w! D7 r3 O + N/ Z8 b6 p: F3 q 5.DSI设备树节点1 A9 d4 j$ Z: A4 S9 ]$ D0 F) d 内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:$ P; K% W" x1 |/ q arch/arm/boot/dts/stm32mp157.dtsi $ s: Q, X. D- r. i1 O% E stm32mp157中dsi定义如下: dsi: dsi@5a000000 { compatible = "st,stm32-dsi";" l2 O# ~1 L; d8 S6 ? 6 G/ d j& l3 o0 t8 z reg = <0x5a000000 0x800>;) [4 K! r7 N# w* H. ^1 i# G( i 1 z$ j' C7 V9 X X phy-dsi-supply = <®18>; clocks = <&rcc DSI_K>, <&scmi0_clk CK_SCMI0_HSE>, <&rcc DSI_PX>;- x. G% K" z' M, w, k8 T6 F - Z/ _; H8 [ K clock-names = "pclk", "ref", "px_clk"; resets = <&rcc DSI_R>; reset-names = "apb"; status = "disabled";5 A. D5 H" l& [1 w- Q0 q };6 j8 I! O) U/ q3 G1 u# c% E 上述代码只对dsi做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。补齐后内容如下: * c: W9 O S9 M% {' q1 Q &dsi {8 \- u! S! f8 W" @) c( }& z0 F0 d d #address-cells = <1>;" Y3 |$ Q, C6 n/ W# N; W0 c 2 g4 _ W# G' `0 w2 s. {3 @ #size-cells = <0>;4 K C6 F! g) I% @3 { 8 R1 B Q! _5 R' K/ a status = "okay"; ports {0 N/ ?, o0 J$ }2 d ; U1 C8 g0 v& q3 B& s- n( `" m #address-cells = <1>;8 U1 v) e: g Q' d. W" e* Q1 } z #size-cells = <0>;1 }' z5 N J5 Z6 V; U6 I port@0 { 8 Z) h4 v" t# m; Y' b reg = <0>;/ R) G R9 b1 I; S dsi_in: endpoint { remote-endpoint = <<dc_ep1_out>; }; 7 z4 y4 Q4 x; O9 d$ h8 p0 ]% F }; $ Q( _# @8 ~( r j G- X: s4 H port@1 { Q e- ~8 K0 z9 v, U4 h2 i 0 e S8 p9 D7 C/ ? reg = <1>;9 D# r- X/ f2 l6 `: t& l + y {5 Z+ T8 h$ m; f1 | dsi_out: endpoint {* P- Z2 s U: T. i% D R" B . _. s+ D1 s4 x, v4 f remote-endpoint = <&dsi_panel_in>; };2 z6 s; [: x, R+ f7 H + E& |& Z5 n; C* w9 r };0 O B3 U1 V3 N% [ }; 2 [/ c, p0 g r; r9 ^ panel_dsi: panel-dsi@0 { compatible = "sitronix,st7701";2 m. ]3 f! e: n. u! t% ` {' c0 _8 F( k 0 q4 z% Z- g# Y- Y6 d reg = <0>;$ }, h. s' r; P 1 Y+ h J& `, U) ^! w/ X5 f, x reset-gpios = <&gpiog 9 GPIO_ACTIVE_LOW>; backlight = <&panel_backlight>;8 P7 C, e U1 I. P5 m power-supply = <&v3v3>; status = "okay"; port {8 m- Q8 h4 V! J- | dsi_panel_in: endpoint {' S7 C2 g, h' t7 w I remote-endpoint = <&dsi_out>; " s: w# ]- |6 {+ f4 T& C- d };( ?" M0 ]/ R0 \% N; u2 l* ? % I. |( R% j* l& v/ a }; I- _7 ]+ ~" \: x+ N3 D2 I }; };0 {' Y( h6 c9 D" y/ W X6 f 2.实验目的6 o2 K5 ] W+ r. K 熟悉基于Linux操作系统下的MIPI-LCD设备驱动移植配置过程。 ; n+ F- x: U7 |. b+ p2 c- E 3.实验平台" r3 W# y* a6 }7 P n: B 华清远见开发环境,FS-MP1A平台; 5 W) `) V" |/ |% `. m8 Y 4.实验步骤, p- T0 y! Y) q) y6 x8 ]& Q# r 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 2.添加MIPI-LCD驱动, }) f6 E7 h$ W7 j. v$ ?* v0 y o FS-MP1A配套MIPI屏幕主控芯片是st7701,内核中并没有提供其的驱动,所以需要移植st7701的驱动 将下的panel-sitronix-st7701.c复制到内核源码下的drivers/gpu/drm/panel/目录下。& U6 O7 F1 v* T/ q& N 8 b' @) q$ c8 ?+ ~0 V linux@ubuntu $> cp panel-sitronix-st7701.c drivers/gpu/drm/panel/ 3.添加pwm2内容 修改stm32mp15xx-fsmp1x.dtsi,在stm32mp15xx-fsmp1x.dtsi文件末尾添加如下内容:! ?8 a* I" P2 H6 ]* s ( S! F% Y5 Z `; U& x &timers2 {, H/ p8 q9 u- @4 e" B /* spare dmas for other usage */8 e8 B! h6 n7 Q0 d0 z: P4 |% y /delete-property/dmas;( `+ e8 r4 l9 l- J+ ?/ I. _* U5 u 4 h( @3 ?% s U+ r /delete-property/dma-names; 3 E6 c. e6 V) b B- M5 }# M status = "okay";' P' p& C' i/ i8 i, o6 A* H+ M $ g% h* i$ g% ]" @( W pwm2: pwm {- D3 D3 b3 n0 O. ^) S4 Z" _0 R ( P/ h- Y4 H/ q8 z5 ?$ e. \* n# @0 H, f pinctrl-0 = <&pwm2_pins_b>;" l2 ?' ^" y) k- R8 e E- ] % W, }8 M6 @- o5 M2 K/ n4 R pinctrl-1 = <&pwm2_sleep_pins_b>;& d# O. z. H3 z: E pinctrl-names = "default", "sleep";8 I6 x# e& I, {8 G ; j; L% O5 H9 S: h, |' f #pwm-cells = <2>;. r# T8 C7 v1 H status = "okay";8 R0 H1 {3 T9 q6 X, m . t1 l6 U* q0 b' I- g; K };6 |. w+ g P% d/ a 7 [% U/ @# m9 w; \* o# z0 ^ timer@2 { status = "disabled"; , H6 I; p$ C: b" C }; }; &pinctrl { 4 o1 ]: U% z8 A" V8 I6 }. k pwm2_pins_b: pwm2-0 {/ ~7 o0 A+ Y6 L' X9 ^7 M ! l( Z% |7 [" ^ pins { ) o1 _7 D2 b; I pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */ : I [+ {$ m l2 [ bias-pull-down; ! h/ C6 f( R% N' I drive-push-pull; u! X6 g6 E" o! y, u+ P! d slew-rate = <0>;1 ]; g# P: S, I- ^- n };7 d B' A! u, m; |& `- v# f \9 t7 e }; 3 Q+ x7 ?+ {3 U$ `- H, U$ Z pwm2_sleep_pins_b: pwm1-sleep-0 { 3 \+ ]/ d3 G: m, ~$ C! [ pins {: C3 U- `* I3 p pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */ + [; i6 e8 D4 V: L9 j! l }; 7 O5 k, o4 x1 t1 y }; / r' K+ z1 _. g2 _, H8 W1 f! H# M& E9 j: x };' `1 U; q9 ]$ ?' E( h& u J& E6 s$ q/ _3 |: F/ a+ A. j 4.添加背光内容: r( ^- P$ @. C! Q 修改stm32mp15xx-fsmp1x.dtsi,在根节点中添加如下内容:0 b9 b1 d, Y$ n3 G/ a6 T panel_backlight: panel-backlight { compatible = "pwm-backlight";) K5 A+ Y/ z# e8 `* s 4 }) `0 O4 I0 \0 B. G" n pwms = <&pwm2 0 5000000>;9 z5 [8 X4 } c' F T' o' N0 H& C( l brightness-levels = <0 4 8 16 32 64 128 255>;3 e) Y0 G* q8 l+ v- v0 u+ F default-brightness-level = <6>; - k$ P6 f) ~+ X" e status = "okay";* g! j. C+ X! {8 _1 C# f1 \' M5 E+ L };' g. K2 y% p7 D) X3 N 5.增加设备树文件- p; R9 e; M4 @% D5 u6 p5 a 由于MIPI LCD并非FS-MP1A必须配置,本节增加一个设备树文件,对应增加了屏幕的设备。- t: o$ a. D5 g : P# }* W1 b* a* b0 E 在内核的arch/arm/boot/dts目录下新建文件stm32mp157a-fsmp1a-mipi050.dts文件并添加如下内容: + X3 I! q% ~6 k4 g( O% E! h #include "stm32mp157a-fsmp1a.dts"6 M- y$ z% a# [ - H" ]" e0 g' K! `6 b- ]2 b / {! _ K9 Y7 `$ D4 T* H5 `# ?7 R/ L2 I " {/ e" y+ U3 p1 v model = "HQYJ STM32MP157 FSMP1A MIPI Discovery Board";6 L; C. U8 X& \ compatible = "st,stm32mp157a-dk1", "st,stm32mp157";- K6 \5 }) ~3 \% k( b6 c ! S/ _- F# s. N$ Q7 j }; ) y4 c8 b+ Y4 m9 ?' u) C) G0 Y 由于增加了新的设备树文件需修改arch/arm/boot/dts/Makefile,在文件中增加新的条目,红色字体部分为增加内容 9 P8 e2 a8 @; G* I dtb-$(CONFIG_ARCH_STM32) += \8 R, z# k* A4 k! u i7 O 1 q& v& f! j# G- b a; e …..* k- @3 Z \$ w stm32mp157a-dk1.dtb \ / k) l$ { k. R' P v: [ stm32mp157a-fsmp1a.dtb \ W/ q% B& z; U2 x i$ q0 v+ D8 B0 F2 x stm32mp157a-fsmp1a-mipi050.dtb \ + s0 N0 C* L/ u" h stm32mp157d-dk1.dtb \ 1 X( V7 d: x! i( ]' z" ? 6.添加ltdc内容! n* C' x% Z( c9 H) G7 x; M1 k1 y 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容: $ C6 ~5 m; e9 L <dc { status = "okay"; & F' ]6 r9 V e& e! Y: N2 \ port {% g. `! q. T+ X+ W* G p #address-cells = <1>; ' e; N* a$ z+ F' A( O# n. y1 W #size-cells = <0>; 8 c1 A3 r& ]1 D( h' h: \$ |+ S ltdc_ep1_out: endpoint@1 {3 Z7 r! p/ L8 `$ {) k* j ; B3 W* L1 }6 X* W. |/ Q reg = <1>; ' x' W" X1 I R* q remote-endpoint = <&dsi_in>; }; ) f: z. M- c7 H- V" O }; 0 n9 [; F- O3 q0 T8 j% N }; 1 R2 A8 M* u+ }8 _8 E 7.添加dts内容 修改stm32mp157a-fsmp1a-mipi050.dts,在文件末尾添加如下内容:% _* \- A0 L0 f9 q- s. ]5 h% u3 ^' C# L ; a7 q, r. {% @ &dsi {5 ~' n, E u/ h2 b1 s& r4 ~ #address-cells = <1>;8 F, @) `# ~* C" e x4 [$ N+ L" \+ p( J! m2 K #size-cells = <0>; status = "okay"; 0 r0 D$ e R5 x! |4 j4 }6 R$ `% ?- F ports { #address-cells = <1>;4 j* V+ v; d( Q / c P$ f. S9 U# j8 P \ #size-cells = <0>;& X7 x! Z% [: d. z& N ~9 z+ i 3 y K r7 M; }& L. d6 G port@0 { reg = <0>;# r9 j0 c) m. @7 m2 {6 I1 o 1 u6 \. \- R6 j- \0 o0 Z2 H dsi_in: endpoint {8 j ?& p- G3 E: |/ ^ remote-endpoint = <<dc_ep1_out>; }; }; port@1 {% H# ~0 ^$ e) u6 Z1 `# N) g 7 ~% |7 I% R& I u3 l' a reg = <1>;, B& Z7 O5 H' G0 m% |/ F# T e) p dsi_out: endpoint {/ }$ I. f2 h( t8 E remote-endpoint = <&dsi_panel_in>; 9 ^6 k/ X& C5 v& g/ T7 O: {# l- u }; }; , c* p/ \( z) S2 M7 H }; panel_dsi: panel-dsi@0 {7 ?* d8 \7 N1 n6 m3 G! G compatible = "sitronix,st7701";* z' @$ b3 G: v6 I9 }+ {. z/ I reg = <0>; 2 Y$ U6 Z* ~- D& Q1 ~: ? reset-gpios = <&gpiog 9 GPIO_ACTIVE_HIGH>; , H& R+ Q8 \; A/ ^1 ^8 w power-supply = <&v3v3>; " H6 ?/ l/ H; J status = "okay"; 7 q: q o2 Y% e4 |# Q1 R port { dsi_panel_in: endpoint {% j; L# J3 B+ ^, P ! x- N$ K+ }2 T remote-endpoint = <&dsi_out>; };% e- ]" i2 y* _- j. K' j };9 @) V5 F: V6 M2 [/ z }; 3 f; z8 _9 v" a3 Z3 x2 Q& [ }; 8.配置内核: {) `# Q" U7 p5 g 配置内核支持st7701,并列出主要选项,如下:5 b l8 _& J& @, f% s; n 6 S4 C8 F" I# e& [( H! o) l linux@ubuntu make menuconfig Device Drivers --->; b. ^" w; z Z' q. [2 [ Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> <*> DRM Support for STMicroelectronics SoC Series 6 I: f0 q$ V' j4 \4 k <*> STMicroelectronics specific extensions for Synopsys MIPI DSI & U% n4 A5 [; U1 n' ^: q. F Display Panels ---> ! y3 k; G: z" X4 U <*> Sitronix ST7701 panel driver) o9 b) E- E$ \5 V6 b* A& {4 r! l1 \ 7 ]% A4 x6 z3 ~$ ~+ ]1 a5 n( x Backlight & LCD device support --->4 a; [; Z. ]: z/ M$ r0 g; i <*> Generic PWM based Backlight Driver : W( R" j+ @9 \$ n1 {* X <*> Generic GPIO based Backlight Driver 9.增加启动项 在虚拟机/tftpboot /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17末尾添加" B' ~6 a5 V" b& ^ LABEL stm32mp157a-fsmp1a-mipi) k* o, O, D1 e& w. y. } KERNEL /uImage/ w* s% R9 F6 P1 ]3 E FDT /stm32mp157a-fsmp1a-mipi050.dtb& c$ L8 b; P( R9 `* k8 W APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200; H* P6 D _. V0 p; K! p. O 7 y$ n; V' Q& S 10.编译内核及设备树* C( E4 U# G* ^. E- [- b. F: A linux@ubuntu make -j4 uImage dtbs LOADADDR=0xC2000040 : k; Q' w, J2 |; W: \4 [0 L 重启测试0 {% b2 @- B3 f4 f 将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,设备连接HDMI显示器,重启设备后查看/sys/class/drm会多出HMID的信息,同时显示器会有显示。% a3 F- M: i3 h; }4 @; c ———————————————— 版权声明:华清远见IT开放实验室 : K. z; K: `& n % |& C2 ?$ R6 F( j: J1 e! C |
最新消息:意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS!意法半导体兑现了之前的承诺!
STM32MP135F-DK开发板评测-开箱亮屏
意法半导体扩展STM32Cube开发环境,简化单核STM32MP1裸机软件开发
1月18日有奖直播 | 如何在STM32MP13x上实现FOTA升级?
【STM32MP13x直播回顾】 直播答疑汇总
STM32MP135 开发平台介绍
使用STM32MP13: 如MCU般在Cortex-A核上裸 跑应用程序
米尔核心板加速基于STM32MP1的产品开发
STM32MP1充电桩全数字交互实现
STM32MP13 产品线 应用于工业和安全的高性价比MPU