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

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

[复制链接]
STMCU小助手 发布时间:2022-9-30 19:17
Linux内核配置及编译7 M5 Q) V- b5 Z* A1 u& s
解压内核1 l) C4 y4 c& q  r9 P
建立源码目录$ p; O( T& q& ~8 p1 L( o

7 X/ T( J& V" X/ f/ 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
; I: A8 g& [  x5 J
2 J+ W. r( \3 j  h 88e62f779a1744fde31e772364e0b64c.png 1 O  r2 [! J0 s: L* A( t

* ~" b4 A; v0 `+ @该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。2 x4 m# c: d' r/ n  C
4 L3 v! _9 s6 [# x+ k
解压标准内核源码包
7 N( l( ^) T5 a" ~: W' N% E9 S# C& r- D* F5 o+ k
linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz, J! v" v4 {. O8 N$ W& Q8 R
3 R/ C/ ]; O3 j0 o; c6 y
a0c3b42985e87f75b80b392efdf83e94.png
& {5 O1 x( \/ f, @0 r, ]2 o1 ?3 Q
进入内核源码目录下
' o$ v- B3 i# t1 d# x+ i4 ~# p& E! ~; R8 G9 g
linux@ubuntu:$ cd linux-5.4.31
/ b: V9 O5 G  G& A9 E
: u5 B# }. G" L! J, L b9ab79543ca311bf391c169048896ab0.png ( _" [5 O7 X! w3 B( b; e( T
4 e; f  {8 H! h% Z. E/ {
添加STMicroelectronics官方补丁7 Q. |% i8 H, T& u8 I0 y/ A8 Z
解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。5 V3 I9 W) Z, \, X" z, N  H: k
! x4 P' b# b8 R8 r; X1 H; d
linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
% u$ n7 s7 ~4 d6 H$ U4 _! s: d2 z% ~9 a, m8 ?/ n3 `6 ~
该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。# F  Z6 f- A, b6 z. s6 |, s
7 ]9 w& N- X0 I7 }" n% {
生成标准板配置文件
# v: G# Q+ }! Z- ?生成multi_v7_defconfig默认配置
" b0 w$ l! ?9 \/ h2 l
/ j6 a" f7 i( F5 ^7 Clinux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
( U* _4 H4 h* }9 K+ f! P$ e( ]9 ?" n6 S5 O) E
在默认multi_v7_defconfig配置中加入ST官方提供的fragment config7 B5 P7 |0 x9 B9 ~! P( d
8 p# [% f$ @- a; U' w
linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
/ a8 [6 A: c% s! P* {6 x0 r% U- @4 j/ V3 Q/ J
linux@ubuntu:$ yes '' | make ARCH=arm oldconfig
" D. F. P& S1 l' v8 ]. T1 ^/ G- S* y- ?5 b. U& ?+ M
生成自己的默认配置文件
8 ^! X  k9 t# k  k4 |1 `! O" v  m+ ^- l: a, O
linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig# L# Y. Z% ?/ \$ a1 Q

9 I9 r& x1 S. E; k' }/ g# b取消git中的SHA1: P3 S1 L5 X3 k" t" ^8 K  o$ K

1 a) D6 i6 y* Xlinux@ubuntu:$ echo "" > .scmversion  }8 w; e, s2 G5 G7 T3 Z

: n' u0 `$ s2 w6 y配置内核
5 E! v' Q" [9 d2 O5 e导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)2 f% M4 ^, m- l/ @- \$ g# v
0 {$ b8 D8 {0 d, C, j
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi3 N, L  F* }6 Z+ m9 [/ F
/ Y. `( v2 e% X3 t) H' `
验证开发工具是否安装正确,显示版本信息如下图所示。% a! U- ]1 l1 C7 j! H
4 E* q5 f" f+ k
linux@ubuntu:$ $CC --version* D7 A" Z/ @( u5 ~1 v. S( X

5 Q4 }# Z* V2 Y* {) S  X e7c033a7ef18ac912d96c7c77735e013.png * H* W8 k2 x, \. m/ {# r9 ]

" ^0 Y% s: c: w8 s& S在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。' X8 Q- z1 @, L7 R( \- v; w
2 Q" f! h: X) g% z8 y: ^
linux@ubuntu:$ make menuconfig9 `& V' n( i! N5 |. ^* k' X) \
, l0 z% S" d& w/ ^3 y- |' g
b6c7fffaca19e6f66dca60464c28afce.png
* W8 P# F2 |- G8 j: L" A& [$ v* p
可以在如上菜单中对内核进行详细的配置。* l' f  P  ]  d; U5 z" _

, r% T8 m% y$ r0 a0 [编译内核
2 ^3 n7 U) n, I7 D& O  j7 s/ e9 q1 |linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
/ S, E( ^" e2 a, ]* L7 U+ ?4 B+ m5 x* h' k
1cac87188826bae8f2a1d476df41f6e2.png & t2 x; S: B! U
  Y' h4 |5 \; d
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。6 d) a2 U& q3 w2 I

: [5 v9 }! }0 m) n$ s abe41d44c486bd7063f1ddda94c7d078.png
' `% v7 e% E5 D0 ?% @
$ l5 t2 ^4 I; `( k9 B1 V/ O此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。* o/ l* j3 o+ }% G& }

$ a6 q5 E* z9 l' t" q8 p, [ 22fd5f77d8262f70898c1cf7603d3566.png 4 ]0 Q1 s- ~3 {; X7 h! [8 {

1 V* ]" Y+ d: F$ O编译内核模块

$ l+ u& E8 v' t6 m! ?0 B0 w0 hlinux@ubuntu:$ make ARCH=arm modules/ e. z- e8 j& ~7 j8 J) ]6 ]
5 j/ e: s1 i& s5 A% x  L! }
该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。! A3 L) [2 j" U( H& d4 ~

5 q* E! s6 Z( o3 w 7d7319505ad57ccc51692238159ec2b1.png
& r5 B- P$ @. L) X' {
1 d( W' s5 C" i! l7 u$ \5 ]生成设备树
+ Q/ C& Y4 B. }$ |) a
以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:; x5 M- l) a9 `" p+ K4 Q* w; I/ V, |
( p/ _& b! ^5 ]- \" m, C
对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。& {( m. h# h: f+ X# ~( \. ~

8 H) s: W6 P: \2 l5 q/ ?在arch/arm/boot/dts/ 目录下新建4 Q2 ^1 H$ S# P/ _" z+ _6 I5 T
, z; V+ z0 D" G/ T; m8 X3 @
stm32mp15xx-fsmp1x.dtsi:
  1. #include "stm32mp157-m4-srm.dtsi"
    6 B5 D' a( W% b" M0 z9 y
  2. #include "stm32mp157-m4-srm-pinctrl.dtsi"
    1 {' @7 r. q) f" D* `
  3. #include <dt-bindings/mfd/st,stpmic1.h>
    $ ]5 e8 ~% P' a0 R: D4 x
  4. / {! y4 t8 x3 N/ j  B6 U& k" ~
  5. memory@c0000000 {" ^- |  t6 r* y3 Q! _5 e
  6. device_type = "memory";
    1 ^/ j* c  r, H- _
  7. reg = <0xc0000000 0x20000000>;& H( d' \8 T. }; ^/ |  m
  8. };
    * v8 T& m6 L* G! z" o
  9. reserved-memory {6 j3 f8 @3 a" m1 D# @& O
  10. #address-cells = <1>;
    / n3 z5 u+ O. _. W. g) r
  11. #size-cells = <1>;; A4 G' w4 L' C7 j
  12. ranges;1 d6 T1 x4 G6 `  P, @
  13. mcuram2: mcuram2@10000000 {
    * h6 |/ A9 o" R1 S3 N
  14. compatible = "shared-dma-pool";
    ' C% A$ G+ m6 X$ J( @
  15. reg = <0x10000000 0x40000>;
    . K& G+ x, K# w8 D
  16. no-map;6 ^: |! t7 v' b/ m  b8 ]
  17. };2 o- [+ b1 N' p" l7 H7 q
  18. vdev0vring0: vdev0vring0@10040000 {. `/ ^  z7 u4 s2 v. s
  19. compatible = "shared-dma-pool";. f; R( x$ v, \# E- H. k
  20. reg = <0x10040000 0x1000>;' {* c) R# ^/ g& j$ ^
  21. no-map;, o& L0 y; D$ [6 E. j( @% U# u9 S
  22. };5 Y; H/ e8 L6 I
  23. vdev0vring1: vdev0vring1@10041000 {
    6 i7 P1 b( a/ a& @6 A: \/ w
  24. compatible = "shared-dma-pool";0 N0 V1 `1 C8 m$ o
  25. reg = <0x10041000 0x1000>;
    7 B3 t. m. _8 W( i
  26. no-map;
    7 U) X8 v- @, G; C  L* ]
  27. };0 S  V; `5 ?4 A" L' x$ W
  28. vdev0buffer: vdev0buffer@10042000 {
    ! Y  K3 f) @  r# n5 @4 n6 v; k
  29. compatible = "shared-dma-pool";1 T7 Y8 N8 N! `
  30. reg = <0x10042000 0x4000>;
    ! e5 Z& ~2 q2 p+ {6 f' q3 G
  31. no-map;
    8 L2 m5 N3 `  Z7 N4 M% ]' l+ F
  32. };
    5 D" p! D* _( R# U+ @% J4 I- o
  33. mcuram: mcuram@30000000 {! F% H; J/ E# S! |, x9 y
  34. compatible = "shared-dma-pool";5 r3 H- p; F  ]" {
  35. reg = <0x30000000 0x40000>;+ Z9 C9 p. e9 @0 T. y
  36. no-map;
    , X& u2 P3 [$ L8 O1 m" Y% g& i
  37. };' }  ~! }8 q/ ]  z6 ?, A
  38. retram: retram@38000000 {
    5 H& i+ I' Q& z. K2 L. Z
  39. compatible = "shared-dma-pool";4 J# d) @" M! X6 g- n* i7 r
  40. reg = <0x38000000 0x10000>;$ R# M+ C: e9 {4 N$ k
  41. no-map;
    8 _' H' O. _% @/ \+ F+ o0 A2 t
  42. };
    ( [3 O9 i: o3 R- y
  43. };
    * n; q, l0 y6 Z
  44. vin: vin {
    # g  o" K; @, x) `+ Q1 S4 I. _' h
  45. compatible = "regulator-fixed";3 ?  x2 p1 `& |! H5 r
  46. regulator-name = "vin";$ F! M) ~4 B3 n% e
  47. regulator-min-microvolt = <5000000>;' v0 q7 n0 W( M4 Z- n
  48. regulator-max-microvolt = <5000000>;
    2 N, H4 [" y, C4 k. a, ]9 B
  49. regulator-always-on;
    + s' l* v( h: @9 K) g  Y
  50. };. \# `3 u9 \: h
  51. v3v3: regulator-3p3v {
    " r/ K( k$ v/ N! Q( ]% u
  52. compatible = "regulator-fixed";
    % s/ D" G0 ?) h9 @& s5 \
  53. regulator-name = "v3v3";; j3 v$ g+ Q( v( d
  54. regulator-min-microvolt = <3300000>;' v8 N: T' |5 E7 l( m: R
  55. regulator-max-microvolt = <3300000>;7 I7 s& A+ ?) ^- i6 T( I3 @2 I$ i
  56. regulator-always-on;
    2 [6 V- S4 X. u3 g5 W9 ]
  57. regulator-boot-on;+ X. s$ F! }* V; F5 T
  58. };2 v( N3 u! O( R8 p7 V
  59. vdd: regulator-vdd {
    / S& a7 d- n" {) M
  60. compatible = "regulator-fixed";3 c' N, G' j' S) S* _
  61. regulator-name = "vdd";
    , j, S% u: J- ?, G& K9 s
  62. regulator-min-microvolt = <3300000>;4 f4 u3 R, c8 I
  63. regulator-max-microvolt = <3300000>;5 `6 w) R$ ]$ y( z7 Q$ C% T
  64. regulator-always-on;$ Y9 L- K5 ^" a: ?
  65. regulator-boot-on;% l9 x! v2 m* X% I+ g' ~
  66. };
    " G2 W2 j  M' G' V7 }! N
  67. };
    " C8 i. X7 u' r* r: j0 i' A- C# O
  68. /*HDMI CEC控制器*/8 Q) L: R' b0 d2 ~, e! }
  69. &cec {
    # R( C' s  m+ `: m
  70. pinctrl-names = "default", "sleep";
    4 J3 p6 |7 l. ?* Y
  71. pinctrl-0 = <&cec_pins_b>;
    + C( V- N, ?0 ^- W5 K; L& H  u% H2 F8 y
  72. pinctrl-1 = <&cec_pins_sleep_b>;
    4 t" H1 ]  Q6 M3 k7 _
  73. status = "okay";9 d8 r! v9 ?7 u2 M
  74. };- r* E# c" p: v$ X5 I2 w* z
  75. /*循环冗余校验计算单元*// p/ m9 _/ Q8 r/ `) t. o9 N5 W
  76. &crc1 {6 s! m1 z1 t0 |3 Y
  77. status = "okay";
    3 d1 O) }( V; S; d0 `
  78. };
    " v) \9 ~8 V, c$ A. i
  79. &dma1 {
    2 _& {- u  N3 R% S, C4 k, ?  w$ k
  80. sram = <&dma_pool>;
    $ D, m  H. m' Y7 a4 z# Y- D
  81. };5 B  {% O2 o7 p
  82. &dma2 {
    # K) @; u/ k: y$ `' g
  83. sram = <&dma_pool>;
    8 e. l, }  i# M; A
  84. };
    / z6 S# X6 T; |# Q- S
  85. /*数字钟温度传感器*/* O4 P: ^- E7 j: U. x
  86. &dts {
    . p3 g* k+ U& l7 i
  87. status = "okay";
    8 H+ |7 ^7 ?1 `7 @: s6 M
  88. };$ t3 e: X( V- O
  89. /*图像处理单元*/6 i+ y: W# F7 d8 B
  90. &gpu {
    $ d! Y5 K! {+ k+ |$ i" c; @4 q
  91. contiguous-area = <&gpu_reserved>;
    & l7 @1 f  c& W/ }' h
  92. status = "okay";3 H; @0 S+ T9 K! e+ o8 x
  93. };
    ' g- n8 ?( f0 I8 W, Y+ H5 x9 [1 }9 J
  94. /*哈希处理器*/! d- F  M" q) M& h% {0 c
  95. &hash1 {
    ! X+ C; y. V" D2 k/ I% t3 S/ h
  96. status = "okay";8 m* P: j8 ]" [+ p
  97. };! d6 Y/ q! h' Y- D9 R
  98. /*处理器间通信控制器*/
    ; ]1 |' ~. B. ^* q8 Y. r; k' @8 [
  99. &ipcc {  I  S( e! l, C7 p
  100. status = "okay";
    ) g' t6 T2 G0 h4 I* i
  101. };) k" o1 @$ r; I( B3 o* \; L
  102. /*看门狗*// T# `+ P( G; H- J# q8 `4 i
  103. &iwdg2 {
    6 m& o2 X. G5 |9 W- _* t& x5 c
  104. timeout-sec = <32>;
    6 L2 t4 O! B# C: s; }, L
  105. status = "okay";
    . @& U, m* Y4 d7 b& ~* ]
  106. };
    4 t0 j3 L- ]" @3 p9 O  U
  107. /*随机数发生器*/- O& w2 B. F% ^
  108. &rng1 {: t7 t, N6 J. c1 G5 U/ t; X/ y
  109. status = "okay";; m5 O- W) [* L# f9 y' z
  110. };
    # e5 E% N- x& z, a* S! V
  111. /*实时时钟*/0 Y" L6 V1 t( E' D; p% O
  112. &rtc {
    2 |9 e; l5 {' [; s3 ~" t9 K1 L
  113. status = "okay";
    , [1 ~. v) J4 H2 |) E
  114. };
    - k) F+ ^& b. f3 g+ ?( I; T1 E7 P
  115. /*sdmmc1 TF卡*/
    . r; _0 h' d6 ~
  116. &sdmmc1 {
      A% M/ W# ?& ~! n7 j$ v
  117. pinctrl-names = "default", "opendrain", "sleep";
    / H5 p+ p% E1 u! g4 g0 v
  118. pinctrl-0 = <&sdmmc1_b4_pins_a>;
    - u* V0 Z6 _, z! C, u* S
  119. pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
    6 ]  G7 K: Y# _% r
  120. pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
    . O  e0 v7 A; T9 v
  121. cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
    9 C) j- q- L6 E( @
  122. disable-wp;; L" l0 ?/ Q& L6 s: [0 ?) i* H! ~9 r
  123. st,neg-edge;
    ! T$ x3 W- m2 Z9 P4 T0 }
  124. bus-width = <4>;
    5 i, `* ?8 M- ?% p5 y
  125. vmmc-supply = <&v3v3>;2 G3 j! p- T5 R( n
  126. status = "okay";
    7 R+ `! J) X9 N" W, B  K
  127. };- c) w: a# U0 u* I
  128. &sram {" ~) a$ D. y$ {# m. \, i
  129. dma_pool: dma_pool@0 {  M, ?& @. r. k: e4 l5 l9 n
  130. reg = <0x50000 0x10000>;* q7 P8 Q3 E; f# S3 @# e! |
  131. pool;) U; H3 v# h5 i$ z
  132. };
    9 K  {9 P7 j0 |
  133. };
    # n6 [. d) r- }$ m' D
  134. /*命令行终端*/
    ' ]* k( ^  {$ T! ?1 q) D: |( h/ ^
  135. &uart4 {4 r1 z( f. e. h6 A2 V8 u7 o7 z) J
  136. pinctrl-names = "default", "sleep", "idle";
    # C6 X" P4 k" J3 u; t6 ]
  137. pinctrl-0 = <&uart4_pins_a>;
    5 q1 _0 p) w$ `' M8 [8 A& z
  138. pinctrl-1 = <&uart4_sleep_pins_a>;% U! C! R8 [' C. M: |
  139. pinctrl-2 = <&uart4_idle_pins_a>;5 _0 w! S3 p9 p) M, s  G
  140. pinctrl-3 = <&uart4_pins_a>;
    " p8 ^: u) p. G
  141. /delete-property/dmas;
    2 d5 \& C5 M+ W' E* y! a
  142. /delete-property/dma-names;
    8 g# l& ^9 R) v% W; x
  143. status = "okay";7 F; t; g; y& _( @$ a  ?0 Q
  144. };
    6 B8 R3 M5 V6 o& D+ T; y
  145. /*电源基准缓冲器*/
    0 n( O! W: N. [" Z/ X, k
  146. &vrefbuf {
    % Q" V2 M, r: P2 p; i1 U! i
  147. regulator-min-microvolt = <2500000>;' E+ v* m, C- }$ f
  148. regulator-max-microvolt = <2500000>;
    ' Q4 J4 N) K- W
  149. vdda-supply = <&vdd>;
    ; s0 {$ O/ V8 ]( S. v+ ~8 W, `* Y" q
  150. status = "okay";
    5 M% K! n/ o9 y% J# r
  151. };) q! p- x" _! M- P: N( S
  152. ————————————————' z1 x8 N( F+ S4 V5 m" i- z6 U: z
  153. 版权声明:本文为CSDN博主「华清远见IT开放实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    : S- Q$ |. \5 h9 C- Q
  154. 原文链接:https://blog.csdn.net/u014170843/article/details/119593172
复制代码
% n4 Z: Y0 G* J. Y& e( g2 ]

! R" J) z# p5 D; z在arch/arm/boot/dts/ 目录下新建6 B. Z, T6 S& Z- |7 a% L3 o* e
7 I+ W4 @; c: f
stm32mp157a-fsmp1a.dts:3 y& y' F, E. [0 v$ Q6 T/ ?7 U
' ?3 d& i- ~7 k6 ?, |$ V
  1. /dts-v1/;* S- C+ o) q) @+ L
  2. #include "stm32mp157.dtsi"/ ]& V. `4 g+ Z, F, S
  3. #include "stm32mp15xa.dtsi"
    0 s3 m5 p( U& {6 h( @
  4. #include "stm32mp15-pinctrl.dtsi"2 O! f" X' E& Y/ C* m! f
  5. #include "stm32mp15xxac-pinctrl.dtsi"2 [0 ~, {8 s) @, U  N
  6. #include "stm32mp15xx-fsmp1x.dtsi"
    4 m% K: o' R2 q# {2 Z; y
  7. / {9 C- e7 d8 g4 z7 U& p0 N- w2 @+ |( A
  8. model = "HQYJ STM32MP157 FSMP1A Discovery Board";7 K3 P2 G) \3 F( p
  9. compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
    & R0 Z, b3 F2 c8 ?0 |8 j' j
  10. aliases {
    ! P- W4 c8 [( h; G2 ~2 f6 d
  11. serial0 = &uart4;
    8 }! I( {) n" S/ j# |$ \& \
  12. };
    : _! ^2 O9 U, @) S- E
  13. chosen {6 S- V9 q1 |" k& O
  14. stdout-path = "serial0:115200n8";
    $ k- E3 a$ I" d1 t7 t8 z: n. O
  15. };" W4 n" c, }; @7 `& |
  16. reserved-memory {
    ! a! B  W7 r- ^. F! {# {6 L
  17. gpu_reserved: gpu@da000000 {
    & A; M. c2 B; J1 z* d! @
  18. reg = <0xda000000 0x4000000>;' F9 ?$ K- D% h
  19. no-map;& ^! c# [9 p+ W) }8 m2 Z8 Y, B0 d
  20. };
    ; _- W0 q0 }9 Y# ]! |  r+ Z
  21. optee_memory: optee@0xde000000 {% q+ _) ]: u0 E. k$ n8 b, L
  22. reg = <0xde000000 0x02000000>;
    7 B2 K; o! z7 L+ C, }
  23. no-map;& \" s/ b" a7 z3 u5 C5 A. l
  24. };
    * e- Z$ U5 K& o3 |
  25. };3 }" O1 ], j' G8 {! a& b3 a, q3 q; d
  26. };7 E3 G- N1 `, P  c& @- \
  27. &optee {# I1 r8 ]- m0 x+ B1 b- H
  28. status = "okay";; N3 O  l7 k, k" u
  29. };
复制代码
4 M" K; l+ }& l# \$ ~+ x

( B3 \0 H$ D( [由于添加了新文件需修改Makefile才能编译,修改
: o5 z  j& ^! f* Q2 Harch/arm/boot/dts/Makefile,添加stm32mp157a-fsmp1a.dts的编译选项(红色字体部分为添加内容6 O- c5 t$ [$ |- \0 t

2 _' `& b' w. l: c
  1. dtb-$(CONFIG_ARCH_STM32) += \
    % p4 c' F, c: d, ~5 D. `
  2. " N. H$ R5 h/ N: V& a
  3. stm32f429-disco.dtb \9 a" W% D& s* Y* b
  4. ' x. R; A# U" U
  5. …….
    # H0 i5 @* q; x6 ]

  6. 1 J8 k9 o7 q: R2 d( h
  7. stm32h743i-disco.dtb \
    0 q$ T. c+ I% ?$ b- \
  8. 4 |1 }! f# w: \2 M: ?
  9. stm32mp157a-avenger96.dtb \# Y& y1 u0 P; [2 y5 ^+ Y& w- ~
  10. # K0 N; g. N. r3 `' ~
  11. stm32mp157a-dk1.dtb \+ N7 \9 V0 |* @, F( J% p

  12. $ z. f6 M/ W1 E; @! J+ Q4 H9 a
  13. stm32mp157a-fsmp1a.dtb \/ i8 E1 ^& X6 T' N. t" q  X7 ]3 @6 p

  14. 1 E& s8 ^+ y4 ~5 @
  15. stm32mp157d-dk1.dtb \
复制代码
+ U" C; v8 J" F% h

  O: c$ Q3 Z& e3 J* u重新编译设备树文件3 d4 [: S. K6 _/ }8 ^4 k
9 Z6 k4 T& o- D6 @# h% |! G3 E4 T  y
linux@ubuntu:$ make ARCH=arm dtbs
* {, ^. E! D1 q8 T4 @* W
9 b5 }. ~  e+ g6 {0 w0 @! w" P编译完成后会在arch/arm/boot/dts/目录下生成stm32mp157a-fsmp1a.dtb文件2 Q+ }9 B& G7 S; S" r. O" |1 `
+ [' @. B9 X; M% o- A
4bd369df94600414bc16600e87c61fb0.png " ]1 s* Q9 J" a: h* |& P
2 @; R2 D5 I# D/ U
将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。
% B$ N) T2 H! T+ J# F
# ?6 a* @9 F! x0 x( b7 Plinux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot/! d( |$ E5 z$ f$ W

4 T7 g3 `& Z. b% v" Slinux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/. Y" |2 |3 K- @! P' J5 j6 }

  y: G% b4 \1 L# z5 m* N8 Y配置tftp

! M" {/ A1 s! |8 M& g, l! p在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。+ g( L* s# f2 V+ _, Q" Y9 h
8 ~) O# f6 o3 v+ m+ w
如果环境搭建已经搭建完成,需要将ubuntu主机中的$ z! F7 b5 l  s8 R" b/ K
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。
1 l* q# T5 H. R' `/ T# a: D" x# W' z8 I* [: j
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17
; K( C$ Z6 I; N3 ^5 k* [+ d) u$ Y
9 n& S! i5 y& }9 T1 a% h' Y9 k
  1. # Generic Distro Configuration file generated by OpenEmbedded* M) @$ ^% t9 ?+ |& n
  2. menu title Select the boot mode9 e, @& V0 T% M' v7 J
  3. TIMEOUT 20& L: S" c  c  G/ `
  4. DEFAULT stm32mp157a-fsmp1a-emmc
    ! j0 P+ M! {$ ]' m7 V! @8 F: \  i8 E
  5. LABEL stm32mp157a-fsmp1a-emmc5 U) N+ s: s- o1 a: Y* F1 U
  6. KERNEL /uImage: G, T6 O- Y) Z2 s2 S3 K7 [
  7. FDT /stm32mp157a-fsmp1a.dtb/ }' c7 o' V8 J$ p, s* D
  8. APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
复制代码
( e: y3 x, Z# K6 j8 f" E, c  c
修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。
  P4 p0 b, O& P7 A1 M% p8 |
" y" \5 i. I; y8 i5 V  c由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。
. g7 O- _! {1 f" s6 N4 a" I2 F! o6 t- T" p1 h& B
4aa0d0e927c99480198b3e1412589feb.png
5 r9 r, {6 g5 a9 \1 q
1 J8 w, \: X& G" J, r/ R后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。
# ~6 E% ~+ J) O4 F& S————————————————
9 I, r1 I/ M; U- z; ^( e8 a2 }7 J版权声明:华清远见IT开放实验室
8 A0 l& j* G2 q0 f2 D; K; w/ X
8 Z. R7 [" B! T- c) g( W0 d* k' ^, z5 ?" g
收藏 评论0 发布时间:2022-9-30 19:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

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