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

STM32MP157系列教程连载-Linux系统移植篇1:STM32MP1微处理器之源码编译

[复制链接]
STMCU小助手 发布时间:2022-9-29 16:24
关于命令行提示符:
3 n8 l$ x$ ~- z4 |* _+ r) K- J( @& y/ w5 T
在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu上完成还是在开发板上完成,不同操作会有不同的提示符:0 y6 o, `* \6 C) g4 r) h3 A1 z
- U* k9 j+ k6 T  Q- B: U0 p
Ubuntu操作时命令行提示符为:linux@ubuntu:$6 i7 _  o, U% x; T; J7 e
开发板Linux系统下操作时命令行提示符为:root@fsmp1a:$) {( A7 N5 b8 y/ I+ r& v0 f
开发板u-boot期间操作是命令行提示符为:STM32MP>3 f0 `+ i* {0 E
& D6 b! o& b% Y# `& B4 j
注意:由于部分操作需要进入特定目录下完成,导致命令行提示符较长如:1 B+ S8 Z1 [9 x% S- W
' S4 a+ T% |! ^# i- v+ n5 i
linux@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$
) \6 `# l  {" r, d1 N/ v; @8 ^
& @  r& n" ]* B& w/ \过长的命令行提示符不便于文档编写,所以本文中所有命令行提示符均忽略了当前工作目录的显示,命令行提示符不代表当前目录,具体当前操作是在哪个目录下完成,请结合文档上下文确定。
* ^! U" l0 ^) K/ Q( _) L& Z% F/ }- j6 a) T- m
第 1 章 源码编译
5 P+ J/ E) N, b2 v# e, |2 k& s/ C
; `, t, D( D: v( M1.1 编译环境配置
/ o' _8 \. w$ M! H7 G$ \5 A, w# |: m6 Y; \
1.1.1 源码目录结构8 @5 c. |0 E9 r! M0 `6 K) _1 k) P
) v! |3 h5 _1 \
由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。在用户home目录下建立fs-mp1a文件夹。7 j, s: _3 r3 z7 D9 a
9 n7 G- A4 C- e
  1. linux@ubuntu: $ cd ~
    2 i+ U- U6 {4 g. a
  2. linux@ubuntu: $ mkdir fs-mp1a
复制代码
( U! ]7 e+ ~) z" Y0 p1 J
将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹。
- J4 W/ G8 e9 q3 f  L, v- K* v0 g' |
  1. linux@ubuntu: $ cd ~/fs-mp1a7 ]$ g' x) J8 x/ d; \) i% Z" V" i$ I2 U
  2. linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools
复制代码
3 D: |! U, M$ A
20201119165147268.png
$ n6 U7 E( i! S" @3 Q3 g6 T
8 g* m7 j$ n9 H6 x3 b# a请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。8 @* Y' F" B& U

* z! ~& Q" ]! O1.1.2 SDK工具链安装) I. \# {! b5 r

6 J4 @9 [2 Y  Q9 A7 `OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。
# r/ @; X7 G$ \4 C+ m* D5 N; j5 L% p. f) K1 {: _3 n
开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。
% C# M: _0 t$ }" q! t/ H  c  D4 G, j" n; i
将资料光盘下【华清远见-FS-MP1A开发资料\01-工具软件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz复制到ubuntu主机中,可以采用共享文件夹的方式也可以使用tfp方式将文件存入FS-MP1A源码目录下的tools文件夹下进行解压。
4 D. X( q9 t  m9 |, r% g! y8 P, P
; T4 Z6 c/ Q+ R3 \
  1. 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/
复制代码
4 t6 j( ?' s, L# d1 d, p$ Z% d: e
解压之后得到sdk目录,进入到sdk文件夹之后内容如下。
: T+ U4 I) H- o- U) i 20201119165311213.png . y3 B; Q$ d* G/ z' ^# C8 k

0 H& @9 G' @6 [, i/ C5 T2 q执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。
# n4 t) R, ~. C- N. r/ G! k) w
  v+ Z3 F: {/ }4 c9 N/ g4 M
  1. linux@ubuntu: $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh
复制代码
& t# S6 ~3 Z. ~( n. v
运行之后会提示输入安装位置,直接按回车键默认即可:9 j' E/ v1 O! m1 U

$ L# N( G5 v. T/ w& G# G 20201119165402134.png
" p7 E0 Q5 _0 a. J% w5 R5 M7 ]. V/ M! g) r. }! g" Z3 f4 j8 [2 O
继续询问是否安装SDK,输入Y,回车" s! c4 e" ~0 o- N9 c. Y3 f6 T' Y

, x1 e2 `: \6 x/ T3 v, A 20201119165422361.png
# q, `! h; M2 j7 \% E8 k, y4 m
& q1 j0 s5 X. m0 V- @默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。1 z' K; `- @5 D+ s: Z- Y7 o

- C; ]  F; S2 e/ v 20201119165445726.png 1 e8 F+ E" o( L: h
/ I7 ], b+ S& m8 N9 C1 L
输入密码后等待安装,安装后显示如下:
; o' c% e$ k# T7 _# j% B5 M3 E$ n
20201119165513218.png
  L  O) B! ]/ L& J: ~* B4 e7 M: b% f1 ^: y& Z3 w
导入sdk+ U, {4 y; W) y. `. M7 z
1 z! s/ o  S4 K+ \1 u, o! Y
  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
复制代码

# A; u# _$ a- ^验证开发工具是否安装正确,显示版本信息如下图所示。
0 F( [: R% u' n! M
+ z+ N2 b9 H! |3 C5 V* s: p5 `$ b; ]$ k
  1. linux@ubuntu: $ $CC --version
复制代码

' u* K( p3 K6 Q 20201119165605602.png
/ a4 m5 u/ p8 y0 a; O$ I! Q* K5 ~* `6 y" q: Z" Q( k! t- Z
1.1.3 源码导入
0 J- E1 h( i6 ~) E3 P! G! g2 v8 o  z& b/ k
Bootloader源码
$ _0 k8 s+ G, n" z5 I/ s1 r$ ]2 Q* N将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中。
9 L6 Y0 M; A" i8 E
1 }# C5 q7 |5 v 2020111916592589.png
1 O9 B! g% p! o4 I) V, M, }0 Q6 S& Z/ v$ e) `# K9 }
将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹。
2 d+ Y7 x9 V. a% X' @linux@ubuntu tar -xvf u-boot-fsmp1a-2020.01.tar.xz8 @2 f1 H& ?! _& ^& H; `
* V/ y) }$ w3 A6 P( X
20201119170119253.png " Q! r. R8 w( x6 m% W
" _% l. D4 {9 c; }$ P6 a$ Z+ Z
trusted-firmware源码7 F% U) L. g# E: ^
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中
) H6 E" [* }5 |4 O- R1 U
6 R% |) U3 D5 q 20201119170202639.png / c  D2 W) ~- U& N8 r8 s

& x- d3 B# [+ [/ e7 h# G- t: X将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹。! ^: r+ U9 P# T% ^9 e* Q- c& I6 u
  1. linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz
复制代码
. t: m# |1 _& H( ~' L8 R& \
20201119170243357.png
! e: J0 i& T, d  H: ]- o2 G: w
( p8 f1 O6 h  [" voptee_os源码
+ h9 i* C4 f& n+ E: F3 b+ ?将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中。7 L5 a% b8 f+ ?% q0 O+ _

0 ]2 j$ T* T# p* |6 H! V8 A0 Q 20201119170336185.png
" m# K6 `9 u- }7 u5 f! M4 [7 h0 ~7 R! E) f3 x8 O: O$ Q
将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹。
1 J  M& b- ?, R' P
  1. linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz
复制代码

, E. _: [/ {2 j- P1 J% T 20201119170415590.png
) a; I' c5 K4 B; I8 v4 v  C5 M' x
linux源码* w9 Q# `1 `* T, F
盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\linux】下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中。
+ G1 Y6 Y7 E: ^- G
% z0 U  x5 r: T# u) [9 E 20201119170453341.png 8 w9 R$ Y- z5 E- s' d; L( A

$ L' A! o- H  |! u- ?6 v5 A, u将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹。1 ^( L+ M5 L! C; E1 k/ f: L
linux@ubuntu tar -xvf fsmp1a-linux-5.4.31.tar.xz
' L" A5 v0 o" R  Z1 Z. @6 w1 j: N" U! \% q
20201119170537326.png
  t2 y& [! B0 l/ g5 c
+ ~8 Z: V: p8 m! fYocto源码
! N, s1 a  [  Y' l- P3 S, S盘资料中下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下。6 t( s: e6 `9 j& r4 {! B, k

8 P  G. |6 ^. q, D0 o 20201119170622611.png
3 T) a* X: l5 b3 n& h! L6 e% a. p1 Q1 G7 ]/ T
将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹。
% K% f2 [3 c+ s. F/ p9 I
  1. linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz
复制代码

: Z" u$ o% a# {  H" C* T! p 20201119170657907.png
- F( B1 u2 |# }. q6 A# }7 ?$ m% L0 s4 ?/ J$ C& R+ p
盘资料中下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。
! \2 m* w5 `, H$ U
5 ?1 j% a! x1 C/ i7 e  y 20201119170722720.png
! n1 Z; `% t+ b- ~
# J; z% L- E9 P1 C6 k将downloads.tar.xz解压之后得到downloads文件夹。
$ `* A: y8 l* v3 E6 d. O6 X
; O6 `5 C6 K9 s% ~6 ~9 I, Z
  1. linux@ubuntu:$ tar -xvf downloads.tar.xz
复制代码

; N; Z5 U4 w; H  y4 {- i; s3 s 20201119170759251.png 5 r; l7 [7 m6 U
, M  ^* k8 {. w  |) E
至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。
/ M# Y, M  I, ]' ?, y# U4 b8 |8 [+ ?; }$ z; z, |/ [7 T) i/ |& G* Y$ F4 c2 j
20201119170937217.png
* H2 O% f2 t" }! ]. J6 U% D
/ |' u* A! O5 s! [6 F/ v6 K2 a5 Q1.2 u-boot源码编译
6 d% _, W& W7 S! J. B1.导入交叉编译工具链并验证  d6 T7 k! R( J5 [, O9 ?
  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" ^% U1 W0 Q0 x7 l8 D
  2. linux@ubuntu:$ $CC --version
复制代码
- P) O5 W  w, J' P& U2 b6 O! {, Z
20201119171057814.png
6 ?' I) _/ y$ P9 b
0 }& j( ^9 ]( N9 o4 \2) 将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。% _, M. Y/ v2 M! M8 F: n% P% f; O- I
8 y3 T! s( Y7 ~/ ~
  1. linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01
复制代码
% H0 D( L' L" L% A# K
20201119171148326.png
6 y# G" k$ ^4 \9 a
& s# y' K, W/ b* I2 i/ u' v; q3) 导入配置文件。
1 Z0 w. ?, {# Cfsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。
* t2 H8 `" @& }+ ]# ~6 _6 p4 u& W) v6 `9 ?4 T. Y# ]% C
20201119171216176.png
, }. M- C2 W5 @. J$ y
0 }: v5 M3 N, Y4 [这里使用trusted配置来编译。
& v% m2 Q  l1 L& m
6 Z! [* g. b( m- P% B0 \7 d  l
  1. linux@ubuntu:$ make stm32mp15_trusted_defconfig
复制代码

8 c8 V' Y/ \* |* k 20201119171253636.png
1 N% h5 S5 X. l; _
: P; P' F# x' m* |8 t" o5 q4) 编译源码
5 g2 x" y# q" d: o4 S/ n, Z% W" E' T  a! K/ A: u
  1. linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all
复制代码
编译完成后得到u-boot.img文件。
, J+ S9 H- Q* B) n' y' p2 h  n
3 r4 d8 p* o  D, W5 r% X 20201119171335781.png 8 j- }+ Q  s! |: O7 V% Y

! H+ Z9 k; ?+ c3 M3 r使用Makefile.sdk编译
' |9 d2 e0 i" z除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。
5 J6 w3 p/ N: [8 z8 N, M
  1. linux@ubuntu:$ make distclean
复制代码
$ Q; P1 z3 `' o# |$ U( D, b
编译basic镜像6 X4 v6 r# c1 W6 d& P$ E5 X
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_basic_defconfig,basic,u-boot.img
复制代码
' U! W  B9 O4 p7 [9 V
编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像' V, e: S! w/ x, x
4 l0 J! X" H4 l% }
20201119171935168.png   z4 o0 ?5 i* I* A' M. ?

% E" Z3 A( X5 Q# ?# Z编译trusted镜像0 p. ~/ ~7 E3 `
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,trusted,u-boot.stm32
复制代码

6 _4 P8 ]4 S; V! D9 z, t! ~5 ^3 N编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像。
' S! S- q' v( H* ?) U4 k; |# j# @9 V7 l+ Y, R" p1 N, J
20201119172020435.png ; J% o& Q. w' M1 X* N
' G- z5 @& u0 y5 B
编译optee镜像! M7 Y; [- K$ R9 |# ]; d# s
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32
复制代码

/ L& p) W4 o( o/ n: T7 E( B编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像。
! h. _4 J- _0 [: k8 X! Q2 C6 S. H" {( O4 U4 R4 b2 I+ }
20201119172106456.png
! ]& ]: T/ Y2 y" b, g/ i5 U: F; @; r
编译basic、trusted、optee三种镜像
& Y' ]+ l, @5 w4 u' H
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk all
复制代码
编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。: o/ {0 F% J# h) {& q" C
) a' t8 f( h" u/ {5 _1 I1 n
2020111917215613.png ; T. v0 ]# a8 Z; D
- M9 b" a9 F$ ?2 K: V+ a. R7 N
1.3 tf-a源码编译( d8 U. w( t5 Y+ `! W' v) q& ^
1.导入交叉编译工具链并验证
% z" `& A0 n$ I1 _5 x在这里插入代码片linux@ubuntu source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi& i* Y) A( y8 f3 b( w" i
linux@ubuntu $CC --version
7 Z5 b# ~4 p- J( y& W; \7 |# k7 |' U; @' n/ {0 Q: ?
20201119172515388.png   U5 v1 K$ U* A. F
+ s0 G  T3 o' M2 B+ {* O
2) 将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。) X& b' g. @& x1 b( r) \2 \; y
4 F$ s' V9 E' s* y
  1. linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2
复制代码
编译trusted镜像
8 I6 K# e# t! U$ g, T7 a
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all
复制代码
7 y# v! k' A* E, b
编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。
  ?4 S6 {" b$ O* w' {" U: c) Q0 b$ z$ T( g9 @  \
20201119172630690.png
( @' |! J* O# ~$ x# j: p' f0 l% A2 t3 R
编译optee镜像! }; ~8 G. N7 o1 e7 y4 n
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=optee ELF_DEBUG_ENABLE='1' all
复制代码
4 ]- H$ r8 u6 A6 ]
编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。
( i) R+ C: L5 U" ?& I1 p. m+ _+ b, `# a1 y& p" A& ~7 g
2020111917272097.png - j: F, ?* z# R) Y7 V

# `8 W4 N; A7 u4 W编译trusted、optee两种镜像8 C1 }  `2 m. G$ i3 F- G6 U; r3 c
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk all
复制代码
$ e8 M3 y. w/ P8 }% W/ x
编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。
! i; ~% S+ Y6 G2 w7 _/ c# R- }$ M
, q& p" O8 K3 W 20201119172832324.png
' g5 F* o) T) [, n/ Y9 r/ J2 E& ^; o* N4 H' A% l7 o# v
1.4 optee-os源码编译
' }5 h" G* q7 W  F. ]: R

2 M. d5 R2 \3 q( }4 A6 p; c3 }导入交叉编译工具链并验证$ x6 z7 D7 f, ]6 c* B$ |$ M7 n
  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+ N; f7 W* |# |4 E6 o: W* g: Q
  2. linux@ubuntu:$ $CC --version
复制代码

( R$ `) t5 {$ V  e 20201119172920255.png , ?) Q1 ]" G1 h9 s$ M/ D  c
! j5 W$ L; ?( B, `8 R$ z
2) 将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。8 \4 j/ z6 o+ ^7 s* l

6 m: I  t2 Y8 W6 K1 m1 {' }# N/ w
  1. linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0
复制代码

6 ^8 n7 S) K7 R( P7 Q 20201119173029139.png
( p! l8 F# a& W9 z0 x* h
, |4 r8 b+ h2 m6 |# t5 }2 q3) 编译源码
, L! m( M) @: i% a  t# j) I; L/ _5 p7 t# W0 `
  1. linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a
复制代码
编译成功之后会在上级目录下生成build目录其目录下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。
: C3 D; R4 j; `4 E9 z) |. X# r2 _+ X4 e* o/ Y# }. [7 ^
20201119173218465.png
5 w. S& C" z( s5 w7 }- F  I' U4 j( @8 l, q
1.5 linux源码编译
5 \5 u2 X7 R' W3 P) U1.导入交叉编译工具链并验证
. e6 a/ Y4 |" X' ?3 h" m- _( n
  1. linux@ubuntu:$ linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi5 b% P1 q+ n' V
  2. linux@ubuntu:$ $CC --version
复制代码
5 O  k" F# k  p) h# \
20201119173300314.png
5 Q" p& i' G( ^- G7 U, D, J5 |' R$ _7 q
2) 将工作目录切换到fsmp1a-linux-5.4.31源码目录下。
8 ^( [  d: e' v
$ Y5 _/ o' s! d
  1. linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31
复制代码

6 d$ N% z% k; o: s 20201119173448618.png
5 e/ C; A! G+ x4 i  A4 c$ N
- k, E  p9 F- j$ \0 |3) 导入配置文件
. J5 t8 P& r' n& g
& n1 g5 Y! q( G4 {7 u& r3 |linux@ubuntu make stm32_fsmp1a_defconfig3 E8 ?$ J- n2 ?4 U% x* c( z6 \

8 {/ R) {9 r+ [/ G8 ]: l! E/ f 20201119173518792.png
. K5 L7 |; r  o3 d8 y2 K: ]8 r- h
如果需要修改配置可以使用如下命令来启动menuconfig。
  1. linux@ubuntu:$ make menuconfig
复制代码

5 ]. u' x0 P. x  i' J4 x) Y: H7 w 20201119173552807.png
; g3 l9 A. L$ f* _0 f
! E7 x2 Q5 K( c* H. {2 Q4) 编译内核镜像
! V5 q  C2 W% Y  w
, L' w/ `% @6 {! s( {$ Z1 V4 J
  1. linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
复制代码
+ O/ L0 h3 y! ?  l3 H0 p6 K
编译成功之后会在arch/arm/boot/目录下生成uImage文件。% T! d; ^" T9 W& Y+ w- U

  R8 K$ W& @+ X4 }/ D. M0 ?# b& h 20201119173649265.png
' ?; i, P! B3 {' ^8 p5 t5 |
; S2 J1 Q' k) @" u8 \在源码目录下生成用于调试的vmlinux文件。! x! l1 |) h1 ]$ h

/ r, f' V* G  Z2 e! H, Z 20201119173714298.png ' w+ t1 R4 S% Q+ v2 T# n
2 B- v* T) c" c9 I# u6 m! c! i) `
5) 编译设备树文件
2 G& |) N" G3 Z' S/ T" [' J+ g3 ^$ m% N8 V; D* Z: A; C
  1. linux@ubuntu:$ make ARCH=arm dtbs
复制代码
编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件。
) f8 x. m/ ]% ^1 \9 y8 k) A3 L5 M9 ?) x& p; V7 {- Q
20201119173754972.png % r6 k; e) Z: M9 ]% i

: F3 S2 ?5 ~: ~8 V; Vstm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件
% F# x8 W& I6 |' d7 N2 Nstm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件
# [% ^9 I6 D" b; |- o+ b  Q5 x9 F% k' F) N7 i: u
6.编译内核模块
% I# l8 S. D1 E& b0 G# u
  1. linux@ubuntu:$ make ARCH=arm modules
    . _4 L" y) d" R  J6 U1 N3 Y
  2. linux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install
复制代码
& F5 ]) P. h2 K2 r- u  Z
编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。
6 D  e9 \. N6 d2 R2 C4 H$ [* u; M$ y  n# l% ]
1.6 Yocto构建系统2 m9 G8 D: b. V8 P) E- K  t
1.将工作目录切换到fsmp1a-ST-Yocto源码目录下。
$ e/ c6 Q3 G7 [: S) b+ A7 p5 t
  1. linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto
复制代码
0 G6 ~7 Z/ J" |* W
20201119173909532.png 5 @6 l$ F/ c: s# F; R

1 e6 g& o1 p7 }( ^2 n, C$ R2) 导入编译配置
, T; w, x( |' u
9 }1 K' F2 l* M! f
  1. linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh
复制代码
3 V' ~, R1 [: _
如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y。
8 E9 \. l" ~( O2 o! V/ ^
0 E- R- ^" @- U  k1 O 20201119173950346.png 0 Q# }( j# H: Q6 j" |" j

8 z; p, A" G! q/ X如果是第一次配置,需要同意一些协议,输入y。% y: J, x8 ?" \7 q" y1 @
: S* \" M: u3 d) n8 U7 \  R* Y
20201119174015803.png
+ [; L1 O1 M' R: {. H3 R. s
* T4 E2 w5 F+ ~; G) R5 n  |! @- O之后按空格键到协议底部。6 d" L  ^$ {# x4 r/ [/ [
5 I1 A- c' U7 q: y( G1 d2 F1 E
20201119174038277.png
+ A+ q6 O2 J" K( q7 c, m( s4 T
6 f2 ^7 I$ v! h3 O+ j输入y会出现如下界面。) n" s9 M0 |. q' K0 c1 S. Y

" z! _. x2 }% x 20201119174104919.png 2 M7 t. }: d, s$ b( S* T" f

) R9 P+ L& G# e# J* r  Y3) 编译源码
9 [8 ?* i, g  L, F% C7 `1 I& X7 l$ o3 i
+ J# t9 ^% I2 U
  1. linux@ubuntu:$ bitbake fs-mp1a-weston
复制代码
注意:在编译Yocto系统时确保ubuntu主机可以连接互联网
; J; e2 Y# m4 {由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。8 ~% w, E! ~; d$ J: x+ r$ B
编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。
- {. g! J4 }4 G* F( P* W2 G( X- d; w! a
6 w2 A/ Y# o0 t( o) j这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。
+ ?& T$ e* O( {  a2 {, Z7 W4 w, R; ~
basic专有镜像
  a! p" G4 @9 J
  1. u-boot-spl.stm32-stm32mp157a-fsmp1a-basic
    + N! k! q3 F% y+ k+ I
  2. u-boot-stm32mp157a-fsmp1a-basic.img
复制代码

, m9 m5 k. h7 s, k! a3 E! l. ztrusted专有镜像4 f7 w9 y0 Q3 q9 A! _6 X' p
  1. tf-a-stm32mp157a-fsmp1a-trusted.stm32
    ! U, G3 H0 z' f" B( S
  2. u-boot-stm32mp157a-fsmp1a-trusted.stm32
复制代码
! U; O9 v7 i: f
optee专有镜像
+ ?/ R; C( E" L7 R/ l* o* f9 _
  1. tf-a-stm32mp157a-fsmp1a-optee.stm32
    $ q! z- l9 t0 i/ e4 [2 x/ o
  2. u-boot-stm32mp157a-fsmp1a-optee.stm32! L6 }" R6 p0 [8 t8 m) P
  3. tee-header_v2-stm32mp157a-fsmp1a-optee.stm32& T3 C+ y1 q/ Q2 X# [1 E1 B
  4. tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32
    2 k- j( |, R9 H5 S$ w0 l/ J8 C) j. z3 ^
  5. tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32
复制代码
7 h9 Y8 x# W% |
公用镜像
7 l$ U  h1 a3 L( N
  1. st-image-bootfs-openstlinux-weston-fsmp1a.ext4
    6 i. w3 M5 D% e% s! w, Z) t8 b: _
  2. st-image-userfs-openstlinux-weston-fsmp1a.ext43 `' L. [) D, R3 p( |/ i
  3. st-image-vendorfs-openstlinux-weston-fsmp1a.ext4
    % O. Z2 j+ h* v5 E( [
  4. fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4
复制代码

4 q8 \) t* D6 w7 m3 ~2 m配置文件" ~! W" d9 W4 t6 K
flashlayout_fs-mp1a-weston文件夹中存放的是烧写时所使用的配置文件。2 w5 W+ r( g+ S% q9 M) ]
————————————————
) _$ t+ a2 Q" A: D* F( J, Z7 T. n版权声明:左月先生
' R8 |5 ~# y. X( j+ N: |- t& l# a, B

! P% L" \5 M. h/ O
收藏 评论0 发布时间:2022-9-29 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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