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

STM32MP157 Linux系统移植开发篇8:Linux内核配置方法及编译

[复制链接]
STMCU小助手 发布时间:2022-9-30 19:17
Linux内核配置及编译
" \, E- G7 A  n4 x% `3 e解压内核8 K  P' T9 V, a, ~# ]
建立源码目录
- g# a6 G' C9 c+ O
* \2 H1 B+ P1 Ulinux@ubuntu:$ cd ~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0
8 @+ D) p" Z' U' q* k; V* v. w& ^0 n6 D" {. j& |
88e62f779a1744fde31e772364e0b64c.png 0 L' @. ?  }- E$ G/ _7 ~4 g( G) r  m
# A4 f- B1 m& T$ U
该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。7 C: [8 F" D; Z$ e- ?) `5 k3 ?
2 _7 A6 x  r/ y4 w: \
解压标准内核源码包
1 v3 B2 C9 k: n
. W: h: a$ z. U' Plinux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz
) \' e* u" e! W5 P& }2 [' ^( p/ U3 R5 X# R, j3 ^  H# n9 J& ?# ^
a0c3b42985e87f75b80b392efdf83e94.png " u+ s: F/ Z# b1 m) F
3 R1 H9 a0 N6 m; s2 s; U6 G
进入内核源码目录下
/ B  P/ p" g9 [5 v" Y  u+ y
: }& {9 s  z% o$ p" i# Y5 ]linux@ubuntu:$ cd linux-5.4.31% W/ [* ~2 t9 ]
$ O5 `5 e$ N6 t8 P
b9ab79543ca311bf391c169048896ab0.png
! ?; s. L; Y" g2 Z  z  B
) J6 a4 b1 [4 e0 N9 \0 |添加STMicroelectronics官方补丁
" t# w4 Z# d" @  A解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。; S5 X0 B$ p* V  m7 i' {8 X) r
2 d5 l$ ]4 ?: c7 {- n7 p
linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done) l# L4 \4 ]8 y  H3 |% I

* k8 H6 l" I$ g% V该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。7 p' o# R4 t1 r$ Q$ {
" d2 g* L; G$ t
生成标准板配置文件
1 L3 U' t! C. i2 Z8 B/ @生成multi_v7_defconfig默认配置
- }1 M+ {0 o- ]' d. P) q7 }
& E/ @  s& x3 P4 \! Z8 O" llinux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
5 z" g' H, c4 n- T5 H2 `5 C& O4 h2 O/ O% h+ M* {
在默认multi_v7_defconfig配置中加入ST官方提供的fragment config4 Q3 l! R  F6 k+ j$ j! a6 d
& |' l$ G! D, _& ?
linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done9 j+ k2 q2 B, ]6 u% s" N4 ~' J

% d1 w3 H0 J* }( ^) hlinux@ubuntu:$ yes '' | make ARCH=arm oldconfig9 k4 f) S' l, e3 Q+ x

, h2 F" w& d# V* `" |生成自己的默认配置文件8 `6 d* g; V1 Y0 e/ l
; V% c8 Z* M2 X! {0 @
linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig7 m/ K( u5 H0 H7 Z" j

( D+ Z8 J. Q) _! O) ^2 Z! [  L取消git中的SHA1
% W! c6 U0 @8 ~$ B- U1 L0 f# p( ?3 |2 N, R' u: e
linux@ubuntu:$ echo "" > .scmversion
6 f! ~5 L7 P4 H! s5 H2 m
% V/ y/ C$ s- ^! @# H' x/ j" K配置内核* }8 @3 H4 i: o
导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)
- t3 p) R& y, M6 S( d$ f7 S6 _% q3 N! k& h2 g- p3 \
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi% t! u5 i3 k' z3 X5 s
: ?" `$ s. n1 h# @
验证开发工具是否安装正确,显示版本信息如下图所示。" ?5 x7 R" z5 c1 K  z, D
5 K9 I. V" ?! a  P& I2 O
linux@ubuntu:$ $CC --version' ?0 |  U4 ]& j$ p, l4 ^' ^4 y

) q2 W" x% t8 U e7c033a7ef18ac912d96c7c77735e013.png
5 C) t- s* o) s# i4 H3 V3 V0 S3 k9 V0 v, p7 a( Z
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。7 X" y: {7 N0 i. o
1 D& d: w# h" X% n/ t
linux@ubuntu:$ make menuconfig8 k4 a+ W! B( Z

" N) p/ D! a% q& i+ ]$ T b6c7fffaca19e6f66dca60464c28afce.png " f) C8 K- @( K) O. n6 c
% P7 T& @* |) d3 `% Q, n
可以在如上菜单中对内核进行详细的配置。! M4 f0 g* M, k8 t
2 s3 C" G7 i: a5 }, L' Y3 c
编译内核
6 L0 ~& y6 m3 X2 c# X- ^, y& elinux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
5 a% V$ e5 D7 z# k0 }" E$ g. U. K4 C( _# t+ ?' x0 I
1cac87188826bae8f2a1d476df41f6e2.png
6 [3 I+ s# @4 h1 N7 H8 ]5 b- G7 u+ n
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。
6 E6 A# p+ E% O% a# C+ |0 f0 Q9 q" @
abe41d44c486bd7063f1ddda94c7d078.png ( G7 v% a1 F2 @3 b, U* v8 c
8 {, W# C& i" O. u9 I0 l( k% V
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。7 ^( M- g% q  h) O. ^/ y2 @8 L
8 N2 J4 g3 T! u/ n1 |/ O8 `9 A9 T/ i
22fd5f77d8262f70898c1cf7603d3566.png ' i! b4 U; z/ ^  z1 l+ |' Z5 M
7 ?' }3 q' U3 U: d0 Y! W
编译内核模块

# M& w- T$ q) D- Y, Z; `: Ilinux@ubuntu:$ make ARCH=arm modules1 _: @& B' d. L$ B% x1 M
: p8 L0 F# c/ Q* \7 ~
该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。
0 R. ]- B+ e% T% A; d7 W& W# J( W" R( G, D) _: n
7d7319505ad57ccc51692238159ec2b1.png
) A7 W1 d  w7 ^" Z: I
& P7 i* c7 M, m+ M# Q( y生成设备树

- s8 @3 C2 S7 f6 M  v- b以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:
& Y& w1 ?' ?7 |7 U
3 P/ h$ B6 s! T# Q% n' _  J对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。7 Y* i% K) k/ y) ^

3 P6 ?3 ^( P7 J% j, u6 S在arch/arm/boot/dts/ 目录下新建8 W  n3 s6 F& N3 n
7 h, O# h1 s  w2 X. ?
stm32mp15xx-fsmp1x.dtsi:
  1. #include "stm32mp157-m4-srm.dtsi"
    ; c, [) _$ m( H; I
  2. #include "stm32mp157-m4-srm-pinctrl.dtsi"
    ' E3 S. {' J. ~/ }7 g( T$ O
  3. #include <dt-bindings/mfd/st,stpmic1.h>+ J# I8 z( _  Y9 j/ v
  4. / {& p$ T4 I: M# g
  5. memory@c0000000 {: O0 g: }  S4 i; X
  6. device_type = "memory";
    8 c: t7 t- W  c  B! O
  7. reg = <0xc0000000 0x20000000>;
    0 x+ ^, J- m" S; B6 W
  8. };
    ) g1 @: A& E! D+ ^* o2 e' y' G! [
  9. reserved-memory {* ]% l+ s2 j/ N1 {; u. [
  10. #address-cells = <1>;2 k& Y; z+ M6 k4 v0 [  r
  11. #size-cells = <1>;
    2 Y+ R$ D) u2 U- A0 M
  12. ranges;
    9 _7 M5 C( {/ F: q2 V+ r
  13. mcuram2: mcuram2@10000000 {, k* U4 [5 n' W+ h' \9 w
  14. compatible = "shared-dma-pool";
    4 s+ ?4 W. k. J9 [6 ?
  15. reg = <0x10000000 0x40000>;& f- `0 q# t% ~* p
  16. no-map;
    ' }; {6 O; A( x
  17. };- S% D' P' X& y6 k* l/ u: ^, R! X
  18. vdev0vring0: vdev0vring0@10040000 {
    9 O- X' ^, E( l+ {' {# v) y
  19. compatible = "shared-dma-pool";
    $ P* q7 P0 i1 @) o2 ?* z" H. F
  20. reg = <0x10040000 0x1000>;
    1 k* f9 ^) P' h* |) v
  21. no-map;
    ; \, I9 y8 |, u: l
  22. };
    - |( V4 Q% x) t9 s
  23. vdev0vring1: vdev0vring1@10041000 {
    ( n$ J* Z. G: Z4 o
  24. compatible = "shared-dma-pool";
    " D1 i9 b" M1 w
  25. reg = <0x10041000 0x1000>;$ R/ M* k) W6 y  T$ [; }
  26. no-map;- V3 }# K  Q1 {; O4 I/ @. p
  27. };
    4 y) R) n; A4 F' I! i
  28. vdev0buffer: vdev0buffer@10042000 {; a; ^* {7 E" g3 [- B
  29. compatible = "shared-dma-pool";! I( w9 d0 P, y- C3 s  r6 v
  30. reg = <0x10042000 0x4000>;
    & k- A3 l( G( K! V
  31. no-map;( [# w. W1 ^3 O3 C' M* P
  32. };6 k# Q. q" K9 R9 E3 U
  33. mcuram: mcuram@30000000 {9 H# M! \  A5 [+ q( q
  34. compatible = "shared-dma-pool";
    ! V9 h8 y" K+ n- [3 Q/ q
  35. reg = <0x30000000 0x40000>;
    0 @: B* ~/ W3 s. Q4 T9 u* ~
  36. no-map;% [: h/ I. |6 x' ^0 F2 ^% t( a. h
  37. };' n+ Y: J# G2 _2 r6 {9 B
  38. retram: retram@38000000 {
    " q9 z; C1 B2 U: G. h: A
  39. compatible = "shared-dma-pool";
    ( w, N% C9 S; S0 P# c+ ^
  40. reg = <0x38000000 0x10000>;
    % c% @9 Y5 g8 f8 p) |5 h: S' j
  41. no-map;; {7 ?6 ]6 M% k' t9 H* e, I1 s
  42. };
    ' c/ ]4 |$ Z& ~- _5 \. ~
  43. };
    4 \' |0 E9 }) `0 t* L7 d8 C1 }
  44. vin: vin {
    & n. z! \+ N) D# i7 ?2 c4 q+ R
  45. compatible = "regulator-fixed";' F/ F: {2 ~3 L/ v2 q
  46. regulator-name = "vin";
    5 z0 n/ l+ ]( I- a: t% X; a  G
  47. regulator-min-microvolt = <5000000>;4 G: ?% H# o1 c! e, Z  I, Z
  48. regulator-max-microvolt = <5000000>;
    1 q( L3 E6 [4 w6 p( Y% j* L  u
  49. regulator-always-on;
    * h# o) g5 @( s. j
  50. };
    - r& z: p+ S( R* P8 a2 R1 ^
  51. v3v3: regulator-3p3v {& ~4 P$ n9 l" b' I/ L
  52. compatible = "regulator-fixed";( ^$ D( y( k  j, j8 Q
  53. regulator-name = "v3v3";3 S) Q5 q+ K/ x2 C, n
  54. regulator-min-microvolt = <3300000>;( y+ ]% G; C3 G
  55. regulator-max-microvolt = <3300000>;# k" o1 {( f) r
  56. regulator-always-on;
    ! O  {9 w' W9 \6 J/ `& k" J: _4 ^
  57. regulator-boot-on;
    8 f, l5 U  u2 Q7 s; B# i7 P
  58. };1 ?% H0 `; }: t4 `+ w' K9 c# Y
  59. vdd: regulator-vdd {6 y) g( U, _& N! p% C* u: F
  60. compatible = "regulator-fixed";
    . w: i2 n7 l2 Q& V# ?
  61. regulator-name = "vdd";* ~) |+ m' d, \+ l
  62. regulator-min-microvolt = <3300000>;
    & O! x0 G4 S& D
  63. regulator-max-microvolt = <3300000>;
    / p3 V( a2 b1 r& ]+ h: k- D
  64. regulator-always-on;
    ; J2 }: n( n2 I- h$ d
  65. regulator-boot-on;+ d( u8 t  ^( H" M6 a) L
  66. };
    + Q8 {& K' N$ {4 W3 R) x
  67. };7 g  c* }# z, q, N% Q
  68. /*HDMI CEC控制器*/2 g' m7 a9 O5 D  I1 H4 T
  69. &cec {" ^5 @2 B5 c5 H6 T1 k" z
  70. pinctrl-names = "default", "sleep";5 d- N. W6 r# N  Y! g
  71. pinctrl-0 = <&cec_pins_b>;
    4 R- M; Y2 {! P
  72. pinctrl-1 = <&cec_pins_sleep_b>;( z. }  q1 E9 u0 j( \" v
  73. status = "okay";
    $ y: P& g# ^& I9 `
  74. };7 \; ^5 M- q( F, z! [
  75. /*循环冗余校验计算单元*/
    " ]. v! L* w6 Q/ W
  76. &crc1 {/ E3 B4 g$ g. `) n1 X+ |4 V
  77. status = "okay";
    0 z, _% A: |# s8 E+ ]4 Q8 s! S
  78. };7 W; |- ~9 p, _" J4 W- }4 r
  79. &dma1 {& E2 o6 |6 W7 U. B+ l+ X
  80. sram = <&dma_pool>;
    2 m5 d5 h/ D5 `# q
  81. };
    ( J; I" X- z1 o( X
  82. &dma2 {
    $ \7 ?$ K2 Y2 o" A, Q1 v
  83. sram = <&dma_pool>;1 {& Q; |( H* q) }3 E/ H6 B4 k
  84. };
    : x8 l  ?$ s: M2 F7 u
  85. /*数字钟温度传感器*/2 z' m9 k9 h- ]0 w( v
  86. &dts {( R9 e# _0 C  M
  87. status = "okay";
    ; D/ k" F4 N+ l* u
  88. };  L8 V& ?+ L# q# D9 S0 g, m6 A
  89. /*图像处理单元*/
    ( ]" u0 g8 f4 a* c8 Q0 P
  90. &gpu {
      _- s$ Z. Y9 ~/ l) n  G
  91. contiguous-area = <&gpu_reserved>;. Q3 ~* r/ v( U7 N5 f
  92. status = "okay";
    ; P5 X/ V2 V- F9 n) F
  93. };
    - I: m6 l6 ^3 `" B  W; W
  94. /*哈希处理器*/
    ) D( F# {8 M4 g) F' b! x
  95. &hash1 {
    9 i/ _" I, }" r: J$ ~, h9 d# D
  96. status = "okay";+ W! Z8 Z8 X- M$ ?9 @& [
  97. };/ i7 }; b* a9 f& |# N" b4 W
  98. /*处理器间通信控制器*/
    7 E. i8 ^( }; _# W) A8 Z5 Q
  99. &ipcc {" L; r& ?0 h1 ~, {6 `
  100. status = "okay";
    , u) T8 R8 t, w$ V4 D5 {/ c$ t" v
  101. };& e3 b8 r( y/ D' v( w8 q. h
  102. /*看门狗*/
    , b. {5 O7 W6 D" g) k9 B6 X
  103. &iwdg2 {( M9 D/ R" P; P( o4 H: T) D: N( s1 B
  104. timeout-sec = <32>;) W9 ?0 I3 t' I  k1 v5 K
  105. status = "okay";
    ; H8 T  X8 q4 ?5 E( A. E. a
  106. };" s7 F* Q+ J- i1 f! f& N  e
  107. /*随机数发生器*/$ s8 K2 G) M4 G5 E8 b) k
  108. &rng1 {" C- j2 f" y& H  f) r1 l3 s5 u
  109. status = "okay";
    # |8 s" r9 G3 C* c, u- ?/ w
  110. };
    1 r) ]- X' {: y' B  p% w' V! @
  111. /*实时时钟*/! V4 w8 f$ E) k6 C
  112. &rtc {
    , d! i* G" [* b7 h! N: p5 i! m/ S
  113. status = "okay";
    ' O2 O2 B; Z" t2 {
  114. };5 F3 o4 l/ Q  ?5 u& @
  115. /*sdmmc1 TF卡*/
    % Z2 w4 D5 t0 _) V6 `+ j
  116. &sdmmc1 {( h; c% Z8 t8 ?# a9 `
  117. pinctrl-names = "default", "opendrain", "sleep";( Z: Z. N9 N  p# ~8 c
  118. pinctrl-0 = <&sdmmc1_b4_pins_a>;
    / }* n! N3 P  s4 @2 R7 V
  119. pinctrl-1 = <&sdmmc1_b4_od_pins_a>;8 q) S' v6 w# J, O! c2 U" v
  120. pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
    4 H- V! L3 |: R6 s5 z* J
  121. cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;/ o* N& F# }4 s
  122. disable-wp;: i7 P& I6 R; A! d$ M6 T
  123. st,neg-edge;
    4 f' A- F! S" ], M1 @# k1 }0 Q
  124. bus-width = <4>;; T5 `! R" S! H
  125. vmmc-supply = <&v3v3>;) b0 F& U" G% W: ]
  126. status = "okay";
    3 s/ B" w& [4 D8 u
  127. };. O5 ?5 P+ F( r1 L# r* w8 N! c6 s
  128. &sram {7 s, y$ v5 y8 E1 |
  129. dma_pool: dma_pool@0 {
    - J+ r3 z8 u' L* m
  130. reg = <0x50000 0x10000>;
    - \4 q3 e; M8 a! A
  131. pool;
    " L) ~: K7 |" l1 T5 C2 r
  132. };  @( t! g# t" V4 R
  133. };
    " B1 X1 l0 p2 B+ n1 f
  134. /*命令行终端*/
    # }- O9 x  l* I3 n) I3 O2 w
  135. &uart4 {6 I9 A4 n) e4 h: u. H
  136. pinctrl-names = "default", "sleep", "idle";7 B/ ^. l% c8 y) T; O4 S6 d: |) G
  137. pinctrl-0 = <&uart4_pins_a>;9 V. y0 ?' n( L! Q  G" d
  138. pinctrl-1 = <&uart4_sleep_pins_a>;7 U  U8 a* t8 V+ m8 G
  139. pinctrl-2 = <&uart4_idle_pins_a>;' N5 U6 l; @8 J+ `
  140. pinctrl-3 = <&uart4_pins_a>;- \* }' B5 X, W/ F( x
  141. /delete-property/dmas;
    5 \6 q* q, ~' L  n: ?4 x& V
  142. /delete-property/dma-names;
    , k: W6 `( Y; Y+ `( o% J" H# @
  143. status = "okay";
    6 L: d, C! e* D# O* ]& f: t
  144. };
      R# d6 {( H7 m; n
  145. /*电源基准缓冲器*/9 M+ F4 |4 _: g  l( ?
  146. &vrefbuf {
    " t  H0 }# R* Q6 J
  147. regulator-min-microvolt = <2500000>;& K" z5 r! N! Z
  148. regulator-max-microvolt = <2500000>;# f) C1 L: ]) t. u5 w* C
  149. vdda-supply = <&vdd>;
    ! s% G% p# n* `+ A
  150. status = "okay";" I# X/ _1 G" ?7 b7 s
  151. };. p4 @" p+ H7 }1 ^
  152. ————————————————
    + y  W+ n" B5 \$ _4 B! I8 B; I
  153. 版权声明:本文为CSDN博主「华清远见IT开放实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    + W* o2 H5 E0 A6 |
  154. 原文链接:https://blog.csdn.net/u014170843/article/details/119593172
复制代码

! E2 r8 I1 p+ o6 @/ s* w/ D- k7 p0 T# h. R% m: u" j. m+ ]. u, \
在arch/arm/boot/dts/ 目录下新建: ]! m/ b. }- E8 h! ?9 z6 D& Y
; j- x$ l3 G$ z. T$ p
stm32mp157a-fsmp1a.dts:
2 D+ ]( w1 i& B* O7 T- |# O' r: L( a* p6 q' w
  1. /dts-v1/;
    + j; ~' ]: a) D2 L% T
  2. #include "stm32mp157.dtsi"
    $ x  d# s7 q0 o
  3. #include "stm32mp15xa.dtsi"6 d6 G1 w. k" M. K
  4. #include "stm32mp15-pinctrl.dtsi"
    + z, Q0 `  _% h( X- Z# ~. o
  5. #include "stm32mp15xxac-pinctrl.dtsi"
    0 A; U" W- \9 f# V6 E8 [1 h
  6. #include "stm32mp15xx-fsmp1x.dtsi"" g0 R- _, l3 K& \, G3 m
  7. / {. M9 v5 j5 q/ `; Y* E
  8. model = "HQYJ STM32MP157 FSMP1A Discovery Board";8 L4 ]1 e6 n8 s
  9. compatible = "st,stm32mp157a-dk1", "st,stm32mp157";; X; E8 ~% K/ L& x6 A
  10. aliases {7 \4 h" _+ t. }7 \$ ~7 t4 ^  T
  11. serial0 = &uart4;  B0 @% H3 F7 ]) h1 N8 T! `
  12. };6 M& p+ `# i; m" g
  13. chosen {" A3 u+ g& A) c8 I- f
  14. stdout-path = "serial0:115200n8";# B! T5 T- ?2 ~% b8 Z% I' A
  15. };
    2 ]: \( Z4 ]# K4 K1 w9 h4 |, R
  16. reserved-memory {" x" B: J8 w) h8 {
  17. gpu_reserved: gpu@da000000 {, i' P% A3 u5 y9 u8 d* P) ?/ P" p
  18. reg = <0xda000000 0x4000000>;( H% e6 t& M8 {' R6 z* x% J
  19. no-map;$ S0 y* b6 z- m  l& y* G
  20. };- I4 {9 n2 A& L( z: G5 l) H. k9 |
  21. optee_memory: optee@0xde000000 {7 J$ }5 c% i0 _) B, w+ c0 i5 ^4 c
  22. reg = <0xde000000 0x02000000>;
      z. `1 o" B  s
  23. no-map;
    # ?  G6 V+ S) L9 L  l
  24. };
    / c6 W' v7 n. L' _
  25. };
    ( A% ]. ~7 Z% j; [
  26. };
    ! r+ J) d+ v: x0 h8 l% W
  27. &optee {5 m9 |2 f" m1 G7 t( d8 m
  28. status = "okay";) X( E" c- P& Z/ i! g  d! m6 i
  29. };
复制代码

. [5 I6 v" j5 N! u; J
5 b6 ^* r4 j# U5 c由于添加了新文件需修改Makefile才能编译,修改: p' H- D# g1 q' w& h- Y( g" W
arch/arm/boot/dts/Makefile,添加stm32mp157a-fsmp1a.dts的编译选项(红色字体部分为添加内容
% \; u) Y. |) A5 x' I0 e, h
% G2 n$ l# k- {: ~
  1. dtb-$(CONFIG_ARCH_STM32) += \5 R1 n  Z4 A) O2 j7 M

  2. * w; ?, J9 x: |
  3. stm32f429-disco.dtb \
    3 W; ]0 z# ]* W& L: f  ]

  4. 5 E5 }" s! Y* ?& c# G
  5. …….
    % E  }. h- s' R% p, r9 A* C
  6. - P6 f% o8 }8 C0 a" X& T1 Q
  7. stm32h743i-disco.dtb \
    & g; k) b. j* O7 b& M+ ^4 j% b

  8. 3 ?4 I, K1 ~: B
  9. stm32mp157a-avenger96.dtb \) }9 ^. r9 \7 j- B7 W
  10. 1 k# G: C5 }* F/ ~4 ]) @1 Q+ u
  11. stm32mp157a-dk1.dtb \
    1 J' p; s! @8 z# v7 j8 E: ~# M7 g

  12. " D8 N' y) \3 V/ Q2 o0 i2 C! b
  13. stm32mp157a-fsmp1a.dtb \
    - \$ l7 }2 Y$ J' U
  14. " f& v6 s1 S  |, J8 f
  15. stm32mp157d-dk1.dtb \
复制代码
, f% y9 t2 l( {: e. c
8 s4 D! |3 \/ s" `  I- e
重新编译设备树文件
- k( d# Q* I5 H* M7 R) A2 F5 i8 i5 i; e
linux@ubuntu:$ make ARCH=arm dtbs
9 [  E. Q! h/ R! n, T  t3 a3 I' y; W8 Q9 r
编译完成后会在arch/arm/boot/dts/目录下生成stm32mp157a-fsmp1a.dtb文件
  \/ W3 l, `4 k- Q7 M9 q
: |- F6 y" d$ j 4bd369df94600414bc16600e87c61fb0.png ' Y- y$ w- l3 U9 k5 E+ m9 G# h
0 O6 z* x' X& u$ L# T
将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。
% g( L8 T8 j& b3 Y9 M  x) L
/ U9 L' x1 l6 p! T- @, l; V# F8 Plinux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot/0 }' d  c2 n$ |

! z5 c8 y0 e" \3 P( Ilinux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/
. h0 x# a! o6 P6 p0 |" K' I* I" C  k
配置tftp
7 A- b& ]- y+ u
在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。8 Y2 v9 X; Z) l9 g% p

( |6 ~/ ]: i- A6 j0 ?* g% R- z如果环境搭建已经搭建完成,需要将ubuntu主机中的1 Y% e9 c  R$ ~6 i2 J. Y
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。
! O# I. P" H4 C. [3 v9 z7 s- [3 _2 h# T  s7 C8 V
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17
" ~& E  r; j0 {' J! {+ A- h7 v/ ^: A' N
  1. # Generic Distro Configuration file generated by OpenEmbedded- W* a3 w" q  t7 h+ T
  2. menu title Select the boot mode
    0 ~1 a4 W4 l# @: g+ y
  3. TIMEOUT 20
    9 o+ Z$ l5 F2 x! M
  4. DEFAULT stm32mp157a-fsmp1a-emmc1 o! V! E: }3 G$ ]3 r
  5. LABEL stm32mp157a-fsmp1a-emmc
    ) \. Y* o1 V  e: G
  6. KERNEL /uImage
    # m" i- _7 R6 F6 G# F" h  @0 v/ G& {7 U
  7. FDT /stm32mp157a-fsmp1a.dtb" I( q. y& X& {6 F1 E9 |9 `
  8. APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
复制代码

8 Q. f+ V; g+ B( u修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。4 y0 N) U+ M  V" a0 \$ i
# J, r+ A8 n6 a+ e4 ^) p9 W8 ?
由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。+ l; S. ^9 T, t; ^+ R9 L- E

$ d3 a& T* n* S& x$ I. P 4aa0d0e927c99480198b3e1412589feb.png
! x: U( o1 k' r; z% h, u: }) n. i- t3 G6 b2 h8 U' b  G# P" ?& V
后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。
! N, U6 c0 X7 n9 w/ E# v& a5 ~————————————————
1 a; @  Q* N% l" Y4 J- n4 E3 K版权声明:华清远见IT开放实验室8 H9 @8 z5 p5 Y& C- }* Q

) T, i, w6 L7 K+ v8 z0 u) Y- t. p! {9 S/ t4 m! I
赞 收藏 评论0 发布时间:2022-9-30 19:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

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