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

STM32MP157 Linux系统移植开发篇1:linux系统移植前说明及源码编译

[复制链接]
STMCU小助手 发布时间:2022-10-1 19:52
系统移植前说明4 `. n: H! i; v& H/ E0 D( w; j( ?

# P: f' r& Y! z2 q& ]关于命令行提示符:

3 `. \0 j- @4 _$ p6 H3 j9 M8 M% P+ s# l& b- W! Q9 _1 V, g4 _" e
在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu上完成还是在开发板上完成,不同操作会有不同的提示符:
. L6 K# z: Z. k& ]
/ I% r; ^8 @: BUbuntu操作时命令行提示符为:linux@ubuntu:$
% v6 q! J0 L0 a: N
3 a; _) i- Q6 ?; ?& _3 }开发板Linux系统下操作时命令行提示符为:root@fsmp1a:$4 q: b/ y; h( F8 C. ?" d

& }* U) s4 X' r) G开发板u-boot期间操作是命令行提示符为:STM32MP>/ L4 p! J% X7 b; B* C+ S0 I6 ]
6 Y1 z0 A$ V- V' a5 n7 Q+ S' c
注意:由于部分操作需要进入特定目录下完成,导致命令行提示符较长如:
% j' `0 C/ u& @9 {( Q8 o
# O: B1 j5 H" r9 mlinux@ubuntu:~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01$
; m% e) t) f- T
9 P. O1 o% ~: x9 D( E. A& P; X; q过长的命令行提示符不便于文档编写,所以本文中所有命令行提示符均忽略了当前工作目录的显示,命令行提示符不代表当前目录,具体当前操作是在哪个目录下完成,请结合文档上下文确定。4 n) x. ^: z1 |$ f" V
) m2 v, a- ?0 }% S$ |+ E
1 章 源码编译
5 _% ?9 w% G( n, L编译环境配置" A* C* V! x+ e& j: s/ U
源码目录结构
2 i* \4 R& a# z# K3 y
由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。
/ N. L5 V7 a' X9 u, u
9 X% j% ~7 m% D+ q' ?) |4 f在用户home目录下建立fs-mp1a文件夹。  b) A! v3 q# M! _8 a/ ~( J0 |

! l) O3 ^7 ], S. ]linux@ubuntu:$ cd ~7 Q, d# G8 i- P3 w9 a3 [

" m$ u' S' d+ N* Nlinux@ubuntu:$ mkdir fs-mp1a
# H  v9 K: _, U3 |+ u
; X9 a7 ]+ O  {6 Z1 ?) e将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹1 o8 l$ V7 c2 i* ~. W6 _
/ k+ x$ T! Q6 J; L3 K  z: j0 C
linux@ubuntu: $ cd ~/fs-mp1a8 d  f$ Z  Z' O6 L

; A* k% ^: P  g5 c2 K: Blinux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools
' S8 W7 I' e+ w1 e/ G$ u4 @0 T
20210803094827427.png ! \2 i/ @6 O, e) y) n
0 c6 @% n9 W0 e
请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。
( [# |0 R5 w6 I. Z; n4 A$ G0 |/ c7 k/ `
SDK工具链安装+ J& x* h6 t2 h$ A( i/ J
OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。: M6 i$ s+ l: Q
: R0 X9 N$ V- C/ R- D3 \
开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。
* D8 Q7 K4 A$ K! i! j6 e3 O( J7 {8 q% J5 `
将资料光盘下【华清远见-FS-MP1A开发资料\01-工具软件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz复制到ubuntu主机中,可以采用共享文件夹的方式也可以使用tfp方式将文件存入FS-MP1A源码目录下的tools文件夹下进行解压。. L. @* j5 z4 ?4 _* p: O
% Z) W5 v) l# f4 d( a- r: q/ i
linux@ubuntu: $ tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz  -C  /home/linux/fs-mp1a/tools/
+ N% W% m8 c: r! X4 o- f, o$ Y! C" q: h3 C4 e
解压之后得到sdk目录,进入到sdk文件夹之后内容如下。
, r& K" |6 X& Q8 t/ M5 ]( ` 20210803094838667.png
2 U2 ?8 B: C* z& A5 n/ G/ z
! q  O( ~3 Y6 h& L8 h! l: [- I执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。  G3 J/ S: g5 W& G" s
' N3 M- U) L7 M# P3 v% _1 r$ i7 X
linux@ubuntu: $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh1 A+ {0 [6 Y  y* o" ?! w( {

' T+ W& ?8 K; o5 G: M& T运行之后会提示输入安装位置,直接按回车键默认即可:
" G3 R' u+ @1 d1 }& P: i0 F* v, M9 p) p* K/ m
20210803094851348.png
! j& O" z, u5 _. |5 s" s  C+ B( s2 @" N3 |& j1 e2 o* q/ X
继续询问是否安装SDK,输入Y,回车* [) U' Q7 I# v, t/ S* s
4 E" d: q6 V! u% N. W% j. T
20210803094900197.png 8 P" [3 W/ M  \" E
- Q/ S+ X0 V) U- G+ s# A, J
默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。4 w- r$ W0 q) ]4 ~$ X( R% h( K7 s

$ w3 ?$ b% M! j 20210803094938733.png
3 b4 y; [- C1 D8 d" H. T( ?, o/ m- c0 `+ n( W8 r7 w
输入密码后等待安装,安装后显示如下:
# p+ i( d- ?7 V& X  W* q, H' Q, w3 l& l7 B/ j
20210803094950642.png
* W- E% y  o0 a' g
7 s9 k. I% o, Q) R9 ~) S! d7 X导入sdk# o1 j# h  ?; V  N1 w. e& D' c
, k8 w. s  r0 m+ Q$ v$ Z- D6 |
linux@ubuntu: $ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
# y7 L/ q# W, N  N; v' C2 T" p1 @5 y
* X, B' c2 X9 M9 p* a* U  ]% e/ ?验证开发工具是否安装正确,显示版本信息如下图所示。
8 h" j  m* T- S- j4 E8 O" H3 D2 g' H  `& a8 h+ Z- `
linux@ubuntu: $ $CC --version
. @  q- g4 ]. i' G9 t  {, G
+ T. v3 u+ @4 e 20210803095001792.png
; U+ ~5 |! [! @* \7 \3 ]: g$ n4 b0 B3 `
源码导入
" p9 V' l% N7 ]
1.Bootloader源码& T  g1 \- P9 u" \& ?. h
将光盘资料中下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中3 |' w% |2 v9 x
% Y7 Z/ y: q; m5 n9 _- W
20210803095012397.png
  D/ \! L- k% w3 @) P; f$ d8 f  n8 I8 d3 A' o! E
将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹2 }3 H% Z# U# `, C8 d7 z' f

2 i; y2 D+ E) g3 i- slinux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz
- j3 R& b  N, }  T5 G) a1 A! M0 m3 c) z! J$ R+ i# }' P2 _, a$ N
20210803095020264.png # o6 @9 Q" J2 \% Y

2 ?, U5 n1 C- T2.trusted-firmware源码
' O! E" F2 N# z3 E- }0 u6 j; [将光盘资料中下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中
) N" i; G6 p2 v4 L# h4 @8 K7 u6 g5 n* Z& r- c9 l
20210803095031217.png
+ |, V( T7 \" Z$ l1 T5 K/ Y( G$ k' H0 u. r- Y4 h' u
将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹1 j, X# n  m6 E* y7 F

0 `& T; q: I5 i2 ^( x- Llinux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz/ z- J% S7 ]8 t

7 v7 e/ U% j( k. g/ x 20210803095040662.png # l/ z$ t" j& ?: R! g8 {+ m

. N1 h3 B: M4 J) \3.optee_os源码, _" ^! B7 G4 F6 d# t
将光盘资料中下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中* `! E7 o! Y  A: E0 a

# A  a: M$ f' k3 M 20210803095050539.png ; }6 |: y0 Y9 q0 W. {6 q

: a# R$ n# X1 v/ o- k" c3 _将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹, b% J: T5 o" o# D2 ]# x3 E

6 s% O1 V% v) Z: j/ llinux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz) I6 f; n/ G/ u! P/ u! U7 z
- J$ ^% E3 L( w) i, I/ @/ z2 r" R  v
20210803095059641.png
6 y% }- J- ]- U/ ~; g& A9 \/ u0 b
  i% h' e6 L6 E4.linux源码
( q  ?2 t. ?6 v6 w! c  盘资料中下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中
# c- |! J- w$ {, X" D) E' U9 `1 v- N/ H, [* f& p& y- B5 s! W
20210803095108787.png , A( Q: X! |4 B  |2 b, X8 l
; c; k4 q% W+ G& |
将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹
5 m+ K6 n" O/ K0 l
5 C3 m; d/ f- y( j* u! c5 v. j" rlinux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz
3 t. u, t9 }; d' I9 C$ y
' Q" T6 c4 t% A+ e% `$ l" M. } 20210803095116810.png
5 `6 r) l9 P! J9 [- R  g. P* b3 x  U  R( S1 p
5.Yocto源码& N: z" F2 K9 r  O0 D) I$ d% w
盘资料中下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下
/ C, N8 ?5 g1 e: v- B
* ]9 \% h+ T9 F+ P" Z0 m4 Y3 L 20210803095125219.png + j; g/ a& j* J% C( K, O. f

) S3 {/ l( S* w8 \  f将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹" A9 i4 g" ~4 I7 w# H3 v: p; ]7 f

" Z6 R/ Z, w/ f9 |( E1 xlinux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz7 Z3 x  q- N9 p) \" z

% b7 @: V, c' ?" q0 t+ ]* b 20210803095133868.png
8 M+ W, c9 L2 V. |9 A
& [4 W4 A' A; h( w# q4 O盘资料中下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。; F% F  L! L3 T# i

" C+ X& P5 Y4 F 20210803095145159.png 8 R! U/ [* A: {& r

5 ~+ W2 ^" P, u7 e# p/ P( Y将downloads.tar.xz解压之后得到downloads文件夹。$ l, m" z. F) W0 h
0 E0 W8 M! Z7 x0 F
linux@ubuntu:$ tar -xvf downloads.tar.xz) _# ~# E. F# |! Z

0 v; l" k) S" N, ^8 G# P' j$ G 20210803095154106.png " r1 |/ v; m/ G3 H

( J" n; C( X5 F' j4 ^$ U至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。" F: e0 f& l. ~4 y6 R
6 `5 Y. c6 Y- m+ C+ s4 q, e
20210803095202127.png
+ M# x% ~5 K& x9 Q+ K
6 |* j& ^) Z5 qu-boot源码编译

& q! Z$ Y. [% l) t# _1.导入交叉编译工具链并验证6 [" U5 f: _: d0 K/ \+ Z- ?
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
! R4 T/ Z0 ~/ T# h/ e" q# u/ z' }7 ]; i
linux@ubuntu:$ $CC --version
3 j% R0 f) K& c  Q; {8 R8 c. u2 y! Q" |) o( C. y
20210803095211769.png 1 C0 `, U( P" S6 i* W6 [/ D# C
9 ]9 D' H7 Y5 N% h6 `5 F" g
2.将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。  z- d+ f8 A! t( g4 Q
linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01- v5 b2 f0 h. o

, K& k) R3 n' o' \: ?9 E 20210803095223991.png
' ], d+ ]- D3 n' M5 n8 \1 P6 |9 U, x1 K  b5 l+ ^& M6 ]9 e
3.导入配置文件。& z0 Z, l6 e# c8 e, l
fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。4 a! @9 D. C: h

& p4 G' S! F( F/ t; n5 ]1 W+ ? 20210803095233351.png , ^% Y) Q6 K2 ^4 R

+ X( o* n% |: ]) ~- K$ d0 E这里使用trusted配置来编译6 U8 G& _& l1 C; b4 r7 @6 z& G0 O

- _8 {& W, R0 R- E' x- d. v; c2 Qlinux@ubuntu:$ make stm32mp15_trusted_defconfig5 W) S/ W, K* M5 [! t
; u( S0 ~) h. k" }0 P& n7 b
20210803095241413.png ( ~# L: f4 c, Q/ Y. U& y, g' a

  c, i! z1 ]0 L4.编译源码
$ A" f/ [# F2 x! F; m7 Xlinux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all, Q/ ]: ^$ @3 i5 t7 V5 D4 K$ h' N2 e

- f8 g8 F: H! b4 Z编译完成后得到u-boot.img文件
- D% s8 ~: O4 |" x, \2 I- n0 A2 {6 Z8 K8 _0 |) _' O* L, x8 c  j  i
20210803095251421.png
2 m$ W, V- q4 V$ O+ h% G; C) x) U( ^, m3 t( B4 H+ y  p) ~
5.使用Makefile.sdk编译
5 W+ @, c4 d" d除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。
* d5 m& l- k9 j
: Y* U* t( {; c- [linux@ubuntu:$ make distclean1 d% B5 V; @2 h/ o2 y6 F- }
, }% I9 `& b* y3 R
6.编译basic镜像7 k' y4 d5 f# l) c
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_basic_defconfig,basic,u-boot.img7 l; a8 q- u% R

1 D. \0 S# B( b* q编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像; a% t, I0 E* m6 j/ T3 @

  w9 [% ]6 `$ w 20210803095301289.png
- L- I- N* Z1 g3 E& z$ H
) M- P; |+ K/ v) Y6 k/ b7.编译trusted镜像1 h( N, W  M; x, X5 Q
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,trusted,u-boot.stm32
2 Y( U/ [1 C4 q& p
8 `! |! N( E8 d$ z; D* d编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像+ S: _( c: v/ L& f. |0 p$ b
5 d" l% C0 k4 |  A1 ~3 P
2021080309530930.png ) g1 P: e  u- T5 j* z2 e- x' N

: @# p5 e; {) L) `4 n) V8.编译optee镜像
, K- e( h: y3 s& S$ g# n9 Zlinux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32
. ?" c+ E0 E3 v: C+ E' n5 ^' b( }' C( }# T$ F  x8 j7 B
编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像$ v# I! c! Q% F6 u& J% K) H

% Q$ Z! ?. r0 `/ o+ W6 K* D8 n2 q. Q% v 20210803095318637.png
; ]/ f  C: I8 U( l! o
% y* H. ]; E! h" }9.编译basic、trusted、optee三种镜像- Q% i8 ?4 Y* {
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all( X6 o# o& o2 w' U; l0 J

5 T" ?8 c9 ^3 l编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。% b- f: [6 c. Z0 q

8 p( x' ^( _# R$ t 20210803095329955.png
2 l6 f- W) g; s7 F# [5 L9 D! s4 l) ]% N6 |' F
10.tf-a源码编译
6 E- v# x7 ?3 Z6 y导入交叉编译工具链并验证/ a% [  i5 e, ~) U% `, }" Y
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi. n4 s" I( \; W" A* z
2 v: a2 \/ T4 }+ H5 l) Q1 S
linux@ubuntu:$ $CC --version, Z, E1 d: C9 y
7 G8 q# \5 F" D- K3 s
20210803095339955.png
9 w& d* `3 w0 h% z. H. @
5 ~) J3 r( i+ f7 o11.将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。
& t% P: w. P) R# y/ b  Hlinux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2) H& h' z, i" }4 T' h

+ u, `; q6 k1 y  c* t& F. H9 O12.编译trusted镜像
, i7 Y8 F2 \4 w$ V, H+ y8 ^# ]linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all
- X  S% }6 V; |( `
, G( @0 c3 t. T) ^. N7 v* d; r5 ]# r编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。
. W7 D( {0 l8 L8 h
9 Z) l9 _- U5 D8 @/ Q# S$ O 20210803095348665.png
# a1 L* c# N: T4 f4 {, t
3 c6 Q3 y& _  H1 `# ~' Y5 k$ u. u# Y13.编译optee镜像; A1 J  a$ w% G: M2 k, f
linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=optee ELF_DEBUG_ENABLE='1' all
7 F9 d$ ~4 W" h. R8 |$ J, k6 ~0 d* v5 v7 c( E1 s/ g* Z
编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。0 z1 o5 T1 }4 @- q6 s

: z& W2 J1 z4 ~ 202108030953574.png
0 V( M7 ~% Z5 K
8 q0 }% E8 k. F! S14.编译trusted、optee两种镜像, p; L' L. N; Q/ D- @: t( C
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all
& j, e: _! A+ K9 ^8 i' p) f5 x& D1 k* H0 d4 L6 s& Q
编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。
5 ]$ n, `0 z1 ^7 W1 `' f; H1 B& y0 x) E) B1 H9 w$ ?2 K1 O, D1 \
2021080309541166.png 3 q, j" r8 u3 Z$ Q  g: J

5 P* f: c0 ^9 D2 a6 `% ?2 n* N( V15.optee-os源码编译
' `! `/ ]& D* h* ?2 Q6 c导入交叉编译工具链并验证
* z  _0 q; F7 D+ v$ V: Wlinux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
: J0 W1 ]" `# ?- t  o: f! ~& ^+ N; `+ {6 a- B9 @; N& t: [
linux@ubuntu:$ $CC --version4 p- h* a6 \1 j; f

: Y+ v# ?; h3 s- U; r: {& E 20210803095419809.png
% }) b# r$ u: N. O! n% q* A- [0 X1 v$ d% m; v
16.将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。
1 v: W1 y7 R1 h* jlinux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0
+ {" I  v3 i( [4 d2 M3 g" a$ U' V1 m+ t+ x
20210803095426803.png , \& R* ?1 T$ g' a

# O, i3 J' H% n* Z! _17.编译源码
8 T/ l' g% ~7 O4 v) mlinux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a
* d7 U& s1 j8 H: N' |5 z8 E
) q4 o; F8 F1 Q, h; P编译成功之后会在上级目录下生成build目录其目录下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。
: R' M, x. R" F6 H# H1 ~  R1 g9 y7 c  `! L
20210803095435598.png
8 N; ?6 _* {- w; c( f2 g( H7 w, ^8 r) E( a/ M3 H( s
18.linux源码编译
* P$ W% d3 E; ]! t- k导入交叉编译工具链并验证
8 U0 y1 E9 P  M3 E( E6 olinux@ubuntu:$ linux@ubuntu source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi1 M6 x& `' j1 \% G" T! Y6 ]

, _: K/ F% M" L2 l" ulinux@ubuntu:$ $CC --version+ d# B2 B/ j* L' ^$ z5 g9 k+ E

* ~5 I. o& m. F 2021080309544686.png
" Z) `9 J! r# n" w4 y$ {+ Y
. q& V/ }* C, u8 Q19.将工作目录切换到fsmp1a-linux-5.4.31源码目录下。! l/ U+ H0 \% v' |
linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31
- E7 Y' I. ~- Q, U8 B2 b
4 x/ j" f3 V8 M3 m& b3 W# `& x 20210803095454698.png
8 \! C5 i$ Y0 v$ i6 n: y
0 ~) w  o$ d% }20.导入配置文件
5 a5 U% g$ M; W: t% _$ O' {( e! V$ |linux@ubuntu:$ make stm32_fsmp1a_defconfig$ ?9 }3 t, t8 N5 r

1 Q( t& g5 x- e, L 20210803095501641.png 8 a( \+ u- |1 I% {
7 s+ ?& ~* ~+ k) g0 j) X4 z
如果需要修改配置可以使用如下命令来启动menuconfig
* ?1 t  z* ?' ]3 s9 w! I0 v3 J. S- y1 n7 T9 I
linux@ubuntu:$ make menuconfig' a/ B, l- {/ H! ^3 W
" T5 a( u( `# O
20210803095510810.png - R( M+ O1 A/ B$ G+ D$ z  f2 A# K# O

$ }' x2 N5 r* P' d; q21.编译内核镜像
5 i- y! z/ X3 d) V) h5 M# j" ?linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
% ]: N$ H% Z) W' v, H
5 j+ t6 z, [6 @* }- E: b* E编译成功之后会在arch/arm/boot/目录下生成uImage文件
, j1 o$ n, I! \4 T  `& g# |& E- N; J+ y- c2 K! E
20210803095520633.png & ]! S2 V7 H- ]0 _3 y- q2 ]4 q

3 S. R$ i" B, h5 V7 c在源码目录下生成用于调试的vmlinux文件
4 X& `2 H. L0 w) S3 l5 T7 `; S/ g2 Y6 P! [
20210803095528696.png ) p* W6 d0 F  f& J! [6 k( w
$ o" i' z' E1 Q4 n/ F" |+ A
22.编译设备树文件( j) @' |5 @' [. j4 e$ N
linux@ubuntu:$ make ARCH=arm dtbs
, t. ^* p/ G9 J- v) d$ f) O5 L: p. h3 a
编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件5 u0 h' W9 D% L/ {- t6 g1 t3 b

6 m, f  A- n; f$ M2 C 20210803095536130.png
! U# X' N! L$ f2 V- t7 Y0 n! _! e/ f. Z) h, ]' ?2 }
stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件
+ o6 R! x3 g* z7 n5 |0 e# f) p# ]4 E* h. I% Z) z& ^
stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件0 i- A9 r2 z. o3 B* {8 J$ ~5 x
) T+ c0 [7 O2 Q3 P8 E! ]" h  {
23.编译内核模块
$ k- U, n" w3 }2 Q6 ~1 U# E7 glinux@ubuntu:$ make ARCH=arm modules
6 d; h; C- Y  c+ f
8 a8 P+ q, v5 J- g" K, llinux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install1 R- \1 [0 `0 j+ l* K& u5 T& g

" |5 B- N3 V+ K3 r! X) q编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。# y/ f" `% G# E: O' |6 ]  v
- ~. u1 E/ L6 e
24.Yocto构建系统
3 V  k' S' k0 b将工作目录切换到fsmp1a-ST-Yocto源码目录下。
  b# c) N8 T; flinux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto* k7 |9 ^0 u1 M' G2 b- l3 y( }( S
& @9 Z  N) I7 x# J0 I
20210803095546757.png
3 W" D7 P' {* K6 H+ T# N; ^' e+ ]+ ~0 h  e: p% u
25.导入编译配置
; A% e- B1 i8 n4 s# |linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh8 n9 C( ]3 v6 o8 M

. D7 g+ ~! U9 x3 L- k8 K: z/ G如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y& }1 D9 w& q. B5 i
8 j! N% p- x( u) }2 i
20210803095555842.png / J! K, w9 x- e0 L
7 I3 H2 g& K$ D5 w
如果是第一次配置,需要同意一些协议,输入y。。
/ ?+ H( \9 V' C0 H1 A1 Y0 \* l" ?- j8 W9 C- h" A7 t0 D8 ~! J9 |5 h
20210803095605423.png # \2 J0 _# G1 [& q

( W4 W, z( [- [' H之后按空格键到协议底部
2 l' ~* @% b: J! |" f  y: c# V  S4 Y) T' u3 I5 A
20210803095619321.png ! b# h/ p& M2 \1 L
4 z5 j6 M# b" u- J: k" j
输入y会出现如下界面: p) k1 u) D' @2 M0 {0 l

" d. ^+ j$ k6 M4 t+ q( ?* r 20210803095624874.png
- K- C+ F8 n+ @# u1 c7 |) t% A; I4 Z3 f9 F! J! x8 A: T
26.编译源码6 Y3 m# n" D# r6 m0 V0 P9 Y
linux@ubuntu:$ bitbake fs-mp1a-weston
4 @* w# k1 x, u6 K" D% R; a
* R# X1 w6 N; {. W( d4 D注意:在编译Yocto系统时确保ubuntu主机可以连接互联网
. I- F9 x8 W0 }2 R5 ?$ t) @* }: G+ Q" g
由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。
+ w" ]4 a. o* {, i3 P) a
; g* @! R$ G5 _) m编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。
# @2 ~" E# K3 ]# ^+ Z3 S) ?" g3 ^: ^( |0 C
这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。" D% L" ~  G+ `3 N: s8 ~! j' `) d% o8 k
: I  I/ ~, X# @& N  [* a& M
basic专有镜像: P. J8 P% z, }/ {
u-boot-spl.stm32-stm32mp157a-fsmp1a-basic
  e! t4 z! ~9 p9 p2 K! {" ?# |' ?1 t1 G4 S
u-boot-stm32mp157a-fsmp1a-basic.img1 `' ^7 c& Z) W  r# }6 T

6 p# K+ `2 x, e; T- wtrusted专有镜像6 p9 }9 P! C: r  G% Q  x% l$ C
tf-a-stm32mp157a-fsmp1a-trusted.stm32
5 k. y" g0 j6 Y, w) F" t  F
9 \9 D, P; K* L; N* Pu-boot-stm32mp157a-fsmp1a-trusted.stm32
, a0 m+ Q4 l& S( a
& A/ J, r2 b7 Coptee专有镜像
( r: o  _9 [# j  _! xtf-a-stm32mp157a-fsmp1a-optee.stm32
! Q  G: S0 Z7 t5 i1 q
$ h7 p9 e, V/ I3 {7 D9 s0 fu-boot-stm32mp157a-fsmp1a-optee.stm32
) Y% }2 z0 r- _' u9 P) o/ X& g; I8 ]/ x. w
tee-header_v2-stm32mp157a-fsmp1a-optee.stm32
4 H- v$ p% K& D
. ]/ B% M' {9 T5 xtee-pageable_v2-stm32mp157a-fsmp1a-optee.stm322 l$ C' V' g5 x; K$ o. N% u& a: k
( m- x+ d: L. p" X& ^
tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32/ N4 ]7 |: E+ C

1 A! R3 q; E) b/ D公用镜像. N6 @* o" z) e( H5 b# H% u
st-image-bootfs-openstlinux-weston-fsmp1a.ext4
4 h0 ^8 t1 T6 x1 f
' F" C1 W6 O/ o3 x* Zst-image-userfs-openstlinux-weston-fsmp1a.ext4) r4 B  _) s- I: ?- j# b2 ~
$ f4 [! c9 E  s; w  \
st-image-vendorfs-openstlinux-weston-fsmp1a.ext43 l( y1 c8 t4 E! i4 y0 U% i
6 A4 ~  Q1 _1 @5 o
fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4
. G9 f: B! y5 W$ m' ?9 D8 U" B8 b
" O  Y' P! S' A* X配置文件" s* m, v! f( ], L! Z' x8 `
flashlayout_fs-mp1a-weston文件夹中存放的是烧写时所使用的配置文件2 i! }3 o" {# w) U! f
# c. f2 o/ W" Z) P: f
由上图可以看到配置文件分为sdcard烧写配置和emmc烧写配置。7 K0 e) \" E* d+ g& Q" O- Q

( s* u, q8 ]7 _1 n% @! R2 e; M1 ?: p- z$ s4 l
————————————————
) X" ]$ r/ L! b7 H2 G版权声明:华清远见IT开放实验室0 T3 N& L, N8 h1 U4 q  A
  Q8 R4 q: u! d7 n& `8 X
' C' k& g" o/ \
赞 收藏 评论0 发布时间:2022-10-1 19:52

举报

0个回答

所属标签

相似技术帖

官网相关资源

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