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

STM32MP157系列教程连载-Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

[复制链接]
STMCU小助手 发布时间:2022-9-21 13:40
第 1 章 Linux内核配置及编译9 U* b' ~! R$ @) q( k/ M

! k' A2 y5 h9 N. b7 O3 s0 ~1.1 解压内核
8 I' }7 K. |) S# }( U& d: k+ Y9 t: |建立源码目录, J8 e* B% w& D3 V
1 J8 i# V. C; R! H8 K
  1. linux@ubuntu:$ cd ~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r02 ^3 ], V5 k% S5 v: }/ D
复制代码
- Y5 P. S; Z0 u$ G' S* D& G
20201123182336169.png ! X! b: n- I, l4 d& N

6 ^8 M& ~: a: b' }+ a5 d该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。  {+ M+ a" U9 y; k. \9 _" l
解压标准内核源码
  1. linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz
复制代码
, C4 P0 T: j7 Y. S3 H% W" f+ @
20201123182403494.png
/ g7 I. j, H( F: A( c( {: \0 W$ W& V/ B% L- s' o# t
进入内核源码目录下
. [/ O5 K+ m# v' Z7 x" g6 p3 j% z0 c* b- T* }
  1. linux@ubuntu:$ cd linux-5.4.31
复制代码

+ z5 I9 _& ?/ N. Y, X& z6 g- D 20201123182427813.png
9 a* s! y. k; ^) Y
, Q0 G: S. ~- h" C1 l* c1.2 添加STMicroelectronics官方补丁
. a$ \2 u! f4 _2 U% r$ J& A( I* ~5 ?" s/ N
解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。
( \+ s: P- C' S/ {0 }
: y) S5 a" r8 g( T1 q1 I( Z
  1. linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
复制代码
) |; i) Y- S" R4 X
该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。
7 D& Y* }+ W9 |3 [. s1 d
! ~. k9 [# S6 V0 j1.3 生成标准板配置文件) Q. ~  D% T# m, E- ]$ L6 j5 K
生成multi_v7_defconfig默认配置' X4 ?2 _+ y  r4 W, `/ b( S8 @7 d
/ S1 n' D' i% _+ U$ j
  1. linux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
复制代码
3 G. {3 R) _! Y; W( |; i0 ]
在默认multi_v7_defconfig配置中加入ST官方提供的fragment config5 R! F" y$ \; S* `1 h% v% D" Y
+ Y1 D4 \' l3 B( e
  1. linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done. y- A. [) ~$ Q( ?# h* f2 I5 @, e
  2. linux@ubuntu:$ yes '' | make ARCH=arm oldconfig
复制代码
/ W) Q1 Z1 }+ f; n& Z5 A
生成自己的默认配置文件
& W- g3 r2 u! ~
* Q: O+ v  `" ^' f
  1. linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig
复制代码
/ A3 E$ z1 [& Q3 y  j% t
取消git中的SHA1
8 p4 ]& m2 Y9 J6 c* x. q  {, \9 x" b" O
  1. linux@ubuntu:$ echo "" > .scmversion
复制代码

+ ^& x1 I) Z- D% C1 \1.4 配置内核$ t- M& z- C5 B& d6 @1 a: O- c7 w7 ]0 e
导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)! W* E4 a1 ^& E

& C% y! M- f, C
  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
复制代码

* \9 L9 `( n8 `+ n/ w. t验证开发工具是否安装正确,显示版本信息如下图所示。5 G( g) d6 K+ d' }7 `* O

' _/ [; j; q5 S4 Y5 M& b
  1. linux@ubuntu:$ $CC --version
复制代码
# o+ O5 I; z# |$ F
20201123182648549.png
$ w- \8 ]- I( Q0 q5 x$ ^+ Q+ l4 }) R* I6 E2 U6 D! t
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。
8 \4 d2 W4 ^9 h$ W* V( [
) x. C- g& \7 |; q+ r( O2 V
  1. linux@ubuntu:$ make menuconfig
复制代码
7 g- M( Z' v# W) @& f# h
20201123182715818.png 4 D) S& ?7 X* w8 Y  _, ^

4 ]9 i6 Z) N( v" c* Z# `+ X可以在如上菜单中对内核进行详细的配置。
0 T7 X& y6 p- u0 H- U1.5 编译内核1 a0 x9 w$ j/ C$ z

1 J' \  u$ g0 L. O- P
  1. linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
复制代码

4 F: W1 Z! ?% S5 h5 C 20201123182743858.png ! J8 S8 Y" S9 N% B1 T6 U- A1 l
% R! e# Z5 {" m/ \% i1 s
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。
5 C6 a+ ~: w" C/ M$ R% a: X3 O 20201123182800288.png
* f5 R9 [3 x2 U( I" t8 V+ _$ r9 }$ J* a# K
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。! X4 ?0 |2 s$ d
3 S3 k! J4 N. B  Y6 _" i
20201123182817429.png
4 ?9 A: }3 ~+ Y+ N% N+ M- Z. ~6 p+ J4 H
1.6 编译内核模块6 `1 }6 J4 R) b! O
2 m+ N9 B  F1 H4 W  v4 b
  1. linux@ubuntu:$ make ARCH=arm modules
复制代码

$ @8 ]0 n0 \4 P  A该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。$ z! u+ q1 O1 g+ x) d
* G6 I9 u& g' V& K: Z' Y# [' k
2020112318285188.png
7 M# t0 f, \1 g
- J* B# ?% f  ~: C# c7 m8 r1.7 生成设备树
/ i4 Z# n6 S2 ~6 o& q# W! x" b
% d7 `3 k" o: m( J9 ]( P) m以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:
; D1 M/ c/ `/ k1 C' X5 Z, R6 d  j6 V! Y: U; B3 |
对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。! Y: a# Z9 U' y" a$ t8 V5 Q
( b, o9 H: {2 [6 w# N% n
在arch/arm/boot/dts/ 目录下新建& B& V5 k% V1 o7 M" J1 b
stm32mp15xx-fsmp1x.dtsi:
9 @$ e& |2 M3 L4 O. v6 `; c9 n# ]& x9 R" r' U; h
  1. #include "stm32mp157-m4-srm.dtsi": [- J( J. ^" c  b/ ?, J. P9 L$ ~1 Z
  2. #include "stm32mp157-m4-srm-pinctrl.dtsi"
    1 P  j) W+ o' R& L: h6 `4 o2 ]
  3. #include <dt-bindings/mfd/st,stpmic1.h>
    % y. _. G; p3 _! E
  4.   @2 t# u$ B# m& x0 e
  5. / {" E$ H: M! Q5 J  u
  6.     memory@c0000000 {! _: e6 D3 R: M" X) I
  7.         device_type = "memory";
    7 ^0 W5 t. Z' V, B. S4 ~- W
  8.         reg = <0xc0000000 0x20000000>;' H' r5 l0 `% V7 j) Z% |4 V
  9.     };
    8 M$ T. n. Q! C! w, n% p  J

  10. ; K. l5 ?1 ~9 D, ^7 z8 N6 e
  11.     reserved-memory {
    3 e' i, ?. a7 `
  12.         #address-cells = <1>;6 C* R  m1 Z: Z& V& z0 n; ~# t
  13.         #size-cells = <1>;
    - W. n5 j9 W& V: @
  14.         ranges;
    2 Q; [, G; @! ~
  15. 0 Y, ~5 G; g; x
  16.         mcuram2: mcuram2@10000000 {$ J) f* r3 Q% X
  17.             compatible = "shared-dma-pool";
    / g  I: o; Z6 }, r0 N; P$ H5 r9 D
  18.             reg = <0x10000000 0x40000>;
    4 Q( @* s' [$ O( q1 B* R
  19.             no-map;
    1 |; B0 W3 m) S$ u2 q# y
  20.         };
    * ]9 I+ e  ]: e" m& h
  21. 3 Z. E5 a: Y0 S
  22.         vdev0vring0: vdev0vring0@10040000 {
    0 K  r: E4 G, u! h% H
  23.             compatible = "shared-dma-pool";
    1 c* Z! o8 f. x! [# u
  24.             reg = <0x10040000 0x1000>;9 U7 @. o! A3 ~3 o  j- K0 q
  25.             no-map;
    ; m( [, ~" B# X% E5 c
  26.         };
    ! Z! L: @) R  n: g

  27. 2 f6 b4 `5 X0 y8 o$ P) B; C
  28.         vdev0vring1: vdev0vring1@10041000 {- i5 T0 C* V# a7 f
  29.             compatible = "shared-dma-pool";4 `- D8 U8 y( U5 [  p; N
  30.             reg = <0x10041000 0x1000>;% S; ]! ]* z1 G- a0 W) R
  31.             no-map;
      F% A) U: o- h3 Q" ^
  32.         };8 f6 f5 n2 V; F8 R2 ^' W

  33. - t: |' X$ r6 J' `5 R2 {' i
  34.         vdev0buffer: vdev0buffer@10042000 {! @" Q' d' G" d' M- y( O
  35.             compatible = "shared-dma-pool";
    / A: [/ c0 r" R/ k
  36.             reg = <0x10042000 0x4000>;
    2 w! q7 s7 }  C) p1 L# R4 V
  37.             no-map;
    ) O3 N( ]; r& q  M
  38.         };
    . ?& N9 c  ^& j' r( X/ k2 c
  39. 2 \+ M# F3 u( f* F
  40.         mcuram: mcuram@30000000 {% m4 H* T& `3 s6 e  X& w2 y
  41.             compatible = "shared-dma-pool";
    ' l" q; |2 N( F* r
  42.             reg = <0x30000000 0x40000>;9 j( W8 ]* @- S" g$ e
  43.             no-map;. }# g/ k8 T4 s3 |
  44.         };
    + H) o  R2 {" v& G

  45. ; G- {6 }9 H2 q4 S* E
  46.         retram: retram@38000000 {
    2 O) \. j' ^# i" J2 r
  47.             compatible = "shared-dma-pool";1 J0 e! T7 |. H2 e/ O8 S, _
  48.             reg = <0x38000000 0x10000>;: O: `) @' F( R! M
  49.             no-map;
    8 K/ T! z( i6 d; R1 [# Y$ T% X
  50.         };
    5 j3 T% m2 e( B- f7 C
  51.     };8 T3 s& Z6 C( h, G/ V' k2 t
  52. . s% _0 I8 R5 |- K2 G
  53.     vin: vin {2 Y: W8 K5 U8 V' z) F. j
  54.         compatible = "regulator-fixed";
    6 L' U. P; }; K7 E5 G1 ]
  55.         regulator-name = "vin";
    ; r5 U/ _* {6 Z+ Z& _
  56.         regulator-min-microvolt = <5000000>;: N* y% d6 H! i* }
  57.         regulator-max-microvolt = <5000000>;
    6 H) C; @% v0 x& z* A8 E; F
  58.         regulator-always-on;" m! x  J, p8 Y4 \* K/ L8 a4 b. P! z- i
  59.     };
    2 b7 V  K2 r$ P8 W$ B2 H" n6 \& l
  60. ; j. d8 K9 e+ Z% ?8 N8 }
  61.     v3v3: regulator-3p3v {
    , v1 \, {) O. C  d
  62.         compatible = "regulator-fixed";
    ( A& w' l' I- X2 w% I
  63.         regulator-name = "v3v3";
    0 C  B6 E; e" I- ^
  64.         regulator-min-microvolt = <3300000>;9 m; z  Q9 a  `/ Q  ?) R5 M, l. a
  65.         regulator-max-microvolt = <3300000>;7 J, a+ J2 D; p4 G% X8 R% {
  66.         regulator-always-on;) x" ]! c! z1 n& c. J5 I) ~9 N; q
  67.         regulator-boot-on;
    8 N  [% ^$ b+ U- \: A  w  d1 k
  68.     };
    / h5 L8 h# y/ T$ T. t4 y

  69. ; C% q! H7 o0 B5 Z# ]& P
  70.     vdd: regulator-vdd {
    / H, k! ~' ?. Y- U, \4 B9 w
  71.          compatible = "regulator-fixed";
    # C4 N/ K' w. _0 A5 d
  72.          regulator-name = "vdd";/ o+ P  r3 Y! V
  73.          regulator-min-microvolt = <3300000>;
    7 H4 f, a% i3 A! N
  74.          regulator-max-microvolt = <3300000>;" m& D+ y( t- [6 ~9 z% }
  75.          regulator-always-on;* k4 ]( R6 X5 `# f! |
  76.          regulator-boot-on;
    + |1 f  W& L4 l/ g5 g1 [) s
  77.      };
    ! K4 h3 k, B# z9 I4 `  f; Z+ p  F6 ~

  78. . Y- b' u& L  J
  79. };4 G, J4 S1 h- o1 n. V5 O; T

  80. ' b- z8 [4 |6 O
  81. /*HDMI CEC控制器*/
    , x3 l/ b. M% R/ C
  82. &cec {
    . G; c- G% C9 V, d$ G6 N4 O
  83.     pinctrl-names = "default", "sleep";/ h, g, I3 @& L8 p
  84.     pinctrl-0 = <&cec_pins_b>;
    ; S' h2 D" L! z- z
  85.     pinctrl-1 = <&cec_pins_sleep_b>;: k/ j" _0 \6 `
  86.     status = "okay";
    $ l! R' l% d( q& a9 r  e2 f6 o* A
  87. };5 }- L( K& h& b

  88. , r0 ^- k4 z4 j1 L& w8 M2 U
  89. /*循环冗余校验计算单元*/5 z3 A) ?1 g! `7 P3 r3 Z
  90. &crc1 {' _/ B+ P" {6 ]  B5 f2 k0 w5 Q6 p
  91.     status = "okay";. P; \+ Y8 s9 Z: R  g
  92. };8 z. F9 b1 h9 {* ~/ ~  K! U! h
  93. ! G  `: l. Z& M- S, t. ]: E: v. ?
  94. &dma1 {' _& d) F! D7 |* K
  95.     sram = <&dma_pool>;2 `# ~- q/ j+ Z2 l8 M* [
  96. };
    - e3 R1 T- t7 p/ h6 }$ r
  97. ; {& I9 ]) P, `0 R3 `6 j4 `
  98. &dma2 {
    1 e1 M5 A- a7 ^4 J
  99.     sram = <&dma_pool>;
    ; _+ l5 Q% G, u, n$ P
  100. };5 a, J# a! R& @1 ~' ]) i8 q
  101. /*数字钟温度传感器*/; D) e' |5 N' O. E1 |  U4 q
  102. &dts {+ F- h5 i' m# X0 m/ m3 n8 E, O
  103.     status = "okay";7 H. z1 t$ f) E; h
  104. };
    $ o: N, k& x8 B- G4 e
  105. /*图像处理单元*/
    6 O* s4 u! }* u, l0 s
  106. &gpu {
      Y' D- G9 J2 Y4 B1 d/ I
  107.     contiguous-area = <&gpu_reserved>;
      P2 r$ `3 o  ^, L1 M  N5 U+ j
  108.     status = "okay";
    ) F3 ^5 @0 X' \, [  m3 t
  109. };; F" C* q3 `1 F( k
  110. /*哈希处理器*/
    8 G" ]. R# |- ^8 R# x) h+ g' O+ y# T
  111. &hash1 {" K. o- ~7 h# _+ E' w, r
  112.     status = "okay";1 M4 x  B1 a. {" r4 h) `8 y
  113. };4 m7 `$ }/ ]! `3 f- k4 H4 D
  114. ; `& \% Y8 {% `# U* t) _8 ~' b1 ]2 u: r
  115. /*处理器间通信控制器*/
    * l1 R# o/ {9 \; w1 w+ E
  116. &ipcc {: ~/ s  b6 ?3 |" u" ]
  117.     status = "okay";
    8 E- e! M5 |3 b
  118. };$ d% M1 a* n9 P8 Z8 U( I! m2 }$ \

  119. 1 W. e/ U$ n) m) p( m% d
  120. /*看门狗*/( |& e' h" Q" X# \1 F5 y- q
  121. &iwdg2 {  x4 }" Y/ u5 N* k8 `. p5 N
  122.     timeout-sec = <32>;
    4 W( _  z# _4 t6 F3 Y
  123.     status = "okay";
    % M4 B- k3 P5 v4 Z
  124. };
    " k! Q. o* r; c$ U

  125. 1 \  [8 v/ Q3 F! m! D
  126. /*随机数发生器*/, F4 [4 G) o; t9 H3 ^* q
  127. &rng1 {2 n4 @2 c# r$ t' Z/ \
  128.     status = "okay";
    ) y. ]* j5 s! @) y: ^! R
  129. };
    8 @- M3 ?$ A! [+ [

  130. 3 ]/ G* w( I6 }* M: G0 X( z: t
  131. /*实时时钟*/
    : i8 k- L: L- E% S
  132. &rtc {8 @% r5 k# ]1 ^7 H0 D# p! A( {
  133.     status = "okay";) U0 h4 o+ k9 U+ v
  134. };+ ^9 O/ F* t5 V5 \0 Q: _% J, P' ^9 i

  135. ! O& y. Z6 A6 u) I) f  {" v$ S: w, m
  136. /*sdmmc1 TF卡*/
    / G' u2 N% I7 o5 Q! G+ r3 h
  137. &sdmmc1 {( }1 N2 R* B! V6 J; F" m+ ?
  138.     pinctrl-names = "default", "opendrain", "sleep";5 T! |+ P5 R  ^: X
  139.     pinctrl-0 = <&sdmmc1_b4_pins_a>;& n7 \7 j  Q3 d3 H9 ~2 d) K; f
  140.     pinctrl-1 = <&sdmmc1_b4_od_pins_a>;$ g) \3 o: m  p- ]9 y
  141.     pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;, F/ I. N1 i* _7 I/ L* p* a
  142.     cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;% n4 L' {* b& i  w5 K7 q
  143.     disable-wp;  k6 D' ^! d! ?7 T/ q/ ?& s
  144.     st,neg-edge;
    $ P$ x( r2 _8 P+ `. P1 ]$ T: a
  145.     bus-width = <4>;) A  ~+ q1 G+ F1 @* @& u6 w
  146.     vmmc-supply = <&v3v3>;8 L% h* p8 T) S6 {$ H% I
  147.     status = "okay";, z1 c& K& e" q# P7 Q6 s5 N
  148. };  T* {, z" h4 X; R: X8 I
  149. ! \: ~8 A4 Q  C% P( E
  150. &sram {
    . r8 r. I9 Y# k! N
  151.     dma_pool: dma_pool@0 {9 ]* r: T+ z6 X9 }$ [5 I( F; B( k
  152.         reg = <0x50000 0x10000>;
    ' `5 Y' I7 A9 T5 P$ V( n# S
  153.         pool;
    & w$ H& W* o2 j. ~9 A, m7 y, ]
  154.     };
    % C( O( |3 G8 s. P' z8 ]/ Z. X
  155. };
    $ ~( V2 W. I) i. n# i: Q& }

  156. " l2 B  w. [. k" j/ c
  157. /*命令行终端*/
      l) F/ s" L7 C
  158. &uart4 {
    + U- V6 \6 n; T6 t2 E  x* Z2 N3 ?
  159.     pinctrl-names = "default", "sleep", "idle";
    # F9 l5 X& |6 B) ~' c. Z
  160.     pinctrl-0 = <&uart4_pins_a>;8 |3 m! I* O. J) K" a( X9 c0 |
  161.     pinctrl-1 = <&uart4_sleep_pins_a>;
    ' s% N6 E. {$ E( J. v9 J
  162.     pinctrl-2 = <&uart4_idle_pins_a>;
    3 j% }5 v" Z/ q0 ^1 @8 w4 @
  163.     pinctrl-3 = <&uart4_pins_a>;
    6 ~, v6 r, @% F$ s9 D4 t
  164.     /delete-property/dmas;
    6 j7 J6 q2 Z  u' j9 _' d1 R% u
  165.     /delete-property/dma-names;$ i6 q3 ~" N, c5 r% S) [
  166.     status = "okay";
    % ^! t5 B+ m6 M9 i# `
  167. };
    " z, G" _$ Z( \

  168. $ Y0 K7 f, r: w. {7 @2 ?
  169. /*电源基准缓冲器*/
    % i  {* Y* S. c4 c
  170. &vrefbuf {5 j6 P; ~, e9 o+ M, z
  171.     regulator-min-microvolt = <2500000>;5 G  S3 S' D. O, H8 h
  172.     regulator-max-microvolt = <2500000>;
    ; k& K5 ~+ T" l" U7 F4 o- e
  173.     vdda-supply = <&vdd>;
    ) `4 n' {3 s( O/ @: H
  174.     status = "okay";) e6 n" w* j1 V! |5 W# \
  175. };: x) [- ~2 M" o+ u' V
复制代码
5 p8 o, d  ^- d7 a/ l6 F4 l
在arch/arm/boot/dts/ 目录下新建3 ?( g/ I2 [" r# n  B
stm32mp157a-fsmp1a.dts:4 Q" ?* x$ v0 U2 I& ?" I
/ ^6 Y& _2 ^7 q+ w! ^8 A
  1. /dts-v1/;
      P7 G0 x) \% P. |1 i6 D2 ^
  2. #include "stm32mp157.dtsi". p$ m  `# E0 m; |$ p
  3. #include "stm32mp15xa.dtsi"
    9 `- U( R' z; C# Z3 d
  4. #include "stm32mp15-pinctrl.dtsi"
    . R; x$ G6 o1 |$ X7 r) T- _$ ~
  5. #include "stm32mp15xxac-pinctrl.dtsi"
      v7 z2 Z. Y; V6 z0 L# D
  6. #include "stm32mp15xx-fsmp1x.dtsi". R, K3 _5 _6 }1 a/ e
  7. / {
    . Q" n" H1 s1 A! e& b
  8.     model = "HQYJ STM32MP157 FSMP1A Discovery Board";
    + P: G# J+ A( I" G6 e2 N
  9.     compatible = "st,stm32mp157a-dk1", "st,stm32mp157";- g# m1 b  `' @/ N1 b' M

  10. % t2 i9 i6 f5 p
  11.     aliases {' c+ ~: e9 d+ ~2 ~2 ?1 s" e
  12.         serial0 = &uart4;
    : @0 ]+ G0 w( u5 v1 q! Q
  13.     };
    $ s" m4 N& e# f, a" ~0 `

  14.   m+ ^; D1 B0 g$ g
  15.     chosen {* U$ U& I, L+ J
  16.         stdout-path = "serial0:115200n8";% u  p1 W: \: I: \( }9 s) }
  17.     };# N- P; w! ~& S
  18. 2 j  d% c! \$ j: d0 V" H7 E
  19.     reserved-memory {4 s2 N- r4 O* O7 X( g
  20.         gpu_reserved: gpu@da000000 {
    6 n) P2 [+ e7 {& t3 L6 M4 k
  21.             reg = <0xda000000 0x4000000>;+ C5 m2 }' L' K
  22.             no-map;
    / b* _. p4 x1 t+ P9 t$ w
  23.         };  d3 o( S" I! T! c

  24. * o  L( z. z1 }8 A7 K7 v
  25.         optee_memory: optee@0xde000000 {
    6 \; ~, u3 e2 x+ r1 P
  26.             reg = <0xde000000 0x02000000>;# {8 h; d- y- c
  27.             no-map;
    * X( E/ m4 ~; S4 ?- f4 u3 N
  28.         };8 B  L$ k5 m0 e  `" {
  29.     };/ b% }* V' J% Y  Q9 h
  30. };; j7 K* f9 }* H$ Z$ c+ X+ u+ T$ n+ D# H
  31. 0 V' O; Y& A" |$ F
  32. &optee {
    " d" m9 K" J8 o. l9 l2 I8 }; m
  33.     status = "okay";
      {; Z- q6 x# ]! R
  34. };
复制代码
添加了新文件需修改Makefile才能编译,修改arch/arm/boot/dts/Makefile,添加stm32mp157a-fsmp1a.dts的编译选项(红色字体部分为添加内容  ]6 r, e8 \. C' r

' M' X# }6 J% o3 i
  1.         dtb-$(CONFIG_ARCH_STM32) += \
    " [9 w* I. ?3 f- {
  2.         stm32f429-disco.dtb \8 H1 ?/ W; q6 K" t" j! H
  3.         ……./ W/ m* r* f: h5 @% I6 b$ D0 k2 ]
  4.         stm32h743i-disco.dtb \7 I7 r- `/ G# i7 s8 B/ x8 C
  5.         stm32mp157a-avenger96.dtb \9 a$ t9 ]+ ]' F8 A
  6.         stm32mp157a-dk1.dtb \5 Q& E0 f" M5 U4 K
  7.         stm32mp157a-fsmp1a.dtb \
    " h: C" I- }4 M  Q! W+ p5 n
  8.         stm32mp157d-dk1.dtb \
复制代码
2 J2 {2 ~9 a* I# _
重新编译设备树文件. B/ |5 M; N) `) F6 T
4 i9 O+ K$ @' K) {- v# F
  1. linux@ubuntu:$ make ARCH=arm dtbs
复制代码
+ P1 k. B% V& M: q8 N  G" T+ f* _
编译完成后会在arch/arm/boot/dts/目录下生成stm32mp157a-fsmp1a.dtb文件
6 S( ]2 t, R& w' Q% {* K9 f: Y* z. r$ U
20201123183049633.png 5 |; M% M7 t% _1 n4 B* P3 U
+ ]' J: [. k( L( t: |
将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。
9 y2 b7 \/ j+ D6 S+ }! c/ |# z
5 {  r3 n1 u: X! {
  1. linux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot/
    ) J3 k* W3 F' l4 \9 V* q$ y
  2. linux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/
复制代码
, N2 }) [$ O/ L2 f; \# g6 d
1.8 配置tftp8 Z- y( f9 o, n% t1 q
在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。
/ N4 e& ~6 ?* E) \, y$ }
% \( c, [3 l# h+ K2 g' e如果环境搭建已经搭建完成,需要将ubuntu主机中的/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。
. j& R+ `/ J2 m: y. B4 h9 T( j, u, s
/ p% _5 ?. _! F3 J. r; W
  1. /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-177 H+ y7 |5 X% z
  2. 7 l9 p( a2 H4 X6 _7 o$ N* {: d
  3. # Generic Distro Configuration file generated by OpenEmbedded
    . O- B- K8 J" h, S* S5 Y
  4. menu title Select the boot mode
    8 ^. J$ i% b  m& \
  5. TIMEOUT 20% G# V1 t) q/ W4 W
  6. DEFAULT stm32mp157a-fsmp1a-emmc
    * y7 R' W/ D/ r5 t9 j% J
  7. LABEL stm32mp157a-fsmp1a-emmc( z- S- p" T8 r
  8.         KERNEL /uImage
    1 i% x7 G9 w8 }; T. `, u
  9.         FDT /stm32mp157a-fsmp1a.dtb
    * H% d3 f+ p: Z1 g
  10.         APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
复制代码
! M$ R' R; Z+ u) k. ]6 C
修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。
& R: {8 v9 o3 J# C' I9 `. a$ B; x, W( N: G5 p/ U( O, S3 Y
由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。
  q1 D) d: ?+ l6 j
. u# u% }3 }* e! b: u( G 20201123183151849.png " D) O+ X' H* i4 d8 Y  N

; g( w# ]: D+ f$ D7 w, F1 o* r后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。( w& x6 L+ t) h- z. @
————————————————
& J4 ]- H1 V# P版权声明:左月先生
1 y7 Q  u/ g2 @. ?, Q
/ X. t) V; n: O! n* T4 s3 `* b2 [/ }+ f& |& y# `
收藏 评论0 发布时间:2022-9-21 13:40

举报

0个回答

所属标签

相似分享

官网相关资源

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