你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP157 Linux系统移植开发篇18:Linux内核蓝牙驱动移植

[复制链接]
STMCU小助手 发布时间:2022-9-29 18:26
1.实验原理9 A" s7 v2 _" k" I
FS-MP1A开发板蓝牙采用AP6236,WIFI蓝牙二合一芯片。蓝牙部分通过usart3与SoC进行数据交互。
4 T6 {) l: h2 ?- o& l9 Z
0 M- v- ~* I4 A ebc558764a13a00117bd9f68846646fc.jpg ; p/ |4 k3 S. y: a+ E, J
  P* F. e7 {% w1 E$ E- I
蓝牙部分移需要配置usart3的设备树与AP_CK32KO管脚,可参考stm32mp157c-dk2.dts中的相关配置。
+ c7 L4 Q3 z  o9 R% n; R* [, t0 m6 J" u& v
9800dbec4af67c833d239c5272bb1101.png ) p: @, S3 W/ c5 w7 C8 x- D6 O. ^

& H6 `5 ?! |9 A* w! [/ X2 { f9ecacf805e59a7912aa448ee6700453.png 7 y0 {9 D' y9 |

7 A* }; `0 ?2 h5 r6 l' \查看原理图得出AP6236数据管脚与STM32MP157A的管脚对应关系如下:9 r8 `& _" ^' u) _  ]
38%K[Y(_$(YLMJYU`UHPBVB.png
- {, v6 M" @* E# C- L* K1 h: e
% X, T2 q$ B& _) P( @  v; y% E9 I1.蓝牙设备树节点0 o" L: G. E$ C# ^( x2 X& k

% C1 ~6 e1 \" _$ y1 w( ^内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:
$ q8 W/ O! g" ?+ y" T: {8 F; Z
' `' F# M+ a5 m+ D- [arch/arm/boot/dts/stm32mp151.dtsi/ _3 \- T- ~3 f4 H/ J

4 C& G3 R" B- H1 U# Y( jstm32mp151中usart3定义如下:# t5 V9 w3 g' ?0 \+ @% `
0 i- O, m! z5 J( ]% J# P
usart3: serial@4000f000 {2 U) j& V# o* b2 \& C/ x

$ {4 s2 c6 x7 Y3 d  Q; r9 z4 Rcompatible = "st,stm32h7-uart";
/ R1 M9 Y& s: O% x+ ~9 _* W- K6 X0 R: `: w* i: I2 `
reg = <0x4000f000 0x400>;1 O  e2 q0 v3 l! ], w! _; o' @

3 C. T$ ^$ s: e/ |7 Einterrupts-extended = <&exti 28 IRQ_TYPE_LEVEL_HIGH>;
# x( s/ U6 @& Y* Q4 {& z
. J' K2 `1 k) v# f, mclocks = <&rcc USART3_K>;" N: I% n$ ^. S3 o
- d1 [8 P. w; @
resets = <&rcc USART3_R>;8 P- j3 E4 }+ G/ f! E, n

( x+ n% W% G3 O) u) W6 T$ K+ n- z6 Wwakeup-source;
. f* o; V$ U( ]( N9 w; X( Z3 }  y: S/ z+ O& g3 S
power-domains = <&pd_core>;1 ~% w$ F( p. C1 ]

  C/ u6 F3 U# y0 f% bdmas = <&dmamux1 45 0x400 0x5>,7 o9 y, A) s3 {% g7 W* p3 j0 L

5 J/ c) [* w) R6 j' T0 a$ ]' t<&dmamux1 46 0x400 0x1>;
% E, v3 V# m$ n  H/ l8 k* l4 z8 J7 |3 `" W! x3 s
dma-names = "rx", "tx";( U# y  H' u6 \) a
2 T  ]5 h' w2 G* K, A
status = "disabled";' D; z, |5 u% e6 [9 L7 O. y

4 ^* N$ U8 w5 |& D};
2 o: H! c) }! O3 n# |; w0 ]9 H% B- X/ k8 j. X! V/ N6 e' q
上述代码只对usart3做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。, g: `# d( k8 ^* E; O- I+ h  r
8 A1 i5 c* n5 g- |" ?0 v7 k2 K! d
参考文档或stm32mp157c-dk2.dts对于usart2设备节点的描述,增加usart3内容如下:
7 W. Q8 z: w8 I0 e- y5 s
4 h+ E/ t; X( P: ^; t&usart3 {- l- G4 x( Y" B% D7 J! \

6 U4 j- ?) [% u- K5 I; t6 apinctrl-names = "default", "sleep", "idle";
! Q1 a* c# S( n  j- f1 \  r3 I6 O
pinctrl-0 = <&usart3_pins_bt>;! s' H/ V; |& s  ]! Y

5 ?2 L% q3 j. qpinctrl-1 = <&usart3_idle_pins_bt>;
" A) }$ Q) ?/ X. N9 _  x
  X; R# i# y3 B+ b! j" U8 D9 Jpinctrl-2 = <&usart3_sleep_pins_bt>;' y; {- f+ x8 _% H

" b) _- `4 u: X& x$ x# x9 ouart-has-rtscts;
/ f( j) n. d0 p  ]. j' N1 d& ^( U4 I" g! A3 R! ^5 e  O
status = "okay";
7 e) @& _& k( I& L. V# i. n/ n( f  M$ u/ M. ~2 V4 [" Q* k
bluetooth {
  p% w' B( a3 G& y" s% b2 e& P& I# J
shutdown-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;, L# }4 r- e6 {/ ~  D
& h( _; s3 W, c- a6 }
compatible = "brcm,bcm43438-bt";
, z/ p+ x8 e8 L& w/ `; R5 g* a( d1 q9 x" H2 }* p
max-speed = <3000000>;( Q# j/ A# [; J8 g. I4 V
% z( x% \" a1 Q% V+ y
vbat-supply = <&v3v3>;7 ~2 W/ Y7 T: {4 ^" `
; Z# {: H( b$ x) N8 h5 O- V
vddio-supply = <&v3v3>;$ ~4 o* X3 L1 Q* I% q
4 ^$ k. i' j2 [( b
};) c9 t4 ^+ ^& l2 y
2 z9 J  r" [- S+ X
};
. P; U1 Z$ _& R- H. R" N- d9 G% ]+ c9 u) A0 o4 ~
同时stm32mp15-pinctrl.dtsi对于usart3的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容:  n4 e" C3 n' K# w6 x  S9 w- `
* f1 T9 B, `0 a6 z* D: \7 j5 E
usart3_pins_bt: usart3-bt-0 {  x1 J7 F# V1 w4 |8 f$ t: |
- H% l  \5 i- q1 N* ]2 z# y
pins1 {; K- m- C+ R+ o

9 S* t) z7 h) g; ~pinmux = <STM32_PINMUX('D', 8, AF7)>, /* USART3_TX */, }, z, E" m1 h5 h) D$ l, E

9 b6 Q- K& Q4 z+ ]- [+ p<STM32_PINMUX('D', 12, AF7)>; /* USART3_RTS */
9 o4 H# q8 w4 M: H. T
- X5 ?$ ]! {8 M" @( x9 dbias-disable;/ @) j( ~2 a$ z5 S( G/ ^; G; N3 S1 e

0 W4 N- u. k- Odrive-push-pull;
- ^9 ?+ O3 Y4 N1 {
+ K+ P( ]: V* Wslew-rate = <0>;
3 V1 ]( G7 o+ {  L# y" w+ |/ D# e3 P1 I, f5 h
};
. H/ g* ?+ I, \/ m( Y  L6 U" v' I% L
pins2 {, @2 U3 O7 }+ V: K) H. u
8 n6 p* c$ ~6 m( W9 g
pinmux = <STM32_PINMUX('D', 9, AF7)>, /* USART3_RX */4 e5 R  U9 \2 i3 c
) s( Y. J. ], G5 H- g% a5 x3 |* A
<STM32_PINMUX('D', 11, AF7)>; /* USART3_CTS_NSS */7 d8 [# E+ T: C8 K3 p2 e! G

- C  K- G" P- s% X. r& L* R  k9 Fbias-disable;8 z3 J) e! I- \0 d* v8 f
! |0 A$ h( D3 M7 [, Z
};" O8 e! Q! b* M, N

2 |8 q; s* ]8 D6 W};
+ I: A% ?; v. ?3 `  S: T0 K' E" x/ S* W5 h5 V, F- q
usart3_idle_pins_bt: usart3-idle-bt-0 {- J) J4 i  B8 ^
. R$ `( |% Y; R
pins1 {  B6 m/ n  _: v& m. j3 n

3 l# N/ W2 N/ J6 }* d" kpinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */
7 X! V% ~1 \; o7 U
( A- e% z# [  Z4 ?7 w: U# ?1 v<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */+ s) h# d- K* k7 g. C' V
8 c- G( ~; E9 l
<STM32_PINMUX('D', 11, ANALOG)>; /* USART3_CTS_NSS */9 w& I4 @$ C7 Z# W7 U6 K6 F' c/ A

8 e6 I$ W- J$ {9 Q};% I) R8 j' O$ @, a2 @4 t7 e& y
* Z; ]: o- J! S9 J) |
pins2 {
7 n% {7 d% L* K5 N4 s7 o$ |! P( g& w3 U+ r/ m; E0 C
pinmux = <STM32_PINMUX('D', 9, AF7)>; /* USART3_RX */% n6 w! M4 J( t- d0 b5 |
3 R1 [* j" y$ j; T( v+ o4 `
bias-disable;
* u3 A/ D$ s% }# I& z; O1 Y( J# m& t3 x
};
3 ~# s% {# h1 L/ e) ~5 Q) i  W# B5 ^+ X# {/ M) B9 h7 O
};
+ ~' F: }% J0 t, Y$ g5 l. w6 Z' M9 J
usart3_sleep_pins_bt: usart3-sleep-bt-0 {' X6 @" P% z5 t; @$ L  N

! Q* @1 u; }1 ~0 T9 {, kpins {0 b: q8 m& T: Q7 W( V
  X2 L7 O3 T& M# O: Q
pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */3 Z7 P7 g$ L/ I3 c6 f8 v" b
8 n  ~: i. @, B2 e$ V
<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */2 z4 \* ^' N  g0 y

5 F% S5 @* J4 U# @, q% {<STM32_PINMUX('D', 11, ANALOG)>, /* USART3_CTS_NSS */
8 D! _1 `/ {8 ^' O4 b; d
, b1 W3 f& l5 p! h$ W<STM32_PINMUX('D', 9, ANALOG)>; /* USART3_RX */
$ A' U: D5 p' w5 D
1 U/ M; E, K9 A/ \% h1 Q};
- U2 f1 \# R4 }0 _1 f( s
  M& _  h: K# G( m. S& ~};2 x# N' F% ~( C) \0 ~! X- n: k+ }
" C, ~: z/ B) i' e5 b5 z
2)RTC节点
+ M4 a; o6 I5 u3 {6 |
7 \3 U1 ?& i+ f3 {+ jAP6236需要使用一个外部输入的32.768KHz的时钟源,因此我们需要使能RTC的外部32.768KHz功能3 O* A  t8 E  V8 P
: b! s# v! I- S4 }3 Y7 f7 [7 T
内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:  P# e2 Q5 s& P" u, k

7 b' M, T, G2 J: O& `  v# uarch/arm/boot/dts/stm32mp151.dtsi
+ B- S. n  \6 E' [
6 L+ H) I3 p5 I( ^( P! \+ Bstm32mp151中rtc定义如下:
7 h: m& I! ~( I' A# N; Z( h
1 P9 \: A' r% V+ e4 Lrtc: rtc@5c004000 {6 D) |  B9 {+ K! I

5 v% E2 C; y: \( Xcompatible = "st,stm32mp1-rtc";
6 _/ L4 Y. I; f9 v  U& |& d; |8 G4 k! R
reg = <0x5c004000 0x400>;
- Y5 o" p. T9 D, L, E/ F
; ^5 x4 @8 ]: I# }, c( Jclocks = <&scmi0_clk CK_SCMI0_RTCAPB>,
. Y( ~7 o! g9 F, f7 K4 Y3 p4 y" E: K' Z! X0 n9 M1 j
<&scmi0_clk CK_SCMI0_RTC>;  {- |# `0 M- Y1 k2 H
2 ~6 K6 r7 g* y  y* f
clock-names = "pclk", "rtc_ck";; ?1 ?( U7 Z$ V% K# M# S+ \2 l

% ?  F5 `7 U5 r; yinterrupts-extended = <&exti 19 IRQ_TYPE_LEVEL_HIGH>;1 L3 w# D8 z& T. u# {
( _# B# G1 Y2 H
status = "disabled";, ?0 M) F  Y/ u& h

& i  B# C* X% k$ c% [% X( L};1 x! |! X- B( a
/ n$ e5 V4 Z" o$ f# f, Z% W
上述代码只对rtc做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。
) v; k; ?1 B" M7 Q* E/ E
6 H8 C4 r8 ]$ f# {3 M9 o参考stm32mp157f-dk2.dts对于rtc设备节点的描述,需增加内容如下:8 _* l+ b+ `1 q1 M1 W+ P

; G5 m  C* S) D2 ?- M* C; Yrtc {
- U/ ]( U- e2 S& m( @/ |' @: D3 w% a( T5 `$ A; R
st,lsco = <RTC_OUT2_RMP>;1 R2 D8 K& h4 [9 V# ~2 `
6 c& @# Q* A! j. k$ \- {" ?
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
5 p- c0 N& a, t: k3 V. J1 x$ h# e% `7 h3 A, @5 _7 i
pinctrl-names = "default";% V+ N7 u) t% U" y( ]8 e: W

9 R. g& O' N( L- @4 _9 s8 C0 F9 |status = "okay";
( N5 i+ D4 R- L  G8 s; z: d0 \' V/ U+ z# N8 M
};
- p1 s9 ~& Q8 i% V, n$ ~
/ p  H- x$ D6 ^9 v2.实验目的+ c$ Y' |( T$ u1 [
熟悉基于Linux操作系统下的蓝牙设备驱动移植配置过程。
3 l2 E: Q& \5 ]! ~$ G0 `! L: Y3 M
$ k: d7 {* Y% a1 }! H9 c9 M8 d3.实验平台/ |3 J& A5 T9 q3 Q
华清远见开发环境,FS-MP1A平台;2 e9 n" z0 l/ ^

" b% ?8 w. V; V! w4.实验步骤$ S! |+ v" n+ ~: b% }

: P. J" J+ ]! m- W$ M/ y+ D$ n( ~1.开启32.768KHz时钟: X/ F1 |8 i) C& Y9 i7 v9 m
修改arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件中的rtc节点添加如下内容:  c- ^/ k, G6 a7 A: O

4 [9 U* i$ I& J) N$ ]$ H/ X) I6 wrtc {
, r  L* E- q( b8 o1 ]" q
( X3 b& _. W% k1 R. bst,lsco = <RTC_OUT2_RMP>;
! d/ W  s8 w1 m; d7 F8 A7 m) f/ V/ c. ?1 ^- b
pinctrl-0 = <&rtc_out2_rmp_pins_a>;; h4 M, e( ]# K

9 `, O% M! F$ U( {( Q% Wpinctrl-names = "default";
* Y2 X& L" n5 R  B! |
3 D% s( G% n, T0 `. N4 ]status = "okay";7 O- Y; H6 _; w; ~. i; y8 Z- d! y

/ }0 n- ^. [5 I};
/ J+ U( H" r* V/ ?; u6 t9 m" U! D, k# V3 S; n
其中红色字体部分为要添加的内容。; v/ ?/ i: O, E+ t/ e

* C& ^1 V& h5 I. e1 a9 V4 [添加rtc相关头文件。: K. o- P9 d$ c) X! O
1 G8 C$ N" K& D0 R; i
#include <dt-bindings/rtc/rtc-stm32.h>! c/ R7 Y) f5 J. J0 D* V: B

# E) v- O' V" g) K  {2.添加usart3配置
$ z2 `1 E/ j- h$ q. e& I& R+ F: x修改arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件,在文件末尾添加如下内容:
4 l  \, w# m* e" i9 d  z/ O4 Y  s  @! P! k: e9 v+ S
&usart3 {
' r6 T9 \3 Y# @5 U# R# l3 ?; v4 y4 |. i' H$ e0 W5 |
pinctrl-names = "default", "sleep", "idle";7 I3 n" T9 f6 j4 i% ]  K8 w* l

5 V2 B- C# M. t' I& X+ ypinctrl-0 = <&usart3_pins_bt>;( X% `2 q  J) Y' P

4 W& n7 ?. L1 |; F8 Y5 ppinctrl-1 = <&usart3_idle_pins_bt>;& \% t' v1 [# O

) O" j! C, [; [5 K: i, Xpinctrl-2 = <&usart3_sleep_pins_bt>;3 ?3 n$ v, A8 X& i
. \' I0 Z$ M7 J2 K; Q7 F" d% I' |
uart-has-rtscts;
: ^3 C; I) y- o
2 J7 X: m4 g( _3 ^status = "okay";! [5 z8 \+ `9 y( M

" D/ M. Q- A+ u' ~) Ybluetooth {
! B7 T& n, c* h4 r$ D" d
% w/ {9 }/ \8 b$ x' I# S5 tshutdown-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;, m# ]8 E. W0 h
) |7 [; ^& `, a# O! v1 T
compatible = "brcm,bcm43438-bt";& V! o6 M& P; F5 s2 C# O

) j' d* x0 v) L  v' N2 Lmax-speed = <3000000>;# P9 W7 ~2 J5 ~4 J8 \! s

6 s& j$ I" K9 P2 Z1 D, x5 svbat-supply = <&v3v3>;7 \9 E8 K0 s7 v4 i4 k7 f
* I) m6 n3 Y3 P3 G
vddio-supply = <&v3v3>;
0 j: X, s2 A8 Z8 A  h
7 C9 |4 `" g7 N1 a* ?8 ~$ H};: r" a4 U4 R9 ?/ y
4 r( N" f) M5 G/ F) t3 t
};
% o' B) f' n% q: F( r" s! \. G; K& E0 D% S, s
3.添加功能管脚配置* k2 x( h/ f: a! z0 u
要添加管脚配置需要有pinctrl节点,如果之前已经做了MIPI LCD移植或者RGB LCD则在arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件下找到pinctrl节点添加如下配置,如果之前没有做MIPI LCD移植或者RGB LCD那么需要新建一个pinctrl节点,然后添加如下配置。
0 Q3 E% f. _+ c- s& e# L& d2 [) I
5 a5 f/ k$ F( i+ a  q&pinctrl {4 [+ A" m5 w, ?, Y) p
4 ?; b) i& P6 O- V+ ?, ^# \
... ...# |" j. j' v) n7 n& `, Z

4 h9 Y& s  W5 vusart3_pins_bt: usart3-bt-0 {
+ ~3 l/ Z$ A  L+ v4 @6 g4 [
) }! h* L$ C/ n$ spins1 {
2 D! i6 m+ D$ k% H: R4 P" m
8 F2 O, g8 e; y4 M- r& ]) n9 b4 epinmux = <STM32_PINMUX('D', 8, AF7)>, /* USART3_TX */" o/ _% y; }& r) D* k( ^

: j% [; t! a8 P1 }. [' Q  C$ v; d, `: U<STM32_PINMUX('D', 12, AF7)>; /* USART3_RTS */. d# f& _7 g, A' v7 Y

! P! m4 |5 q3 e+ [bias-disable;+ M8 n& [5 ^! L$ X3 a4 B# ?

2 n. P, a/ V2 [% M5 x5 Rdrive-push-pull;
* m+ ~6 G/ J( E; Y7 h" ~/ `0 v" a* U  ^0 n' s. \
slew-rate = <0>;! G/ H7 z' E3 \% Y- k
  `* n- T, x! f* ]+ @- i( L7 j9 ]
};! n% u- o/ y0 H# f' a5 `
0 V% _4 @! ?- B/ X' f& v% h
pins2 {( l3 v4 N' W2 u7 c" [

% c/ l* Y! u' n, z$ [pinmux = <STM32_PINMUX('D', 9, AF7)>, /* USART3_RX */
8 `) G1 _" H+ k1 q5 u5 U4 L& u3 j: S4 Z8 z* c
<STM32_PINMUX('D', 11, AF7)>; /* USART3_CTS_NSS */
2 y9 ~; [9 Y- F+ C* {5 q
0 t" \* K+ ]9 B6 |- r( zbias-disable;
; y5 m0 c" a( v/ N% H/ S9 N9 _( r1 e
};
( x* T8 a- g4 r  J4 P* A4 y5 K1 B5 m1 R) q9 n8 t" H
};
7 N. V1 u+ w0 P0 `: r+ R; R" X' K* q+ X
usart3_idle_pins_bt: usart3-idle-bt-0 {( s: M" B2 M2 V! H5 b. E
: I+ ?7 u. v' B
pins1 {
) _8 B. t! m- j& Z) Q3 q4 v+ L# _4 F$ g3 h2 Q
pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */
. ]" L9 O3 ?* p" J- _$ \8 ~" f1 L% s5 a* z  g
<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */
# M! g& o; k" y6 ~
0 P2 ^$ N" z- k& M<STM32_PINMUX('D', 11, ANALOG)>; /* USART3_CTS_NSS */
; Y& w2 [$ i; V2 g0 \7 y$ g6 z
1 {2 d( z& J! V. s3 A( p  j+ P9 t+ _+ F3 k};
6 |( U& Y7 K- U; g9 W+ u$ x$ Q# E# `3 Z1 h
pins2 {
, P5 V7 `& g" C( Z# y
& ]+ n: f9 C. l7 u2 v' mpinmux = <STM32_PINMUX('D', 9, AF7)>; /* USART3_RX */
; Q  W+ Q% `6 b4 Y9 _- g  X+ V5 s' U
bias-disable;
. h5 Q  G7 e! T! @8 u5 R' b" i4 U# `5 n# L3 O
};% h6 I0 J2 J9 {& h" p
, y) A; d* B* C4 z
};4 Z9 w/ x+ r  N* L

- z2 R8 H$ x# \, L' A  B$ q/ Husart3_sleep_pins_bt: usart3-sleep-bt-0 {; H) a! A9 g9 ]2 N+ P% m& T
5 {6 r4 R( N0 k! V
pins {
5 x' t8 ~9 X) n( f, G, q
% h0 z* ~8 i( {9 Wpinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */
6 H# ~; R3 `4 q8 J% ?; P! k, q; o9 J8 b  a9 |$ G
<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */
- y  J4 N4 \( H5 Z% }4 _/ W' e& x; O; H! P
<STM32_PINMUX('D', 11, ANALOG)>, /* USART3_CTS_NSS */
4 |) V) k7 k7 }* ~: y% ]0 ?1 ^9 y
<STM32_PINMUX('D', 9, ANALOG)>; /* USART3_RX */
4 C5 r* B5 _0 @0 o+ {" J
' Q; S; Y/ a; g; n: F# N9 u4 ?};
! T& o4 T5 m# r$ R
" L& ]8 `+ M' O( ~/ b# E% F: w9 y- ^};/ g, [$ l, Y* V9 _. \) b: _

7 g; ?* g# i1 E/ e3 `... ...
: U7 `9 B$ _: o* N" M3 Y) x. W; R0 n) U* u. L6 i, ^6 @) C; M
};
, ]7 n2 b  ~# D; \- P1 F+ j/ P
4.修改串口名称映射关系
7 I& w2 m4 X/ |+ U修改arch/arm/dts/stm32mp157a-fsmp1a.dts文件,在aliases节点中添加如下内容:
( P  j  J: r  _5 u- l! h/ r" N& ~7 M- U
aliases {
0 Y3 r! q6 d6 @7 g/ w# S* X  V$ @. ]" F
serial0 = &uart4;# c( z' n6 D- u9 P4 ^' j5 m
# ?' f, n. b8 S
serial5 = &usart3;) D# R+ j! T% A6 E4 Z

' Z' j) D% R1 w/ K4 z. I};7 j% G4 T: D7 |: Q

% v% D4 x3 @, p' \其中红色字体部分为要添加的内容。0 R$ o- t: s, N
+ j" p% Q" W+ J! }) t
5.配置内核% ^( K- P9 s, F+ r# s
由于内核源码默认配置以及支持AP62xx,本节列出主要选项,如下:
5 J# a; l8 b1 d" f, q8 ]
) A9 m& u9 Q: Slinux@ubuntu make menuconfig; Q8 T; }, R: I% S, R
& G2 U. m2 a$ Q. d" Q8 A& }
Device Drivers --->3 t$ n- a3 R1 ^4 f* E+ n
% S# m$ G3 H8 q* p! V
<*> Broadcom specific AMBA --->! s# w+ t5 {" E& [
Support for BCMA in a SoC, p; E8 b* f) w2 _: D8 H) ~* V! }
ChipCommon-attached serial flash support1 a* D0 U4 r4 R3 v6 L
BCMA Broadcom GBIT MAC COMMON core driver5 v5 I) @0 b: K$ `4 E4 u
BCMA GPIO driver
: E7 {9 M* [- j* w' y3 t% W
2 I, [$ |$ l+ ?: A% b8 N% ]* a1 P6)编译内核及设备树6 Q2 \1 g4 J5 C: j

1 Y) s9 I- J1 M# q0 elinux@ubuntu make -j4 uImage dtbs LOADADDR=0xC2000040
( X$ B6 O3 \8 E% D) G1 k1 I
: S2 }; d+ U  z; {7)重启测试$ A) q# a% R& p7 c

# T1 V! P* G5 a! T. F0 f将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,系统启动后查看/lib/firmware/brcm目录下是否包含BCM.hcd固件,如果没有发现这个文件可从【华清远见-FS-MP1A开发资料\02-程序源码\04-Linux系统移植\04-移植相关文件\02-Linux内核移植\AP6236固件】下拷贝到/lib/firmware/brcm目录下。  V4 Z' y- M+ p: X% j# G. A

6 q9 w4 Q: M2 Q( k开启蓝牙设备
& B: a) U4 f5 i  u& a
' z- x5 J2 }; F5 o. `  L! P6 N7 froot@fsmp1a:# hciconfig hci0 up
) Z6 X& q( m& \5 @3 s$ {( z' @* M& h+ M# _8 v% v
查看设备地址5 o8 j/ q5 J9 a

( e2 H  ^; I( y4 C6 \* h# ?1 W0 jroot@fsmp1a:# hcitool dev
$ B, H- M9 t4 i7 g; k
$ ~! f1 U& y7 g3 ~2 J6 ]9 @, w' X扫描蓝牙设备- H6 i0 }2 t) z  P
  F( {# a- h2 q+ X8 l! p! K( L
root@fsmp1a:# hcitool scan
) F6 l5 `: N6 m# k6 P0 V/ v: \3 k; A. ]( Y; M- J
2eaa7901598a4243f92b4e2fc82a9ddd.png
0 [& k; {+ s4 X8 [3 W9 f1 ]$ z3 |: G, a- H/ v% J+ ?0 k
————————————————$ [: s" q1 m' Z- H7 Y* u
版权声明:华清远见IT开放实验室
' v6 F9 T, j7 v1 r5 V( |
5 D0 M# o/ k0 }. }# Q" F' }0 t  H  ~
1 y+ S; n' h1 }
收藏 评论0 发布时间:2022-9-29 18:26

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版