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

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

[复制链接]
STMCU小助手 发布时间:2022-9-21 13:40
第 1 章 Linux内核配置及编译9 \; x8 k+ Q, f8 F  n$ W% E
# e1 e2 ]- o3 o2 n
1.1 解压内核
8 n+ L0 t" U; P建立源码目录5 ?' s2 s  v$ S
( z4 G1 C/ m. [( B
  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-r0( F1 x. F: I3 f9 u; g
复制代码

  @7 V! i/ ~% A% j6 H3 G6 O 20201123182336169.png 3 [- B- b' a' B$ N
: b3 h+ [7 g6 [* R
该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。
8 M' ^' K3 x8 Z2 g& N解压标准内核源码
  1. linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz
复制代码

; O( n6 p8 n9 a$ i- D; z& i 20201123182403494.png
. \% w8 C* V  V% ?: b1 t" k( [" K; @4 K$ {1 o9 Y& f
进入内核源码目录下
" U4 N) a! Z/ a8 ^; D& J) P& ]; r: k" ], |( U
  1. linux@ubuntu:$ cd linux-5.4.31
复制代码

& K' T+ G: O2 m' S+ R 20201123182427813.png
3 |2 Z6 s1 X6 Q0 |3 L( ?
7 p2 _/ y' ]/ D4 Y& N% J( z1.2 添加STMicroelectronics官方补丁
0 h! }) L! z( L: L" W$ @3 j: w7 x" }7 V- u$ Z
解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。
8 ^$ B% K5 i( m5 ^
0 d$ p: A  O5 _' k8 P# B
  1. linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
复制代码
0 R  p: y' c0 V9 E# L- I* p
该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。
) u2 j3 j2 N% F5 J0 E4 E
0 D0 X# W& N$ Z7 n  ~0 ^2 N1.3 生成标准板配置文件
: ?1 I  b* q5 C# A0 @8 w生成multi_v7_defconfig默认配置
* s1 C8 ^0 n0 e
. p3 e9 L. i+ s
  1. linux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
复制代码
& N7 i  l" ?! Y# Q- \1 S
在默认multi_v7_defconfig配置中加入ST官方提供的fragment config
0 y! l7 J/ k6 i' D: C, W( t
5 K% r1 N8 l# T. q) h' ~) `
  1. linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done9 m, n& u2 q( j2 z& N
  2. linux@ubuntu:$ yes '' | make ARCH=arm oldconfig
复制代码

$ S" g4 X7 i; b4 ]3 H生成自己的默认配置文件
5 Z4 ~0 N) @6 b4 N
) E+ k) `8 m, e0 P- S: {) n
  1. linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig
复制代码

) u5 ]$ ^8 ?! W1 J取消git中的SHA10 \! G7 z: F7 @5 {" C8 B
* f- x7 D# w9 z0 z1 [6 E
  1. linux@ubuntu:$ echo "" > .scmversion
复制代码
+ a! W+ Q0 {. ?/ W
1.4 配置内核
! Y% n4 {8 b9 W9 f导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)# ?5 e" ?4 a7 a, h1 H- j: ?
7 M/ C3 e$ B- r! Z) @, K* t1 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
复制代码
* l  p( Y# B5 Q2 c5 ]1 j
验证开发工具是否安装正确,显示版本信息如下图所示。
7 d8 m$ Z2 p" }; _3 v  h4 U' D$ ~3 `: F, D
  1. linux@ubuntu:$ $CC --version
复制代码

) o% ^7 @9 a. M+ G  B$ P 20201123182648549.png
  J* p0 X. p+ r1 K, R/ b" k! Q* f! M+ [
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。
& Q5 }5 C, {; s; S
; K: q9 h1 F6 A/ S5 S* |
  1. linux@ubuntu:$ make menuconfig
复制代码
/ p; ]' Y& ?' E% E+ h, ?
20201123182715818.png ) ^) N, H9 z8 z8 {% \8 b, Y

+ J' w8 o6 Y4 v可以在如上菜单中对内核进行详细的配置。
# d' k! @) q3 q( D4 Q1.5 编译内核( |. Q) c; Z& P' I" @1 w

6 z3 Y$ a4 R. p. Z) A) [' H" u2 r; }
  1. linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
复制代码

4 C' Y- O  V4 q3 e 20201123182743858.png 8 t+ e! u2 W3 o. K7 L
3 X8 f0 H2 h8 e6 m5 I& n
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。% {. L3 P, N8 E. ?' e
20201123182800288.png
, G  M, t% [& X7 w7 |) G% @7 a6 O( O  W% l0 v8 ?. l2 q' T9 o
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。1 z% j; _1 F  ?
; Q& k9 ~! M1 C) ]6 E
20201123182817429.png 7 g8 _: i) V9 a+ _: ^, d' d

% \3 e8 w5 M. `3 D1 X3 C1.6 编译内核模块( U6 F; Z( V$ }, p. y& u
! i4 `2 e0 [8 K/ D. k, n# M2 t- z$ s9 }
  1. linux@ubuntu:$ make ARCH=arm modules
复制代码
% ~, \$ M) I4 B0 S+ v7 n" h" \, }3 ~
该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。4 f/ }$ x! H+ x0 S& A; N

8 p- u$ i* p& c: K4 K- C6 c' O 2020112318285188.png 2 Y( B; B4 P+ o" ~# i0 n" H7 G
2 ~  z6 Z' G. g( k4 H- |/ M$ [; p9 `
1.7 生成设备树) X' L. f1 K- @0 E
* s9 N0 y9 j% ^$ {5 Z5 z3 L
以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:; G) ~8 o( C3 x6 S0 z

# e3 o' F1 r9 L% z- u8 `对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。( ~0 d4 C/ f" _+ m3 z

# N3 Q3 ]/ |% g4 X+ }  [. c在arch/arm/boot/dts/ 目录下新建" E' U, g9 o) Z& q9 R7 @
stm32mp15xx-fsmp1x.dtsi:
% X3 t5 X7 U# Z( I$ s- c2 p( {0 u
  1. #include "stm32mp157-m4-srm.dtsi"
    $ v9 o+ j: @3 y: }* |
  2. #include "stm32mp157-m4-srm-pinctrl.dtsi"- V+ o$ l% n$ a( X& ~! m
  3. #include <dt-bindings/mfd/st,stpmic1.h>2 j5 ~4 ]8 |) I  _6 t

  4. 1 Z, D: K5 r0 A2 f1 o
  5. / {
    ) G3 Z$ q* M  V( W* F, ~
  6.     memory@c0000000 {* E6 ~+ E$ H* E" }
  7.         device_type = "memory";/ v4 f2 c$ K9 A2 u/ A
  8.         reg = <0xc0000000 0x20000000>;
    $ H/ x$ t& ?7 _8 n9 A" Q
  9.     };
    * P; n/ A$ X: u9 Z% `. r" |

  10.   {. N  M: b0 @. U
  11.     reserved-memory {
    4 r9 s/ T. N- e1 G7 }# V% x( b7 I
  12.         #address-cells = <1>;
    , u1 h& {6 H( |* s
  13.         #size-cells = <1>;. t2 W$ j1 m, B4 q4 d$ v
  14.         ranges;
    % F3 X0 h1 h9 I0 [. H

  15. ! G* W/ Q) E5 D& [( K& r
  16.         mcuram2: mcuram2@10000000 {9 D8 {$ x2 r; g
  17.             compatible = "shared-dma-pool";
    & [9 j6 [. Y9 H( q
  18.             reg = <0x10000000 0x40000>;
    7 g/ H3 ]) F! ]4 D
  19.             no-map;. t* C! j: C0 M! r
  20.         };& B- u. P- ], d; B) I9 B

  21. . d4 [) ^! j- p! G
  22.         vdev0vring0: vdev0vring0@10040000 {- H3 u2 L' M" r& g& I, l
  23.             compatible = "shared-dma-pool";
    $ C: O8 b, t+ H7 m; F7 v
  24.             reg = <0x10040000 0x1000>;
    ' W3 u/ V0 D2 ]1 u7 a
  25.             no-map;9 r. O* r& Z6 q4 Z2 I
  26.         };( W$ H8 M5 Y% [. _; ~6 y! B1 U

  27. 5 r! j; ?; l( j  H
  28.         vdev0vring1: vdev0vring1@10041000 {
    ( O' I+ w. U2 P/ e/ l
  29.             compatible = "shared-dma-pool";
    * f8 {: i: N# }* [. _. @- A3 A
  30.             reg = <0x10041000 0x1000>;/ G; q" ^# l) ?  f: ~
  31.             no-map;
    ; d* T. y% M: ]6 r
  32.         };
    4 A1 t" q6 q# V% f9 B

  33. 6 R" `  D# A) a% L9 d$ `
  34.         vdev0buffer: vdev0buffer@10042000 {5 f7 _9 K' F2 U+ O
  35.             compatible = "shared-dma-pool";
    - x, r+ [9 N* d# k
  36.             reg = <0x10042000 0x4000>;
    7 X- R2 v1 O$ O
  37.             no-map;6 p3 c( Y8 U3 ]" D6 e6 ^' h
  38.         };
    ' W# Y4 n: ^. {3 \

  39. 7 M5 D' v9 v* o$ P9 T: o
  40.         mcuram: mcuram@30000000 {
    / L' _$ K& L. [$ {3 a. ^
  41.             compatible = "shared-dma-pool";
    ( |# b0 J6 {9 Z" }: o
  42.             reg = <0x30000000 0x40000>;8 F7 N* `; s# R
  43.             no-map;
    9 u; a" s1 t# r
  44.         };" b# O' |: r8 J5 I" @4 M; l3 v/ T

  45. 3 N& s* j1 F- p7 M
  46.         retram: retram@38000000 {( W, E3 }, I% h" y2 Y/ m
  47.             compatible = "shared-dma-pool";/ i  ^0 O; U0 l3 q1 f1 [4 f
  48.             reg = <0x38000000 0x10000>;4 V2 E2 Q: E: v- Y8 e
  49.             no-map;+ [) v- K2 c3 j& g+ v# M
  50.         };+ c1 c! U8 g. B; y, w
  51.     };
    . D% E9 k. I$ N* X; m2 r  f
  52. ! U' R/ n: E* g  v% p
  53.     vin: vin {
    - k* p! b1 g% c9 q/ O
  54.         compatible = "regulator-fixed";
    $ l+ @6 v3 _& M; v1 ?8 c
  55.         regulator-name = "vin";
    7 e- p) p4 U  T* F, S" k
  56.         regulator-min-microvolt = <5000000>;
    # }# f7 x7 x+ D* q8 W
  57.         regulator-max-microvolt = <5000000>;7 q4 o3 H8 i, F0 `( N$ F& \
  58.         regulator-always-on;' S; w# x! a7 b: D$ q- z9 R
  59.     };
    ! {% t+ r' c+ ?1 P4 {  c) Z
  60. * b$ N$ l; P! y
  61.     v3v3: regulator-3p3v {
    . A/ t4 ?# Z* b6 s  f
  62.         compatible = "regulator-fixed";
    3 g) N# `- l: \" t' m& _) _2 ?
  63.         regulator-name = "v3v3";
    9 z6 m# F* N: n# ^& Y
  64.         regulator-min-microvolt = <3300000>;8 S2 A% N. v6 C( ~: i
  65.         regulator-max-microvolt = <3300000>;
    6 n& J7 P# C9 `7 T
  66.         regulator-always-on;0 J& e# q6 o! t% R: n
  67.         regulator-boot-on;% u+ F2 O( E: ]* _- D
  68.     };1 v. ~8 o  Y( A) T. @1 t# E

  69.   n8 J4 @5 i: ]' K8 i1 m
  70.     vdd: regulator-vdd {
    % L) x) n# E" d
  71.          compatible = "regulator-fixed";
    5 `. H, h, X! t0 P; f  H  K# ?
  72.          regulator-name = "vdd";, D0 S7 r" L! b0 Y) T3 D! a+ }
  73.          regulator-min-microvolt = <3300000>;1 Q3 Q4 {- Y" y0 R/ e/ B
  74.          regulator-max-microvolt = <3300000>;% H0 w& G3 Q) q  b$ \# J9 A
  75.          regulator-always-on;# l8 B" l4 }( |% o4 B6 m. b3 H2 j
  76.          regulator-boot-on;
    / k6 t9 R  ~! G8 Q" V6 v
  77.      };* D/ z& U; C# q- k. b% a- C
  78. ) V( z3 C* c  k' q, B2 A
  79. };
    - k! L3 i- |6 L. t! s0 s

  80. & F) b( ]( Y" _; [$ \$ K, r
  81. /*HDMI CEC控制器*/
    2 `" M( i# e/ M
  82. &cec {) I2 d5 f4 s; H( Z1 W/ ~6 p% N
  83.     pinctrl-names = "default", "sleep";' S( C" W: Q7 I9 w, _# t& n
  84.     pinctrl-0 = <&cec_pins_b>;
    4 t& g; r) h( o  ~
  85.     pinctrl-1 = <&cec_pins_sleep_b>;, D/ o0 a2 M0 h! a0 t
  86.     status = "okay";, I7 q4 e2 Q: ^9 I$ \; u
  87. };
    1 |4 R% q2 u1 l! }% [! v0 X

  88. / C% }! }2 V4 E& b
  89. /*循环冗余校验计算单元*/" ~" e/ |( ]2 B9 ~. X) a$ }
  90. &crc1 {
    & ^# j5 d1 U) ]6 R( L: |. u% G
  91.     status = "okay";. I# Z: c8 Z- U4 E8 G
  92. };$ x: ?4 n& t& B( H6 E, N; {
  93. ' H0 M, s1 R- w+ O
  94. &dma1 {$ h5 L1 M, B1 o! V6 ]
  95.     sram = <&dma_pool>;9 l4 c# R8 ?- J- X8 P
  96. };" Z, C$ t2 c4 v; l
  97. 2 ~0 Y5 n' s* G; F
  98. &dma2 {; C* n7 u" [" _5 x8 I8 j
  99.     sram = <&dma_pool>;
    1 @4 \' f& p! @. {0 u( z1 S
  100. };
    : j. O0 b% ]  U+ L! a8 B7 F& _; g
  101. /*数字钟温度传感器*/
    - M& s4 L7 [5 u5 G
  102. &dts {
    8 o' y* l. |9 V8 d" h! |
  103.     status = "okay";+ I2 E% ?" X* H5 ~1 i3 z! e. V* k7 _% V
  104. };
    7 d' F7 o; c( s0 s. W! b5 o8 v
  105. /*图像处理单元*/
    " u7 D& n3 X: O6 l
  106. &gpu {
    & r& r6 ?+ X' T' {* |: i
  107.     contiguous-area = <&gpu_reserved>;
    ) A# ~! `+ k9 v; \
  108.     status = "okay";
    9 L' w* r2 ?- p- f$ T6 r, }, j3 {+ N
  109. };
      Z+ a1 L9 A( ^
  110. /*哈希处理器*/3 |" `; h* `% |2 k' I+ _
  111. &hash1 {" k( a! B! U% U
  112.     status = "okay";
    7 V8 H! ]0 Q# Z* T1 o" E7 r
  113. };, Z0 s6 U5 f" T* Q" `
  114. , Q' \4 y1 `6 e. v0 j
  115. /*处理器间通信控制器*/
    9 W' D: ]' x" w5 `
  116. &ipcc {
    ( ^& c# Z' a0 d, ^; ]
  117.     status = "okay";
    2 ~9 G4 S3 Y) Z1 x
  118. };
    - U  Y% ]" q" k1 Y: R" t

  119. ! q3 f' b' E- W& Z8 g4 w' e
  120. /*看门狗*/
    4 L# e! v  U9 z/ Y7 W) P8 |
  121. &iwdg2 {$ P$ \2 o# U  r5 k0 A5 v, ]
  122.     timeout-sec = <32>;# B9 x' n$ C/ G% C& ~5 M" b
  123.     status = "okay";
    8 d3 J9 J- o' C: z4 B
  124. };
    5 V8 i# ^! |# p

  125. ' Y* I( \# K  B, T9 V( P- S" u5 H- }
  126. /*随机数发生器*/) N0 M* K+ }  F# ?' J4 n0 v, Y
  127. &rng1 {9 X7 T( i8 S/ J
  128.     status = "okay";# D: j+ n3 k) z% _9 @5 i! y
  129. };
    7 w/ p9 Q) u; R7 G
  130. 4 f" I2 Y* C0 X3 h
  131. /*实时时钟*/0 f7 G. S2 e) V. ]# J
  132. &rtc {
    3 [: Z4 d* M. ^. b
  133.     status = "okay";
    3 \) {/ w$ f- G5 [$ D- {
  134. };7 q! g/ o1 @- {% e
  135. ) q6 X: m" O$ h
  136. /*sdmmc1 TF卡*/
    2 V0 g' y4 O' D$ y1 ~
  137. &sdmmc1 {
    : H; [& Y' W) z. z- y: }
  138.     pinctrl-names = "default", "opendrain", "sleep";# g" k" b) P8 f6 f
  139.     pinctrl-0 = <&sdmmc1_b4_pins_a>;
    6 K& g$ }/ m# w' S6 A+ g
  140.     pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
    ! T9 \1 O+ y; o# R* A  l4 T
  141.     pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
    ; f  k, M; w' @/ `' g/ j' I* `
  142.     cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;. K1 T; V+ j( @( O) e
  143.     disable-wp;
    7 q' ?5 _9 {# j" J& E
  144.     st,neg-edge;+ g3 u% e, _( D$ N1 L
  145.     bus-width = <4>;  c# p+ n; I/ R7 p, B( x" J
  146.     vmmc-supply = <&v3v3>;
    $ q3 H' _) U' V. Y
  147.     status = "okay";
    0 m/ g; S( O# m+ B( C0 E9 Q+ Z
  148. };0 V9 D$ b9 D5 j1 |* a+ M: p4 ~( Y3 Z

  149. & S# i" g2 G# Y8 D+ k: U" Y
  150. &sram {
      H! [' \/ C/ m: F8 o( i* D
  151.     dma_pool: dma_pool@0 {( w. F- Z, }! r; c# M
  152.         reg = <0x50000 0x10000>;
    ' z0 C: D& \! k! K- ]
  153.         pool;$ L* x& O6 j) p
  154.     };
    + ~3 ^" h" q1 G' S# j' g& ?( r
  155. };
    # y! q) M" M& v  ?

  156. 5 ]9 x; X" [3 \3 x' s
  157. /*命令行终端*/- D" W- T0 G6 t; s0 {7 ^
  158. &uart4 {* |) b* a$ `) o$ ?
  159.     pinctrl-names = "default", "sleep", "idle";) ~; k4 L# B0 f4 f
  160.     pinctrl-0 = <&uart4_pins_a>;
    9 c# y3 B* ]$ c
  161.     pinctrl-1 = <&uart4_sleep_pins_a>;
    ' E; ?$ l3 G9 B
  162.     pinctrl-2 = <&uart4_idle_pins_a>;) V8 A, l6 i- k$ N( D* A
  163.     pinctrl-3 = <&uart4_pins_a>;( l7 Y( o4 m; ~
  164.     /delete-property/dmas;
    9 G$ X% {: I' m0 d2 ^6 l
  165.     /delete-property/dma-names;
    3 S& Y. z; O+ n) N9 q6 @4 I
  166.     status = "okay";7 R1 m  ?$ c: E  s" X: \
  167. };
    : }- F9 \$ t& m) r7 K* I( R
  168. ' Y- C7 B9 }( l1 ^
  169. /*电源基准缓冲器*/2 B( V- U9 V9 _# W- A+ b2 W/ t
  170. &vrefbuf {
    / \( N: W# S+ s: X7 [7 G! P6 m
  171.     regulator-min-microvolt = <2500000>;$ }$ `3 @# E! P) d, S$ L3 ~, a; L
  172.     regulator-max-microvolt = <2500000>;, o& h4 Z* M5 B8 [3 ~7 [/ T
  173.     vdda-supply = <&vdd>;6 C4 L/ J5 @% F; s6 M
  174.     status = "okay";& q0 E& }! j9 w+ m8 J; M' J
  175. };
    ! J) f  d1 ]3 c. K; z5 {, |
复制代码
9 i3 y7 F. L8 _* ^! z
在arch/arm/boot/dts/ 目录下新建2 u' t# w) o+ T8 ?( p4 j" ?
stm32mp157a-fsmp1a.dts:8 p- g' ]' w% d9 R0 P

' E  @! y: L' y; l1 _) J# g; c! k& g
  1. /dts-v1/;- X3 o1 W, x& b" ^6 }' N
  2. #include "stm32mp157.dtsi". e+ V& {& X+ u9 o
  3. #include "stm32mp15xa.dtsi"( s3 A# o! b7 v9 l2 U
  4. #include "stm32mp15-pinctrl.dtsi"( _/ l8 `, O/ m% M& ]4 x. b
  5. #include "stm32mp15xxac-pinctrl.dtsi", R8 ?# M( u# x9 {7 \5 A% w/ B
  6. #include "stm32mp15xx-fsmp1x.dtsi"
    " V: z" R6 {9 E5 x( _
  7. / {
    ) l' `/ l: n! R2 R
  8.     model = "HQYJ STM32MP157 FSMP1A Discovery Board";$ p; L2 Y; I/ y% J# {% J
  9.     compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
    ! B8 _. `  M. Q2 W9 V3 q, H2 G
  10. ) v$ m; n, _  [. z
  11.     aliases {. u* {/ A* @) z1 j/ u# l7 g5 E1 w
  12.         serial0 = &uart4;6 l  g/ [0 L( Z8 H( ~
  13.     };0 p" k. T* Z# Q/ e. E

  14. 6 z6 J: y$ n2 E# z, Y, |/ v; }
  15.     chosen {* F% A4 n, }7 S9 R: o/ L+ v4 I
  16.         stdout-path = "serial0:115200n8";& f/ b9 H5 z/ H$ Q
  17.     };; L% Z* x. w' B, D

  18. ! ]: B2 g% a  M: U- O
  19.     reserved-memory {( L* \" Q8 y& P% u  M
  20.         gpu_reserved: gpu@da000000 {
    1 S! L3 w2 H1 @6 G0 {* n
  21.             reg = <0xda000000 0x4000000>;) s4 X* y3 w. O8 i- ]* J: b- z
  22.             no-map;
    ; \$ f4 |* M" d5 Y& r& ?
  23.         };4 ~. \$ i, T/ t3 ?0 w

  24. 9 B8 C0 q2 {+ Q! o0 _8 D1 l! q
  25.         optee_memory: optee@0xde000000 {% u& V# D0 q, |8 T2 r- X
  26.             reg = <0xde000000 0x02000000>;- p) i% [: k% S% k7 U
  27.             no-map;" _- z2 H, ]  d: P5 u. P- l
  28.         };
    - z3 l: p5 ]' `& Z- [+ s
  29.     };
    8 t7 ]) X# ]9 H; t, C
  30. };$ O8 t% ?3 r# n5 O5 \# @

  31. 8 {# P4 }- S3 J$ T9 B6 }: }  J$ r2 e) J
  32. &optee {
    4 x+ f! \+ N8 `! Q" s$ T
  33.     status = "okay";% B1 i+ e' x, D, [5 Y
  34. };
复制代码
添加了新文件需修改Makefile才能编译,修改arch/arm/boot/dts/Makefile,添加stm32mp157a-fsmp1a.dts的编译选项(红色字体部分为添加内容. A+ n1 c( ?8 [

, G8 M$ g8 S7 p6 o/ V5 B
  1.         dtb-$(CONFIG_ARCH_STM32) += \
    7 y% `7 K: P- b9 C  Y) R6 `/ T
  2.         stm32f429-disco.dtb \
    0 [9 `* {0 W( @
  3.         …….
    . n) r4 L" ]5 B% S
  4.         stm32h743i-disco.dtb \
    5 D( s! A) Z; F# {. i% }) ]
  5.         stm32mp157a-avenger96.dtb \
    * r! Q6 \) o4 L" [0 e7 V
  6.         stm32mp157a-dk1.dtb \
    - a, s, E: ]( g% [
  7.         stm32mp157a-fsmp1a.dtb \
    3 r, t# S) A, R
  8.         stm32mp157d-dk1.dtb \
复制代码

3 I% p: Y; e- {' d重新编译设备树文件4 m2 y* x) D" r/ f3 \. F2 C
9 Z5 R5 t! U5 O% M) q; A3 Y
  1. linux@ubuntu:$ make ARCH=arm dtbs
复制代码
. K0 q  S/ x; \8 W7 k
编译完成后会在arch/arm/boot/dts/目录下生成stm32mp157a-fsmp1a.dtb文件$ @& X; y6 B: c

/ Y  X% k$ Y2 A+ p 20201123183049633.png 8 x' @+ h$ a: z

3 Q0 M8 r+ Q6 u7 F% B将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。/ S- v1 n, j1 f# v, t

5 h, y: O, u# }5 r$ C0 w3 x$ H
  1. linux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot// Z4 C& F7 M8 G; h; b" `
  2. linux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/
复制代码
1 f3 h9 I  R; j5 V9 B: ?' q/ L
1.8 配置tftp
; w+ G8 i! O* |' I0 k' G, u' G在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。
* t6 J$ B& r8 E: A2 W* e, e
4 `0 `& o" E$ V# j- L" {如果环境搭建已经搭建完成,需要将ubuntu主机中的/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。
% d! Q& L' S5 {2 G, }0 }5 l* e9 g; F0 v3 y9 i! H  T& P$ H6 j
  1. /tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17
    ( n! {0 W# e! D. X: e4 I  K: ]* B

  2. 7 \' H6 P  F9 J) o( Y% J7 X$ a
  3. # Generic Distro Configuration file generated by OpenEmbedded
    6 y" u/ Z( d, T" ?
  4. menu title Select the boot mode3 v% K& l& ?& m' g, i$ p
  5. TIMEOUT 20
    5 P. k" g' a! q9 W, `% R$ _9 B
  6. DEFAULT stm32mp157a-fsmp1a-emmc
    1 u0 d% W$ p  q* `8 q
  7. LABEL stm32mp157a-fsmp1a-emmc
    & G; S2 z) W& q1 X+ I6 h* X
  8.         KERNEL /uImage& j7 h, Z2 u. X# o0 `' T
  9.         FDT /stm32mp157a-fsmp1a.dtb
    - r( Z- ]9 @, \1 R0 M8 h
  10.         APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
复制代码

8 }7 D1 b% h( W# }. i, ~修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。
7 k/ k7 Q8 Q8 f( p: n, _5 G7 t
由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。
  ^& x  ~/ Q# o. |& I- S; I, h9 q; h' F
20201123183151849.png & ?, T  K4 ]- W4 H
# n; v  w7 Z8 K* L9 |$ L: S  ^9 |
后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。4 r2 ]- T8 I7 O; g" j
————————————————
. |* z+ T5 C* A3 ~" x7 l  K. {版权声明:左月先生8 G- p6 o6 _+ j) o, J
4 @; y' Y3 p  T# j: [
. _2 X) `8 O- ?$ N1 ^/ }8 o
赞 收藏 评论0 发布时间:2022-9-21 13:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

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