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

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

[复制链接]
STMCU小助手 发布时间:2022-9-30 19:17
Linux内核配置及编译# I3 `5 `4 L/ V- E
解压内核9 X2 V( z/ a/ G, A0 N
建立源码目录- n+ P+ Z5 {+ K3 Y! U* t( J7 j2 ~) l
/ o) ?8 z( [& @. R+ m$ X& t
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
# b2 e3 E: c* o: U/ _; A
! e. o4 ?7 F1 U6 a- N 88e62f779a1744fde31e772364e0b64c.png
! D' y9 I5 K+ y1 t# ]8 V& Y) T5 R4 N2 l  p. q; V0 O4 B6 B  I
该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。
% _+ u) w0 D7 M& L) U# a! Q0 w- d7 N3 F2 U) ]1 Y" j; y
解压标准内核源码包0 L. B: L3 E" k# ~( p) Y, Y: t1 D  \- q
) Q$ i0 t& ?$ q  l; V
linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz6 C% V- T1 D; {2 l2 A

% r4 Z+ o9 }5 S  n6 P* s  M' r a0c3b42985e87f75b80b392efdf83e94.png 7 J5 \$ T0 c4 ?# i" ]# P- W
0 v; M; x/ _% r% ?/ o7 k' ^+ N5 \
进入内核源码目录下0 q) l; i8 z5 O  H6 J" Y9 G% u
" g& |4 C1 p2 H: Y
linux@ubuntu:$ cd linux-5.4.31! w/ M( q# W- P) q

$ H, i9 M( A# U+ X0 `6 k- M b9ab79543ca311bf391c169048896ab0.png
8 W5 y# v$ j# `( K) M# g
) f& H# D' ^, {  Q  `; z添加STMicroelectronics官方补丁
0 ^2 c5 d9 m, S/ ~9 A2 w2 r解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。* e, {' B! W7 a% X( ?; i

  k! Y+ e- H0 y* X( z( a4 @. ilinux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done/ p/ T& @$ P6 R8 F
6 n- g' T) X7 F
该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。
. q6 J7 w3 k1 c6 D( S( G- Q
3 Y7 x9 ?" `' T# |* i生成标准板配置文件
4 U9 J4 t5 D* p生成multi_v7_defconfig默认配置
. P8 B# h' Q, B5 l6 n+ F
% ~) j8 L- d! @+ flinux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
0 u( E# y# k" ]/ {9 ~
7 s1 l7 h* Z% U, ]9 L7 J: w在默认multi_v7_defconfig配置中加入ST官方提供的fragment config
2 N' v: ?' i, h7 H* E6 n5 y1 k% g# ^7 o7 {
linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
' J/ B2 z" W9 L" I  E" I4 `: ^9 e7 E4 s
linux@ubuntu:$ yes '' | make ARCH=arm oldconfig
$ f. L: M. y6 _7 ]- x
' b" c7 j6 z- i  v生成自己的默认配置文件  A- ?9 y% _6 G0 |
( \; C( w; ^( p1 T& i+ C
linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig, k/ m5 s& s0 M( r3 Z, k

+ p5 Q  b: O' s取消git中的SHA1) |' ^, j: ], \9 K# ]6 V/ s

& {# b, D4 I4 g5 Q# klinux@ubuntu:$ echo "" > .scmversion( x( k. R- J6 i# H! O) f
7 c5 n( U; R. N9 @- C) X2 c  [
配置内核
; l! ]1 O  t! @$ i0 i& R导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)
/ `4 l* J6 H- v- i/ R) |2 R! U2 Q8 m" F
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
- x* N$ p3 e) e1 f' @/ j5 h" g" q- B* g1 E) E4 q
验证开发工具是否安装正确,显示版本信息如下图所示。
+ j5 j. B: t: a& C1 `6 Y0 J! Z& A7 w6 A4 R0 A3 X/ s
linux@ubuntu:$ $CC --version
  i, x# H! R9 V5 p. b/ ~( \$ K/ ~# e
e7c033a7ef18ac912d96c7c77735e013.png
2 R- n3 o3 s, b# w) l8 u( O% v. W8 L6 D, N: e  q" g5 M( x8 q
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。
0 R, x' k) t9 P4 m6 x
! R3 b& I: H2 _; K/ alinux@ubuntu:$ make menuconfig
/ B6 `% m) A% ?8 W8 o) D) f: S" q9 g- Z' z0 o9 q
b6c7fffaca19e6f66dca60464c28afce.png
$ M0 y, ?9 r! p0 p! M; G# y4 D  U+ d( T( j
0 |( l" E6 p1 u1 Q7 g4 p可以在如上菜单中对内核进行详细的配置。
- Y6 u0 D% `) Q" S& P/ I3 m6 ^/ a7 r
编译内核% M+ {- L8 c3 I9 N* c
linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC20000404 F" S1 g3 N. ~

2 S. }7 ^. v1 _2 r# g 1cac87188826bae8f2a1d476df41f6e2.png 0 ^- }/ ?; f. `( i+ ]# N* y
" ~$ I( K0 D- u3 {3 K( C# Q9 r4 f
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。
& ]* r1 B7 T% l; U) h; s4 \. b' m' g! X- n2 m7 o- e
abe41d44c486bd7063f1ddda94c7d078.png 1 x; o3 P- X& e- p% t' j
; O2 w! H- A1 w, X9 Q, g
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。. K: v' ?4 N, z2 h2 }6 F
8 X8 ~, t. p1 k. g6 u, ~
22fd5f77d8262f70898c1cf7603d3566.png . b# L6 M, `0 q. z( ?! x

; f" d+ X; W, G" h9 {% o编译内核模块

" R1 `7 j2 P' A. |* H3 Klinux@ubuntu:$ make ARCH=arm modules! q1 S. y7 P2 B8 S+ Z
: Y! [$ g1 T! D& g7 s0 ^4 Y
该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。
& [# H6 l: w- L- T7 W" X
( E7 W6 i" J% [0 R* y4 H" @, [% Q% o 7d7319505ad57ccc51692238159ec2b1.png : n! J8 k5 s' e, S$ i$ j

& X; }% x9 ?5 C- q0 a生成设备树
- G& U7 n2 y% f+ ?3 ?) t' C% T  m
以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:
. L( G/ W; v* p2 U5 Z, a" J( H2 z' T. L7 o) x5 ~- _& Z" F
对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。% e) i$ P  {% k8 t+ e
9 g" R6 o5 H) |  p
在arch/arm/boot/dts/ 目录下新建( h9 ^% p: m) v6 C' c
0 N: R1 `) |/ V9 l; [
stm32mp15xx-fsmp1x.dtsi:
  1. #include "stm32mp157-m4-srm.dtsi"; k& k  i* I' R% Z! e& {& T9 N
  2. #include "stm32mp157-m4-srm-pinctrl.dtsi"
    ( z) W# n* W9 k4 K$ U
  3. #include <dt-bindings/mfd/st,stpmic1.h>9 ?7 m8 |2 H; W" G8 N4 |
  4. / {9 o& l" s/ M; S' L  A7 I' F
  5. memory@c0000000 {3 h4 J$ V0 ^" S" {$ ], I; R
  6. device_type = "memory";0 [+ e; X  f4 b) |- Z2 S* o  P
  7. reg = <0xc0000000 0x20000000>;
    ) x% Y. O* k; B4 X& b8 F' R
  8. };: G/ ^9 J; C8 N& V" ~! D* i
  9. reserved-memory {3 x2 h" x5 Y$ u' R' F4 f, C3 _
  10. #address-cells = <1>;( a$ U6 _! n2 \! x
  11. #size-cells = <1>;
    9 k1 o0 L& n, S( e2 \% u; W
  12. ranges;
    % m3 g( T  Y* w8 m$ ~
  13. mcuram2: mcuram2@10000000 {
    & A0 J, R$ V9 X5 }2 ?; _1 M
  14. compatible = "shared-dma-pool";
    8 O% S7 G* ~5 h" g( b: J
  15. reg = <0x10000000 0x40000>;) x$ S0 b! \1 o0 I1 O
  16. no-map;
    & M, Z7 E2 Q* ?- F
  17. };; Y" h) A1 B( r: H% Z5 {
  18. vdev0vring0: vdev0vring0@10040000 {
    7 C$ Q% e0 c+ u% _( X. q- c/ B
  19. compatible = "shared-dma-pool";
    ! z3 L! N# @) P+ z$ h9 `0 T
  20. reg = <0x10040000 0x1000>;5 a, p/ D3 k; j9 f4 D, W2 B
  21. no-map;
    9 [; G* s' W5 i
  22. };7 u' z2 D/ t3 k1 D  a
  23. vdev0vring1: vdev0vring1@10041000 {
    2 J9 L( X+ T  t/ a5 y) |; U
  24. compatible = "shared-dma-pool";! [7 L+ }4 y" P
  25. reg = <0x10041000 0x1000>;
    , u; _8 ^6 o; W9 [
  26. no-map;
    / K2 ^/ t5 z/ C
  27. };, Z+ u( h) _; L: N( K; _
  28. vdev0buffer: vdev0buffer@10042000 {1 B/ F2 K* e0 M3 \
  29. compatible = "shared-dma-pool";+ X) [' o' X/ x* I4 e7 \
  30. reg = <0x10042000 0x4000>;+ g$ g6 t4 M+ c) E5 o( T: r2 L$ q
  31. no-map;
    2 C$ r8 o( p6 M8 v9 e
  32. };
    , D) ^( \6 s9 h! ]( p3 v4 p0 L! m
  33. mcuram: mcuram@30000000 {
    2 ?; z& Y+ |  Z! G! Y
  34. compatible = "shared-dma-pool";% |( g% Q5 [* s
  35. reg = <0x30000000 0x40000>;
    ; m/ Q( N: I" `5 j6 g) B, U4 ?: w
  36. no-map;! H. i# p( L6 K
  37. };
    : N# ^+ [) t; ]* I
  38. retram: retram@38000000 {- `, d1 q! V1 f; K% X4 `. X$ c
  39. compatible = "shared-dma-pool";+ ^, |6 r! h4 o& k1 j5 s
  40. reg = <0x38000000 0x10000>;1 v3 L: y  O: Z3 ~" C
  41. no-map;
    / f3 X9 B, y9 H& Y/ h
  42. };% I# P4 w7 B+ e. {
  43. };
    + g/ |# S" D. \! n3 P
  44. vin: vin {
    . z! C- ?9 d/ ]9 }: ?$ }0 p7 w
  45. compatible = "regulator-fixed";
    6 e, v5 @7 d+ G
  46. regulator-name = "vin";# T4 X% \& U* f6 B
  47. regulator-min-microvolt = <5000000>;! k% |8 V4 e( b1 E
  48. regulator-max-microvolt = <5000000>;8 x6 s, I8 ^; X. A* O
  49. regulator-always-on;/ F& c9 ], o/ w- P. _. j; y
  50. };: ~3 F3 y$ e( i" T1 v- k% ?
  51. v3v3: regulator-3p3v {9 O* C. P1 I' Z! I4 [- a0 I
  52. compatible = "regulator-fixed";; [& p+ M7 y, K& @) _% y
  53. regulator-name = "v3v3";9 U4 O) V' l7 O. |& a3 s( G
  54. regulator-min-microvolt = <3300000>;+ u6 g- G& S7 u4 W) k" m) D$ I6 @
  55. regulator-max-microvolt = <3300000>;. Q" Z3 b5 S) `# ]% P
  56. regulator-always-on;. m) \+ A7 f" Q# L+ [& w* E4 l
  57. regulator-boot-on;6 B' ]) k% \. h4 o4 y$ D$ A
  58. };0 j$ {" L8 O3 d$ n
  59. vdd: regulator-vdd {5 x% L- p& c; Q3 v
  60. compatible = "regulator-fixed";
    ( \, N) t$ F# n% l9 S
  61. regulator-name = "vdd";8 H* K8 y( q# L3 s) u0 r% s! B# H/ Q
  62. regulator-min-microvolt = <3300000>;! |/ u+ U& |1 G
  63. regulator-max-microvolt = <3300000>;' U/ H+ ?5 f* i2 I' u" b: I; A
  64. regulator-always-on;
    0 z$ B% A3 O- B5 {& v0 a5 Z
  65. regulator-boot-on;
      M5 l# b( n+ e, ^) S1 O# O
  66. };
    $ d, O0 J* ^4 X) m1 t" S
  67. };2 k! _( N1 u" R' j: P
  68. /*HDMI CEC控制器*/
    5 ^  h/ U9 `2 @" u
  69. &cec {' I5 y2 G, e5 S9 x  G7 O
  70. pinctrl-names = "default", "sleep";
    4 {3 z! r3 _* {- T
  71. pinctrl-0 = <&cec_pins_b>;
    8 n4 a5 }0 o/ ]* U  `
  72. pinctrl-1 = <&cec_pins_sleep_b>;
    - L4 W. w' R/ i
  73. status = "okay";2 e1 M# s( J2 G! ^7 o& `- |4 B
  74. };
    ; W3 n4 i4 ]8 Z
  75. /*循环冗余校验计算单元*/* E# Y9 ^, _  J5 z2 p0 g
  76. &crc1 {2 w1 T1 x8 X7 m7 A% ?
  77. status = "okay";
    7 B5 Z/ X; |8 x% R# \# Z# p
  78. };+ Y1 V- B- j9 o
  79. &dma1 {+ v& P, C+ D2 D4 i
  80. sram = <&dma_pool>;
    # d4 q# m8 F7 [
  81. };, k, a& U' B3 V
  82. &dma2 {; S! y+ G1 ]* _. R, J
  83. sram = <&dma_pool>;* B& @, D% A* R$ W* d4 h
  84. };0 _, l7 f' x( [  {2 ^+ m
  85. /*数字钟温度传感器*/
    * c1 w' M4 D+ Y% Q" F
  86. &dts {
    7 ?% ^( E" z& b: v+ U
  87. status = "okay";/ L4 i3 |4 w4 X% c& i" s7 i
  88. };7 g4 n$ k* q$ k5 {* Q3 F7 R2 p
  89. /*图像处理单元*/
    " |: i% [+ x% u3 }
  90. &gpu {
    5 }$ D. a5 J# @; l( `
  91. contiguous-area = <&gpu_reserved>;
    1 h1 {" `" W4 ^+ s! O, P
  92. status = "okay";0 W# r- G$ T4 t* W$ ?
  93. };
    * x6 A8 a4 V$ ^# N3 i
  94. /*哈希处理器*/
    + e& `1 N, V& O; i
  95. &hash1 {4 V6 h6 U9 c' e9 l' S  ?4 q: k
  96. status = "okay";
    4 K$ D/ Z: s! E3 X; h; P! g
  97. };. T! w/ ?- O. A
  98. /*处理器间通信控制器*/
    $ W% N( u: y% ~
  99. &ipcc {* M0 ]3 |( S! V+ b# T
  100. status = "okay";0 }( ]: b; k- Z( V+ E8 ~4 l, a1 S4 ~
  101. };+ Y" [) ?  k( Q  |5 c! A
  102. /*看门狗*/  @8 A, s% `8 ?
  103. &iwdg2 {$ D2 g6 S0 a( C8 Q
  104. timeout-sec = <32>;
    # W+ o5 i; _* }
  105. status = "okay";6 M2 E* \+ r' r! w* [7 U
  106. };( v! v: `% }  M0 T" ]
  107. /*随机数发生器*/
    & e# _! E, a% B9 M9 @& C
  108. &rng1 {5 T3 ^9 D$ R5 ^1 y
  109. status = "okay";1 c! J! L) E, [! x3 i- P$ C5 D! G
  110. };
      N6 u) c+ B& {& ]: H% G! R& x
  111. /*实时时钟*/
    - l8 B  b3 y. F
  112. &rtc {! w& F8 Z$ k4 Z! {4 Z6 I
  113. status = "okay";
    8 h6 H. J" R; o; n& q4 ]& Q
  114. };  X% p! E0 ~! x8 V: ~
  115. /*sdmmc1 TF卡*/* H3 q8 q) g4 E( G% y
  116. &sdmmc1 {
    0 U* i# |) }5 d( M7 u* q$ N! M
  117. pinctrl-names = "default", "opendrain", "sleep";
    ; R/ S% T- ]! Y# W; N, C2 R
  118. pinctrl-0 = <&sdmmc1_b4_pins_a>;0 C7 x( k5 a- e: D- `
  119. pinctrl-1 = <&sdmmc1_b4_od_pins_a>;; {7 p0 {) V2 q, O1 `  H
  120. pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;) e9 j8 |5 G1 X  b
  121. cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
    - U6 Q8 ^. W2 _0 u+ [" y" r
  122. disable-wp;
    + |9 }( I6 R+ b5 v( l8 d( f
  123. st,neg-edge;9 c  v2 _$ i+ b! ?1 H% u0 I$ {3 G
  124. bus-width = <4>;) w% R) e4 \; i" P0 z% e3 g
  125. vmmc-supply = <&v3v3>;0 q% Q! c- j) L8 K8 X
  126. status = "okay";; k, P8 D/ x( A1 h" @, s
  127. };5 L$ ]8 F/ [# b, T% [' N- G
  128. &sram {2 Y9 h9 V$ A. p: B8 s6 }% @
  129. dma_pool: dma_pool@0 {
    9 C8 ~& I$ N% }
  130. reg = <0x50000 0x10000>;
    5 s6 l0 m0 `9 @1 X  L
  131. pool;! M" W5 ^7 _7 A2 g
  132. };6 v# ?' r9 ?. f: |# J. ~# u
  133. };
    : W$ ?/ s9 F2 _4 A  W/ _
  134. /*命令行终端*/$ z5 `% Q" c" m% w* m6 _. d
  135. &uart4 {
    7 r2 E' {) S: j6 ~( g
  136. pinctrl-names = "default", "sleep", "idle";
    8 [) ~( |5 O2 G( B/ r, E; I
  137. pinctrl-0 = <&uart4_pins_a>;! B3 m/ u; F5 A
  138. pinctrl-1 = <&uart4_sleep_pins_a>;2 e: e+ v: R' q2 ~. z0 K- J& G8 U
  139. pinctrl-2 = <&uart4_idle_pins_a>;
    % ]: m0 N7 O$ A. y- ?) K9 }# J
  140. pinctrl-3 = <&uart4_pins_a>;$ g0 ^/ T4 @0 I% Z. K& t9 W% q7 E
  141. /delete-property/dmas;
    1 x7 ]) X" x; x- H
  142. /delete-property/dma-names;
      L$ A( n9 t7 j1 k7 o
  143. status = "okay";/ n5 x& ?1 V4 I( o4 ?
  144. };4 r- t& U3 J9 k
  145. /*电源基准缓冲器*/
    2 o0 @+ _* C% g6 N7 Z6 X4 h% v
  146. &vrefbuf {
    ! K- F! X9 \/ K
  147. regulator-min-microvolt = <2500000>;
    . H& ~+ d3 J, e; F, q+ A
  148. regulator-max-microvolt = <2500000>;( C/ ?4 S* _3 `( z: Y: u+ Z: o# U
  149. vdda-supply = <&vdd>;
    5 ~& E' C% ^* o! T0 L; _* [
  150. status = "okay";+ c+ z( u, ?" l' t
  151. };
    ! b% h0 c: v  H4 W* [* Z
  152. ————————————————( y  H' `( \* o
  153. 版权声明:本文为CSDN博主「华清远见IT开放实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) Q7 x; t) @+ O6 q2 i
  154. 原文链接:https://blog.csdn.net/u014170843/article/details/119593172
复制代码

5 g" R9 f% o% G" p: O8 T
( a8 x- X5 x6 q( [在arch/arm/boot/dts/ 目录下新建
( U& J  p, V  I- l3 |
5 X3 q: K& K# \8 }stm32mp157a-fsmp1a.dts:
( @, \% b4 B2 H) X4 |9 K2 D1 U% v( w' [! L, k) p2 y
  1. /dts-v1/;: a( G: i$ a4 R9 z! r
  2. #include "stm32mp157.dtsi"
    5 S$ @6 X7 e  p6 R4 G
  3. #include "stm32mp15xa.dtsi"4 H2 c6 A" a! v( f( |# G
  4. #include "stm32mp15-pinctrl.dtsi"7 o4 C* R* `) \6 z8 Y2 X
  5. #include "stm32mp15xxac-pinctrl.dtsi"
    ' {2 U4 H6 h* ?: N4 Q
  6. #include "stm32mp15xx-fsmp1x.dtsi"
    . r' q/ r# c6 r4 @8 x  V
  7. / {. v0 D* d. t. ?/ f2 H) J
  8. model = "HQYJ STM32MP157 FSMP1A Discovery Board";
    8 J6 `8 p# ?" |* B3 j4 f
  9. compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
    7 y7 @+ H8 J& D9 y- @
  10. aliases {7 D, S) D  G- |$ u7 B2 w
  11. serial0 = &uart4;
    8 a  W7 k" z, R5 Y
  12. };
    1 x: X9 ?, P5 B$ K
  13. chosen {
    / u' y( U2 L8 s. @
  14. stdout-path = "serial0:115200n8";
    % T" @) {8 p" d! S
  15. };  N$ O( P) X" }' n: Q- t7 q9 f$ K
  16. reserved-memory {7 L! d8 M" b( i  Y$ t7 Z; S
  17. gpu_reserved: gpu@da000000 {5 ?+ v0 o: F' Z
  18. reg = <0xda000000 0x4000000>;
    0 C# U$ \5 \+ t3 x$ L
  19. no-map;! ^: ~3 [3 |4 S7 e4 O  B
  20. };2 p% o- g9 R) T: Y# Y9 d  _
  21. optee_memory: optee@0xde000000 {* r  ?3 J7 \' H0 A
  22. reg = <0xde000000 0x02000000>;% S' q3 k7 a0 ^% }
  23. no-map;
    % x( l0 x) t* X9 U
  24. };, t/ g: A  ~  {5 I8 I6 ]& ~  v) Z
  25. };3 m3 ]7 t  o. U3 I( i
  26. };5 h. x/ g# n4 T% v8 W2 I2 o1 e+ b
  27. &optee {
    9 {5 z) i' }( c- V
  28. status = "okay";" D5 x1 e9 `& R' W5 k$ c2 j3 s6 Q
  29. };
复制代码
" V5 Z5 ~+ q; S# J0 Y

% B5 D5 s8 M6 N由于添加了新文件需修改Makefile才能编译,修改
' z" f0 {9 F; U) D/ Carch/arm/boot/dts/Makefile,添加stm32mp157a-fsmp1a.dts的编译选项(红色字体部分为添加内容
8 ?3 Z8 j- w2 M9 O, H! z% `* E) \0 X  A$ U6 ^
  1. dtb-$(CONFIG_ARCH_STM32) += \
    + s9 E# E) b$ H. O

  2. . t. a: U( c$ ^% Q$ S7 w7 G! M6 Z
  3. stm32f429-disco.dtb \- M( l# Z" t; S* A9 B3 L; w
  4. 3 ?4 n2 }: D! G, q- J
  5. …….1 s# A4 S  y4 L" r4 A, L) v

  6. 7 V" j+ O, H) {4 B/ V
  7. stm32h743i-disco.dtb \
    ) k" h1 K( {7 t' q7 |' P: n) _

  8. 6 D% M) h' q/ h2 g' X
  9. stm32mp157a-avenger96.dtb \: Y9 b8 ~$ j' z5 {/ s& j" |

  10. * E! a& P. R% B& T/ u
  11. stm32mp157a-dk1.dtb \/ o$ o/ A9 ]+ T+ A5 k+ d

  12. # j( S  d' W$ G# k6 k3 O
  13. stm32mp157a-fsmp1a.dtb \
    ' B- I' u& q9 y8 F' d! t6 ^8 N

  14.   {/ }7 w8 m2 j1 _
  15. stm32mp157d-dk1.dtb \
复制代码

( G4 w. {1 t- f1 [# V
. @* ^/ L9 Q1 I' ^% B: R4 ^8 w重新编译设备树文件: W) u9 Z) M8 {7 }& L3 H
) G9 c7 J) Y0 d' V6 g3 Z
linux@ubuntu:$ make ARCH=arm dtbs- h; p! n4 G: O' y. d% K. f( p

: D( A3 ~# t6 _( M. a编译完成后会在arch/arm/boot/dts/目录下生成stm32mp157a-fsmp1a.dtb文件" _% z$ K# |/ w" E1 T

% a  o7 o- x3 i4 \- m" K 4bd369df94600414bc16600e87c61fb0.png ! Z  v& u' O" D3 C* `
6 K/ B# W% W5 O3 X: {( R/ m) l4 v( d
将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。
; V' H* Q! {$ m1 _0 a$ d7 ]
! @% E! m5 M' Q8 ]5 Hlinux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot/$ R$ q8 q: H9 f/ J
5 f, W0 h6 J( G- U
linux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/4 C5 f. s7 m) C6 v7 K
8 U: z0 }/ U  m9 u
配置tftp
" A# X2 G" T4 W; I1 `, k% p
在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。
$ J; w3 F  ^1 P  \
* p6 \6 R  A6 i/ \) z& g如果环境搭建已经搭建完成,需要将ubuntu主机中的
  A* v9 B6 b8 X* H) a0 R. T' k' x/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。
. ~4 b% I- ?1 o: A4 t$ `* N: V# N! A
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-175 p* J& f; ^: a3 @6 C# b

2 d' J: |- Q2 C) ?& m
  1. # Generic Distro Configuration file generated by OpenEmbedded
    8 p0 r- \" |4 u1 O: t
  2. menu title Select the boot mode2 j" C' c9 k# ?  U; O8 G. A
  3. TIMEOUT 207 r% Z7 B8 V- A* K, {, o( A
  4. DEFAULT stm32mp157a-fsmp1a-emmc
    # r4 Q# k. s- w7 x3 N
  5. LABEL stm32mp157a-fsmp1a-emmc) y  J4 Q1 I; @. O7 @8 T
  6. KERNEL /uImage: L" T$ h" F  Q# q, V' u8 O
  7. FDT /stm32mp157a-fsmp1a.dtb. k; c- m0 N0 L8 i. G7 L: {
  8. APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
复制代码
7 u+ q  I8 N( t
修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。: {, c8 l( Q  Q4 T* y

  c: P3 W+ I: d% H+ l# c; G2 H1 U由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。* n3 S( v5 D/ L  ?

. ]0 {7 {2 v/ k  Q! |" V) N) F 4aa0d0e927c99480198b3e1412589feb.png
' m; b7 z3 L5 X4 e2 M( A
; o5 h. V- ^3 n3 Q, Z' c) N后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。9 }1 D  T+ R" p0 q9 @9 w$ T
————————————————; f* k6 U5 f' n3 y7 ^
版权声明:华清远见IT开放实验室7 @3 W- k9 _; C/ W% Y9 v

$ [5 m% U  k2 W" x" Z4 ~  {
. l* a/ H; A" o+ @
收藏 评论0 发布时间:2022-9-30 19:17

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版