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

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

[复制链接]
STMCU小助手 发布时间:2022-9-29 18:26
1.实验原理1 D% s1 w. _, J% m6 L4 I+ I
FS-MP1A开发板蓝牙采用AP6236,WIFI蓝牙二合一芯片。蓝牙部分通过usart3与SoC进行数据交互。- o, F8 i, ^4 W$ Z6 U# W. |4 p
8 h' [6 o* E3 u( j
ebc558764a13a00117bd9f68846646fc.jpg
0 q" Q; {) ~, N- N9 r- D
& l/ E" ^7 \' ?$ q* A5 I蓝牙部分移需要配置usart3的设备树与AP_CK32KO管脚,可参考stm32mp157c-dk2.dts中的相关配置。
: x! R1 ~- V# W" w3 F: Z: R# c! ~" d
9800dbec4af67c833d239c5272bb1101.png + |+ K* N: a3 w$ b, U0 B( F

6 P' w7 h/ r0 N f9ecacf805e59a7912aa448ee6700453.png
1 f4 S( \, ^. e! S7 n- G/ B- W* [) {$ ~1 q5 U
查看原理图得出AP6236数据管脚与STM32MP157A的管脚对应关系如下:3 y. C1 p2 f, ~0 H* G7 j. N
38%K[Y(_$(YLMJYU`UHPBVB.png
- {( x4 g$ I+ R5 @8 M& W+ `5 P& o  F& v
1.蓝牙设备树节点
7 t* F% f5 w; ~3 z1 P/ I& D& }% `% j) ?# q
内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:
1 Z: D3 L$ Z( @4 r0 L) J8 @4 L2 e4 t) X( y5 t% B
arch/arm/boot/dts/stm32mp151.dtsi
3 f/ W0 q6 O6 b; n' X& |6 Q, f+ d; J
stm32mp151中usart3定义如下:  O% s9 ?0 Z9 l
# s$ p2 m+ V4 P2 e) n
usart3: serial@4000f000 {2 E9 w! _+ w% q, D# ^# T$ s! ~0 Z
0 f0 }9 _9 r0 |6 P) w% z
compatible = "st,stm32h7-uart";
3 B; {2 Q* K* {6 B* R$ ]$ s- g& L+ T4 V4 L
reg = <0x4000f000 0x400>;9 G. \3 I4 k5 @
( G8 Q, [% s" \& e0 z8 L% f( g
interrupts-extended = <&exti 28 IRQ_TYPE_LEVEL_HIGH>;
: p4 q& [0 \/ l' _6 h/ a! d; [5 G6 @, Y2 T
clocks = <&rcc USART3_K>;- I; g- s* p  K
" J+ O( Q$ z0 ^, d9 x
resets = <&rcc USART3_R>;# m# ]2 h$ {8 i2 n( X
7 z/ f! J1 g" y& W! n8 ^' k) X
wakeup-source;2 U3 [* n, E' E
" Z( v( v8 i" N1 C7 f1 }
power-domains = <&pd_core>;
+ t1 J' W7 k7 I2 U& V( x
# I8 o' v3 i7 Q* H# Z2 l$ I, p* ddmas = <&dmamux1 45 0x400 0x5>,
8 N5 r' U' `: X1 V! f# O7 c/ _: k$ W4 K/ G$ c9 X. I
<&dmamux1 46 0x400 0x1>;
0 y) j2 C" E( a) X8 ]  @8 g5 Z- h2 N/ L- {' h1 y" b
dma-names = "rx", "tx";' ?: v4 t7 U, E

5 N* L9 E9 t* Z1 }. pstatus = "disabled";
) }" g* q# @9 Z4 |" F3 s  Y8 y) ~) ?0 t/ c) U) j% K$ {: g1 _
};
3 i) e+ s" }) f6 H! A  z1 a/ g" C/ ~, ?, w; f0 Z
上述代码只对usart3做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。( R* k9 ~7 @- ?% }/ y( b% Q8 R6 x2 Y

" ], u9 O7 ]) C; B" ]% H参考文档或stm32mp157c-dk2.dts对于usart2设备节点的描述,增加usart3内容如下:
) s8 h, s1 C$ U2 t! \1 [( X
3 o2 G0 J# V9 B" y) t' o; k# y&usart3 {
' h# d, X+ g# D2 ~) \$ D8 ~
, r8 D1 V* f. x1 h5 }# jpinctrl-names = "default", "sleep", "idle";; E8 a  B) [! m$ D3 a8 B

% p) `  E* \6 u0 Hpinctrl-0 = <&usart3_pins_bt>;
' j, S- g: m# A' L1 B3 X- v
+ X9 ~* ]: }- |2 m5 T5 ^5 Kpinctrl-1 = <&usart3_idle_pins_bt>;2 l7 @( l& p7 `5 E/ c, V) v

! h! }( W9 G+ K/ \2 [( M4 B7 Apinctrl-2 = <&usart3_sleep_pins_bt>;5 @( v8 v% z# ^) d2 @, j/ b
$ P! Z4 B# |  _- q+ v
uart-has-rtscts;8 G7 F3 v# e' V- R/ y- ~& j% a

+ \- [+ B# Q& x2 Kstatus = "okay";" Y9 P" u6 p& p& N! V$ z
2 @6 v6 Y+ N% g4 m! S
bluetooth {( p9 |/ [" A; o6 h0 y" B5 C
9 T$ k4 F/ t6 I! G
shutdown-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
( b; V3 N5 V0 z+ G" }% h- e; S( T1 }) u
compatible = "brcm,bcm43438-bt";
: s) q, t) z( E% v% b7 K8 J8 C" g6 m  I7 \% m
max-speed = <3000000>;
! B* l, l; I% u! N0 w! d. t) t: u* Q
vbat-supply = <&v3v3>;
9 D. ]. [6 {- M1 H9 q! w0 }% a; }5 O  l, B
vddio-supply = <&v3v3>;
4 s& G7 b( b. o) @" [: x5 L2 s* G, F4 O6 G
};
- O& d" y! r0 i# C
6 p7 }) A3 A/ k- E- `9 l3 I. \0 {};
5 k2 }6 ]6 u& z; q8 Z+ K8 U$ y& \% n8 O+ L/ I
同时stm32mp15-pinctrl.dtsi对于usart3的描述与FS-MP1A所使用管脚不一致,所以无法直接使用,需参考其增加如下内容:
7 `9 R- [* F+ K7 C; s. L
) ?* ?" ]- V6 [! x! T+ m8 G; j& B* Vusart3_pins_bt: usart3-bt-0 {
1 B& n( m" [' T
: Z) d4 M' u5 m$ T3 o/ z' ~3 h1 z8 qpins1 {
4 A# E9 G7 a7 Z3 a% A/ N. C( \8 l: Y% p% c: D: u% _/ \
pinmux = <STM32_PINMUX('D', 8, AF7)>, /* USART3_TX */8 [" c& t! x; z4 I
+ |. A0 {! O  r1 o" L( z( N
<STM32_PINMUX('D', 12, AF7)>; /* USART3_RTS */
) S. g. ?7 B4 {; X# C% T! Z9 O5 w0 A6 W
bias-disable;
* [; ^* U: V2 p7 n4 e- D9 i- }2 L  ~9 m  u% R# ~0 _
drive-push-pull;9 c4 D) r0 v7 K( b- ~

* ^0 m. Y! V& c/ V/ V) Sslew-rate = <0>;
, a, p# @" T9 q) {6 P# |, g. L' t7 v. h4 O) X9 ~2 K1 H, _* H
};
9 R$ g6 T% X" y& }# D+ o+ ^7 T: M4 @, i9 X0 f; ~
pins2 {
# K1 H; x! U' M- \, u$ L$ x
6 b% D% t2 K* Z8 `4 [pinmux = <STM32_PINMUX('D', 9, AF7)>, /* USART3_RX */
& r9 g; e6 ^+ _1 t- j+ Z5 ^9 y" [2 d/ Z
<STM32_PINMUX('D', 11, AF7)>; /* USART3_CTS_NSS */2 y  r' A+ R  e- ^8 d1 A

$ n% @$ g2 Y4 D0 s2 Z5 Gbias-disable;
! z5 u8 \6 @# E, v- |$ H" }- M  r- N9 z
};7 }4 ?( x; x4 Z: X/ D  `1 e

0 J/ H7 ~0 [5 Q: R; f7 j};5 v! w$ B  ?) a. t/ }2 m

7 y# z7 V/ F; d1 [6 E6 j. R) lusart3_idle_pins_bt: usart3-idle-bt-0 {
) |7 ^  a* \  {- R, ^$ f/ \& m! {( A+ y! T; b
pins1 {. T' t/ A6 w" f# J% O* _

1 W* A: Z" p$ D5 p5 l. ^pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */! y+ k3 Y* z6 a5 z% ~' C

) i' Y1 I& ?. H( g. f* I& T# F<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */4 y( q. n3 M. ^  e/ n; k

2 u& M1 ~2 |  w' B3 r# S) i<STM32_PINMUX('D', 11, ANALOG)>; /* USART3_CTS_NSS */
# a1 l" U! W- L/ B* y
9 U" ?8 r" C1 z7 f};
7 n# S) ?* Z" B: I2 E1 n+ O8 C
4 l7 a; X0 S1 g% m) ]  wpins2 {* S0 c4 j! }- G/ @' v9 O' h
6 w0 E8 C1 W: E& @& D
pinmux = <STM32_PINMUX('D', 9, AF7)>; /* USART3_RX */* y* }, D3 h! }

2 j  P) a7 G; D4 |4 l# Tbias-disable;
, K2 E2 Q; f, N. R, w
, H1 t4 q' z& y( Y: h};
4 \5 k+ A0 D: r# g7 r3 Q# q+ a( W( L; v, E7 N1 [
};
$ Z' t8 d, r& c* F1 _
7 K% X- d; |" k% s( |) busart3_sleep_pins_bt: usart3-sleep-bt-0 {
2 G) a4 j+ c' n3 z; ~9 x1 f4 Z% O0 l) n& t7 ~  L( _( y  _2 Y
pins {; _$ K# S* D& J8 Q

4 L( o: c/ E3 w0 G$ N) \pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */
- u2 B4 ]! L# Y  Y! d- q9 J: A' X% b  k" M6 \+ I
<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */
8 }1 I3 v! m4 c& E: {! S+ N9 @
4 Z# e0 o% k$ B! ^1 I8 W/ u<STM32_PINMUX('D', 11, ANALOG)>, /* USART3_CTS_NSS */# {. @9 D# k9 z9 l, Q. T7 i8 ?

6 X) Q4 P. O6 I<STM32_PINMUX('D', 9, ANALOG)>; /* USART3_RX */
. L$ ]" F: N. ]8 g% c' g1 @+ u" g; p8 x* B. H
};$ c1 k' I$ @1 u) W

- C( a8 i: r8 o6 M- K* K; n};  X. {) Z# u0 \- `5 Q' i; ~

6 n% r  z$ l4 Z- |) j2 b! c2)RTC节点- q- [, y/ z* @8 W' K6 c" U

5 ^) p& n  j% Q+ Y7 p0 zAP6236需要使用一个外部输入的32.768KHz的时钟源,因此我们需要使能RTC的外部32.768KHz功能7 X4 |* {9 z; ]

# g$ C) ~3 n7 Q# b% f; J内核中ST对STM32MP15x系列芯片的设备树资源了做了定义,可参见:
' O! n/ ?8 {3 O9 {6 G
+ X! h& z; U, |, J' T1 d/ o5 W& J# carch/arm/boot/dts/stm32mp151.dtsi( c* X7 P8 u* t* V& Z

4 Q( x/ F, N! W; A6 \stm32mp151中rtc定义如下:
; t* y  ^/ y' L( B+ ]* o( Q9 O: e$ `# |0 I( [2 g; s
rtc: rtc@5c004000 {
# I( v$ A) p) S) E* f9 E
7 `8 ]$ l& y- kcompatible = "st,stm32mp1-rtc";
' ]( O. j3 N- t3 i1 @5 s4 Y
) A6 ?) d7 U8 t3 dreg = <0x5c004000 0x400>;
; Y/ C1 I# q; G, z8 ~0 [" \# q
+ F; c  v! a) E1 J: m; X  k3 Oclocks = <&scmi0_clk CK_SCMI0_RTCAPB>,
$ L) _8 \9 F$ x. Q+ u0 V: F0 S. ~1 l1 l% v
<&scmi0_clk CK_SCMI0_RTC>;
8 G  [: [( f9 I; `" m" d) L( F
7 m. y; |0 _* \) ~. n4 H- Xclock-names = "pclk", "rtc_ck";; z+ H6 k) \+ W  G
4 @% M$ M) ?+ F" C3 Z
interrupts-extended = <&exti 19 IRQ_TYPE_LEVEL_HIGH>;
& O, @1 x# {4 `' t3 V3 F/ P- b' B/ [  ^
status = "disabled";
* N5 r, S! i! R8 n& P! D' G0 V# m" e
};
8 E% E5 q, @/ m
8 t% N5 ]: l5 [, ~  Z上述代码只对rtc做了基本的初始化,并没有针对不同的硬件设计做适配,所以需结合硬件补全设备树节点信息。0 K: l6 F7 v4 g3 h; F

. b. ]6 V: W& E9 g参考stm32mp157f-dk2.dts对于rtc设备节点的描述,需增加内容如下:" x* s/ s5 M$ h. E9 z5 x# u, H: n. D
- |; P: n) y- [3 l
rtc {
" g% M* h( J# @" s1 u! g1 D2 c  Y/ p% D$ M( }
st,lsco = <RTC_OUT2_RMP>;
* c' [5 j6 y2 Z* D1 B( E. c, V: r' i8 Z1 N
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
9 ]  R. J8 ]. _. F2 M  a+ A( [# ~5 t9 F& @  X4 Z
pinctrl-names = "default";
$ v" T, s6 Q( y+ Y) w* n8 k0 `, X; k+ C: s/ S: _4 R) ]
status = "okay";
( ]% ]! @0 ?; [/ A' n+ L" n
+ K! w4 G' u- S" P: J% d};
% R3 F9 K) Q/ w# ^9 f8 [5 V$ T7 A  |8 O: M4 r
2.实验目的* E# E0 W5 u6 i- S- {& l; \
熟悉基于Linux操作系统下的蓝牙设备驱动移植配置过程。, y* J+ \2 v: t" l9 `0 K* ]# z
4 v  g# W; r( G9 W. r
3.实验平台# O% J8 ^: `$ \" v7 Q/ j
华清远见开发环境,FS-MP1A平台;3 _: a! d9 S% w- t8 n
  C; ^0 G9 C# I3 a
4.实验步骤
: ]* x! W0 ?# Y0 n, ?* X" p0 X6 {- u0 Z5 ?: [
1.开启32.768KHz时钟
6 r- g7 \3 _/ F5 I8 ^) K( y9 u修改arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件中的rtc节点添加如下内容:
; `0 ^% ]. ?" J5 i
4 ^: Q' h2 e5 y. A0 U1 y3 M1 J2 Zrtc {/ M  h- n$ c& v* j
1 l) K$ `' `- U: U! b) }" D( U
st,lsco = <RTC_OUT2_RMP>;. G- e+ y7 U: i  ^7 ?7 \0 N  m5 v
; B$ y: `2 L2 c+ V0 d1 p
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
. S' Z, b& T2 U$ `& `4 S% F
) G! Q; b7 ~6 o/ k5 Rpinctrl-names = "default";
# X5 X+ J6 |, v" a3 d5 N, i: z8 d' l* V2 [
status = "okay";
% D% y; f9 z0 k2 e  S$ X; |- B0 y2 w
: h7 J& K% a6 [. F};
+ f, K7 b* |, p8 g  q* U" J3 \8 M( b
其中红色字体部分为要添加的内容。
% N2 U: h6 E. ~! ^# b
/ s5 q# ^% [5 D, _' n添加rtc相关头文件。
1 w$ t! F1 i- L- t
+ V; F0 f+ o5 I#include <dt-bindings/rtc/rtc-stm32.h>( [, A7 q) w( f' I7 K* a; a& E# T

7 O* V  L* A+ g, c2.添加usart3配置
$ V- ?$ A) p# O( {( I修改arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件,在文件末尾添加如下内容:; I. j& \' p# B2 R1 S0 I' {( E

9 q+ D& h4 i  F5 ^&usart3 {8 v# [& ~# v1 q, M7 u' {

% W$ Z. w9 x! U, d( Lpinctrl-names = "default", "sleep", "idle";
; a# |. ?0 r9 I% e5 d, F
% d- R6 |# [5 ]* d/ Wpinctrl-0 = <&usart3_pins_bt>;7 r! v' z  b5 [6 d$ |- M& i0 d

5 s" _% H9 b; C% b9 ]  H) ppinctrl-1 = <&usart3_idle_pins_bt>;
- \2 S; F7 s! S8 t7 l* q) {6 I0 ?4 `( [5 F, c7 z6 o
pinctrl-2 = <&usart3_sleep_pins_bt>;% k0 Y0 b8 p* l" M% k6 J' P. b5 E
+ }2 J$ M3 Z# r" B6 i2 b- d
uart-has-rtscts;
) A9 C4 i# p* K# I2 J. P+ i1 k
2 B" R% ^0 d8 Y' x/ c* K  A' }' z/ G0 E7 Fstatus = "okay";* P3 f  H8 T8 g$ x, \5 @. f0 z5 v

# S4 H6 ^! d& v9 `bluetooth {6 q0 n0 [* }) y3 }# @/ a

9 @$ m1 @* z- _9 C+ {, W; J5 c' }7 |* @shutdown-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
0 A. ^( x8 |% Y  n/ ?' o/ s# [
6 a9 ~* u/ L3 L* _compatible = "brcm,bcm43438-bt";
, `' e0 p( u- g  y/ b7 z8 [5 y
9 j' J- p" Z8 bmax-speed = <3000000>;
) m$ u7 Q- I, g" O3 {
0 t' Z- \; k/ B% A( qvbat-supply = <&v3v3>;
# H3 K. }1 |9 }& b5 I+ k3 _' F; V: c( q+ c6 l; L! D
vddio-supply = <&v3v3>;
3 C- W0 k  p- l% ~; v, [+ A, X
  e' W" d' y, c7 R) W};
' O# y# P; I4 p8 F* l
3 F5 d1 _& D. H* w: s5 f4 t2 N};
/ e( m" t7 P; t) y) C. F! t) e# m: P  K( {- G8 ?( c
3.添加功能管脚配置9 f& y9 O/ o" Q0 f
要添加管脚配置需要有pinctrl节点,如果之前已经做了MIPI LCD移植或者RGB LCD则在arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件下找到pinctrl节点添加如下配置,如果之前没有做MIPI LCD移植或者RGB LCD那么需要新建一个pinctrl节点,然后添加如下配置。8 R% S# G$ P: s
; u2 L7 I! e( x4 D  \
&pinctrl {
% P, e. @) U9 H9 X7 D2 F) d: a% n4 U/ ^( f
... ...2 }" z. v' g1 t. `2 U6 Y/ R
0 \# a5 B1 N' W" D3 o  K
usart3_pins_bt: usart3-bt-0 {* \, f" v2 a8 ~$ g: t" R5 U
& @& U1 Y9 j. X; S
pins1 {
$ W# L4 H3 c9 @9 L
; v# ?4 z- ~4 M: Q9 F1 U/ G4 }" Z4 Z9 x/ `pinmux = <STM32_PINMUX('D', 8, AF7)>, /* USART3_TX */
) R1 L5 T7 j; m
; W5 }& S/ b0 H; K* R" Q<STM32_PINMUX('D', 12, AF7)>; /* USART3_RTS */
) e9 Y' C+ @4 J% v7 M) X
7 s" h6 x" k$ \7 X4 ~' Sbias-disable;
# z$ A$ f! @* j" A
7 x3 z4 D( P4 G2 z  g( W' _' b7 X, ldrive-push-pull;
' N3 B5 D' h& R5 A8 L+ H  |/ R* t% N
5 h8 K4 [8 ~3 O' V# Z, O$ mslew-rate = <0>;; v' h1 ?8 C  `1 @
  B2 V; g. y" J) K, R5 B
};, [# I. Z: g  x) u0 u& Y

- Z9 U. z& A$ v, I  Fpins2 {! e0 L7 ~% b$ W* M, L: K+ [

; e& T4 F/ e* opinmux = <STM32_PINMUX('D', 9, AF7)>, /* USART3_RX */
3 k/ o& C& \1 I
0 {$ y0 u: ^3 V" N, |<STM32_PINMUX('D', 11, AF7)>; /* USART3_CTS_NSS */
0 A+ z5 E" _+ B& \+ d8 d- z$ @* @2 K3 _% T& `* l9 A
bias-disable;
2 g3 i4 j& ]! e5 B
& j- D2 }( J% \' I4 _};
5 s$ L1 K$ ~0 D! `
3 C; |" ^$ G0 I% i# \9 x9 L};
- b! P5 `6 d1 ^- I- w; `/ L. a" Y4 a6 |9 t
usart3_idle_pins_bt: usart3-idle-bt-0 {
6 Y! ?8 p! y) ^8 Z6 \3 U+ r: L* w, v5 ^* ~8 U
pins1 {8 m3 G7 D% v; U$ l
  T& p6 d; [' S' R0 b0 C
pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */, L' j2 Q  c. ?4 a5 a

% B2 ]: Q" Q5 a7 [9 H( G' E<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */
4 G9 g/ B* V+ u, j- S( x8 G' g
: N+ v. f" M2 z1 k: K<STM32_PINMUX('D', 11, ANALOG)>; /* USART3_CTS_NSS */& \, y) f  z/ l) o
* ?" b6 p: b; y
};& f2 ?# [" H2 E; F/ q2 w

4 D% a+ ~  V! F1 s# V8 J5 W% Upins2 {
4 m$ Z. q" Q" a0 C- Q
: F: G8 _1 V9 k* p8 tpinmux = <STM32_PINMUX('D', 9, AF7)>; /* USART3_RX */
3 ~  @0 L( f4 o) @9 O9 {8 \" z0 N1 H7 J
bias-disable;: R) S. h4 i2 W& B! c; h5 t
1 n  Q" Z+ g5 ~0 i2 {4 V
};4 j& |7 L6 A6 P2 O+ z0 W
! K- P' E! {+ K7 s) @1 s. @
};
  F, k" h& A. n" e
; E3 d! _* Z6 U) f* ?3 q' N7 K) Nusart3_sleep_pins_bt: usart3-sleep-bt-0 {  g( K, K! L4 D0 R% _- `2 E3 d

" r6 Q0 \' V6 d, z+ R% Y% dpins {$ j) r, p, ^6 e3 z: J; p- Q2 _
7 E# D9 T0 M3 s/ V- r
pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* USART3_TX */
+ R8 C# b1 A7 V" J* o% t6 n: ^
5 |/ |4 K- ~1 v- V! E<STM32_PINMUX('D', 12, ANALOG)>, /* USART3_RTS */
4 C! O& J/ Q  x
$ C% y' X& d! X/ A: \<STM32_PINMUX('D', 11, ANALOG)>, /* USART3_CTS_NSS */
* `5 Y" Y: Y8 O& g( V, C) q5 L. I3 v8 u! `
<STM32_PINMUX('D', 9, ANALOG)>; /* USART3_RX */; c; e$ b" I$ p
' c$ P& f. M6 n( s% E8 r# n+ c( c
};! H. j" C$ P0 d. h7 ]5 s

! g  @; ~% O4 L. ]  f0 i5 l};2 O4 U0 I; J9 b& S  C
2 _9 t# z8 T: R9 D; |4 J
... .../ \+ V+ Z8 |6 P, b( J) _
2 S9 W+ ]+ j0 ~5 G
};
0 x0 v/ T3 B% n3 f8 v
6 o. S- i- R( ~/ J, X; G$ U4 X4.修改串口名称映射关系! H" S  \/ }4 B5 A$ w" ?5 @
修改arch/arm/dts/stm32mp157a-fsmp1a.dts文件,在aliases节点中添加如下内容:
# x3 t. ]# j# L) W& a# W% l+ |1 G. m
aliases {4 `) \! Q" |3 l* d% T* o6 M5 W- f+ B7 [

4 Y2 @( b7 E8 Gserial0 = &uart4;
4 v9 C  M( [7 @
) y- V' k: }; C4 Y" }/ h/ L- P# Yserial5 = &usart3;
1 F( n9 O' u" [3 X5 V4 P
( I# `6 U: N' d4 c0 u};
( A2 e* ~! h* }- S4 h3 _
; f( j# \* H, u% C7 |, e其中红色字体部分为要添加的内容。/ m. {) p& _4 ]2 z

# {, j9 C1 m; @( b  S5.配置内核
2 `; N) L% C3 O3 J; R由于内核源码默认配置以及支持AP62xx,本节列出主要选项,如下:6 P3 F% o4 N1 ~. o7 B
9 `% K6 d  ^  v2 H3 v
linux@ubuntu make menuconfig: m0 |3 y  K; Y3 W1 |

/ u4 ^+ [( a* e# ]6 f7 G9 tDevice Drivers --->
( }! u8 s, [- I) V" a
' q3 w! d+ n, x/ w+ S9 e4 ^2 ?<*> Broadcom specific AMBA --->
5 s+ Z) y0 K$ q, _7 J5 F; l- M2 b Support for BCMA in a SoC
3 L4 W! J) I9 a1 }1 b3 S ChipCommon-attached serial flash support
' _$ I2 l6 |' V& B! ^8 q BCMA Broadcom GBIT MAC COMMON core driver
- N! M+ z% J; B2 D BCMA GPIO driver
2 o  i1 B; q- Z9 d* v+ ?, h$ O" A* }" j5 I( f9 _
6)编译内核及设备树  n/ p7 [1 p3 f& z6 b' t' V
8 O6 P- O" N- [
linux@ubuntu make -j4 uImage dtbs LOADADDR=0xC2000040
& Z  d5 T) f9 q/ n0 j2 L8 z* p
, Q1 t, M, }# _  S0 {7)重启测试( s3 w6 {4 j! P

# T3 q5 S/ v1 g& u! W& E将编译好的设备树和内核镜像拷贝到/tftpboot目录下,通过tftp引导内核,系统启动后查看/lib/firmware/brcm目录下是否包含BCM.hcd固件,如果没有发现这个文件可从【华清远见-FS-MP1A开发资料\02-程序源码\04-Linux系统移植\04-移植相关文件\02-Linux内核移植\AP6236固件】下拷贝到/lib/firmware/brcm目录下。# S1 G) A4 Z) W, t& t

- ^" T  {! r; w" Y+ J9 h开启蓝牙设备
- b. O* ?% z" X" w2 f- H3 r9 ]& [- \1 j, q
root@fsmp1a:# hciconfig hci0 up
( l$ p& D# W( n) |4 d6 n: B& k) A8 X7 Y
查看设备地址- s% C( \% Q6 d3 z

% R% Z, P# H- F( t" e  Oroot@fsmp1a:# hcitool dev
) g6 c5 f/ E" Y7 j0 n+ E. ~) K" X7 M8 _, `/ y
扫描蓝牙设备- n& }$ a+ P  r2 v9 a) Q: J9 ~
6 c8 a' u  w/ ^  Y" @( P- x
root@fsmp1a:# hcitool scan, A2 q! S1 p8 t% b' |
0 ^$ t' }- }" q  B0 h. o- P9 T
2eaa7901598a4243f92b4e2fc82a9ddd.png 9 h  U1 ?' [6 q3 v5 C, e

, S  ^9 Z9 c) i  V2 s/ z1 o————————————————
. U8 O. }) r& g  p/ }版权声明:华清远见IT开放实验室) O2 c" F" m  g
9 j8 e- [7 m$ N" o; D# _% `1 f

+ }6 `0 i6 L5 A1 q6 S3 h( `& P2 `! }
赞 收藏 评论0 发布时间:2022-9-29 18:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版