STMCU小助手
发布时间:2022-10-1 19:52
|
系统移植前说明4 `. n: H! i; v& H/ E0 D( w; j( ? 关于命令行提示符: # l& b- W! Q9 _1 V, g4 _" e 在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu上完成还是在开发板上完成,不同操作会有不同的提示符: Ubuntu操作时命令行提示符为:linux@ubuntu:$ 开发板Linux系统下操作时命令行提示符为:root@fsmp1a:$4 q: b/ y; h( F8 C. ?" d 开发板u-boot期间操作是命令行提示符为:STM32MP>/ L4 p! J% X7 b; B* C+ S0 I6 ] 6 Y1 z0 A$ V- V' a5 n7 Q+ S' c 注意:由于部分操作需要进入特定目录下完成,导致命令行提示符较长如: 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$ 过长的命令行提示符不便于文档编写,所以本文中所有命令行提示符均忽略了当前工作目录的显示,命令行提示符不代表当前目录,具体当前操作是在哪个目录下完成,请结合文档上下文确定。4 n) x. ^: z1 |$ f" V ) m2 v, a- ?0 }% S$ |+ E 1 章 源码编译 编译环境配置" A* C* V! x+ e& j: s/ U 源码目录结构2 i* \4 R& a# z# K3 y 由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。 在用户home目录下建立fs-mp1a文件夹。 b) A! v3 q# M! _8 a/ ~( J0 | linux@ubuntu:$ cd ~7 Q, d# G8 i- P3 w9 a3 [ linux@ubuntu:$ mkdir fs-mp1a 将工作目录切换到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 linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools 1 e/ G$ u4 @0 T
0 c6 @% n9 W0 e 请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。 . 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开发板中所有项目的编译与调试。 6 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/ 4 o- f, o$ Y! C" q: h3 C4 e 解压之后得到sdk目录,进入到sdk文件夹之后内容如下。
执行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( { 运行之后会提示输入安装位置,直接按回车键默认即可: 1 }& P: i0 F* v, M9 p) p* K/ m
" 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
- 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
, o/ m- c0 `+ n( W8 r7 w 输入密码后等待安装,安装后显示如下: W* q, H' Q, w3 l& l7 B/ j
导入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 验证开发工具是否安装正确,显示版本信息如下图所示。 8 O" H3 D2 g' H `& a8 h+ Z- ` linux@ubuntu: $ $CC --version
* \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
8 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 linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz 0 m3 c) z! J$ R+ i# }' P2 _, a$ N
2.trusted-firmware源码 将光盘资料中下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中 6 g5 n* Z& r- c9 l
/ 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 linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz/ z- J% S7 ]8 t
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
将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹, b% J: T5 o" o# D2 ]# x3 E linux@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
4.linux源码 盘资料中下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中 / H, [* f& p& y- B5 s! W
; c; k4 q% W+ G& | 将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹 linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz
. 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目录下
将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹" A9 i4 g" ~4 I7 w# H3 v: p; ]7 f linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz7 Z3 x q- N9 p) \" z
盘资料中下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。; F% F L! L3 T# i
将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
至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。" F: e0 f& l. ~4 y6 R 6 `5 Y. c6 Y- m+ C+ s4 q, e
u-boot源码编译 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 # u/ z' }7 ]; i linux@ubuntu:$ $CC --version 2 y! Q" |) o( C. y
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
1 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
这里使用trusted配置来编译6 U8 G& _& l1 C; b4 r7 @6 z& G0 O linux@ubuntu:$ make stm32mp15_trusted_defconfig5 W) S/ W, K* M5 [! t ; u( S0 ~) h. k" }0 P& n7 b
4.编译源码 linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all, Q/ ]: ^$ @3 i5 t7 V5 D4 K$ h' N2 e 编译完成后得到u-boot.img文件 6 Z8 K8 _0 |) _' O* L, x8 c j i
) x) U( ^, m3 t( B4 H+ y p) ~ 5.使用Makefile.sdk编译 除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。 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 编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像; a% t, I0 E* m6 j/ T3 @
7.编译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 编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像+ S: _( c: v/ L& f. |0 p$ b 5 d" l% C0 k4 | A1 ~3 P
8.编译optee镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32 ' b( }' C( }# T$ F x8 j7 B 编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像$ v# I! c! Q% F6 u& J% K) 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 编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。% b- f: [6 c. Z0 q
# [5 L9 D! s4 l) ]% N6 |' F 10.tf-a源码编译 导入交叉编译工具链并验证/ 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
11.将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2) H& h' z, i" }4 T' h 12.编译trusted镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all 编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。
13.编译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 , 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
14.编译trusted、optee两种镜像, p; L' L. N; Q/ D- @: t( C linux@ubuntu:$ make -f $PWD/../Makefile.sdk all & D1 k* H0 d4 L6 s& Q 编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。 & y0 x) E) B1 H9 w$ ?2 K1 O, D1 \
15.optee-os源码编译 导入交叉编译工具链并验证 linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi + {6 a- B9 @; N& t: [ linux@ubuntu:$ $CC --version4 p- h* a6 \1 j; f
- [0 X1 v$ d% m; v 16.将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0 $ U' V1 m+ t+ x
17.编译源码 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即为烧写镜像。 # H1 ~ R1 g9 y7 c `! L
( H7 w, ^8 r) E( a/ M3 H( s 18.linux源码编译 导入交叉编译工具链并验证 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-gnueabi1 M6 x& `' j1 \% G" T! Y6 ]linux@ubuntu:$ $CC --version+ d# B2 B/ j* L' ^$ z5 g9 k+ E
19.将工作目录切换到fsmp1a-linux-5.4.31源码目录下。! l/ U+ H0 \% v' | linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31
20.导入配置文件 linux@ubuntu:$ make stm32_fsmp1a_defconfig$ ?9 }3 t, t8 N5 r
7 s+ ?& ~* ~+ k) g0 j) X4 z 如果需要修改配置可以使用如下命令来启动menuconfig ! I0 v3 J. S- y1 n7 T9 I linux@ubuntu:$ make menuconfig' a/ B, l- {/ H! ^3 W " T5 a( u( `# O
21.编译内核镜像 linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040 编译成功之后会在arch/arm/boot/目录下生成uImage文件 & E- N; J+ y- c2 K! E
在源码目录下生成用于调试的vmlinux文件 5 T7 `; S/ g2 Y6 P! [
$ o" i' z' E1 Q4 n/ F" |+ A 22.编译设备树文件( j) @' |5 @' [. j4 e$ N linux@ubuntu:$ make ARCH=arm dtbs ) 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
2 V- t7 Y0 n! _! e/ f. Z) h, ]' ?2 } stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件 # 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.编译内核模块 linux@ubuntu:$ make ARCH=arm modules linux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install1 R- \1 [0 `0 j+ l* K& u5 T& g 编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。# y/ f" `% G# E: O' |6 ] v - ~. u1 E/ L6 e 24.Yocto构建系统 将工作目录切换到fsmp1a-ST-Yocto源码目录下。 linux@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
; ^' e+ ]+ ~0 h e: p% u 25.导入编译配置 linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh8 n9 C( ]3 v6 o8 M 如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y& }1 D9 w& q. B5 i 8 j! N% p- x( u) }2 i
7 I3 H2 g& K$ D5 w 如果是第一次配置,需要同意一些协议,输入y。。 " ?- j8 W9 C- h" A7 t0 D8 ~! J9 |5 h
之后按空格键到协议底部 # V S4 Y) T' u3 I5 A
4 z5 j6 M# b" u- J: k" j 输入y会出现如下界面: p) k1 u) D' @2 M0 {0 l
9 F! J! x8 A: T 26.编译源码6 Y3 m# n" D# r6 m0 V0 P9 Y linux@ubuntu:$ bitbake fs-mp1a-weston 注意:在编译Yocto系统时确保ubuntu主机可以连接互联网 ) @* }: G+ Q" g 由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。 编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。 ) ?" 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 ! {" ?# |' ?1 t1 G4 S u-boot-stm32mp157a-fsmp1a-basic.img1 `' ^7 c& Z) W r# }6 T trusted专有镜像6 p9 }9 P! C: r G% Q x% l$ C tf-a-stm32mp157a-fsmp1a-trusted.stm32 u-boot-stm32mp157a-fsmp1a-trusted.stm32 optee专有镜像 tf-a-stm32mp157a-fsmp1a-optee.stm32 u-boot-stm32mp157a-fsmp1a-optee.stm32 9 P) o/ X& g; I8 ]/ x. w tee-header_v2-stm32mp157a-fsmp1a-optee.stm32 tee-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 公用镜像. N6 @* o" z) e( H5 b# H% u st-image-bootfs-openstlinux-weston-fsmp1a.ext4 st-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 配置文件" 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 2 e; M1 ?: p- z$ s4 l ———————————————— 版权声明:华清远见IT开放实验室0 T3 N& L, N8 h1 U4 q A Q8 R4 q: u! d7 n& `8 X ' C' k& g" o/ \ |
STM32MP157双A核Linux + 自研RTOS双系统镜像免费下载
扩展STM32微处理器,实现高性价比、低功耗和灵活性能
STM32MP1 自举程序编程:USB DFU/USART 协议全解析
兔哥心中的ST中文论坛
我心中的ST中文论坛
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
深度拆解 STM32MP1 Boot 链路
STM32串口自动识别波特率的原理
STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决
STM32--STM32 微控制器详解
微信公众号
手机版