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
! 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
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
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
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
$ 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
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
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, ~
. 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
: 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:- #include "stm32mp157-m4-srm.dtsi"; k& k i* I' R% Z! e& {& T9 N
- #include "stm32mp157-m4-srm-pinctrl.dtsi"
( z) W# n* W9 k4 K$ U - #include <dt-bindings/mfd/st,stpmic1.h>9 ?7 m8 |2 H; W" G8 N4 |
- / {9 o& l" s/ M; S' L A7 I' F
- memory@c0000000 {3 h4 J$ V0 ^" S" {$ ], I; R
- device_type = "memory";0 [+ e; X f4 b) |- Z2 S* o P
- reg = <0xc0000000 0x20000000>;
) x% Y. O* k; B4 X& b8 F' R - };: G/ ^9 J; C8 N& V" ~! D* i
- reserved-memory {3 x2 h" x5 Y$ u' R' F4 f, C3 _
- #address-cells = <1>;( a$ U6 _! n2 \! x
- #size-cells = <1>;
9 k1 o0 L& n, S( e2 \% u; W - ranges;
% m3 g( T Y* w8 m$ ~ - mcuram2: mcuram2@10000000 {
& A0 J, R$ V9 X5 }2 ?; _1 M - compatible = "shared-dma-pool";
8 O% S7 G* ~5 h" g( b: J - reg = <0x10000000 0x40000>;) x$ S0 b! \1 o0 I1 O
- no-map;
& M, Z7 E2 Q* ?- F - };; Y" h) A1 B( r: H% Z5 {
- vdev0vring0: vdev0vring0@10040000 {
7 C$ Q% e0 c+ u% _( X. q- c/ B - compatible = "shared-dma-pool";
! z3 L! N# @) P+ z$ h9 `0 T - reg = <0x10040000 0x1000>;5 a, p/ D3 k; j9 f4 D, W2 B
- no-map;
9 [; G* s' W5 i - };7 u' z2 D/ t3 k1 D a
- vdev0vring1: vdev0vring1@10041000 {
2 J9 L( X+ T t/ a5 y) |; U - compatible = "shared-dma-pool";! [7 L+ }4 y" P
- reg = <0x10041000 0x1000>;
, u; _8 ^6 o; W9 [ - no-map;
/ K2 ^/ t5 z/ C - };, Z+ u( h) _; L: N( K; _
- vdev0buffer: vdev0buffer@10042000 {1 B/ F2 K* e0 M3 \
- compatible = "shared-dma-pool";+ X) [' o' X/ x* I4 e7 \
- reg = <0x10042000 0x4000>;+ g$ g6 t4 M+ c) E5 o( T: r2 L$ q
- no-map;
2 C$ r8 o( p6 M8 v9 e - };
, D) ^( \6 s9 h! ]( p3 v4 p0 L! m - mcuram: mcuram@30000000 {
2 ?; z& Y+ | Z! G! Y - compatible = "shared-dma-pool";% |( g% Q5 [* s
- reg = <0x30000000 0x40000>;
; m/ Q( N: I" `5 j6 g) B, U4 ?: w - no-map;! H. i# p( L6 K
- };
: N# ^+ [) t; ]* I - retram: retram@38000000 {- `, d1 q! V1 f; K% X4 `. X$ c
- compatible = "shared-dma-pool";+ ^, |6 r! h4 o& k1 j5 s
- reg = <0x38000000 0x10000>;1 v3 L: y O: Z3 ~" C
- no-map;
/ f3 X9 B, y9 H& Y/ h - };% I# P4 w7 B+ e. {
- };
+ g/ |# S" D. \! n3 P - vin: vin {
. z! C- ?9 d/ ]9 }: ?$ }0 p7 w - compatible = "regulator-fixed";
6 e, v5 @7 d+ G - regulator-name = "vin";# T4 X% \& U* f6 B
- regulator-min-microvolt = <5000000>;! k% |8 V4 e( b1 E
- regulator-max-microvolt = <5000000>;8 x6 s, I8 ^; X. A* O
- regulator-always-on;/ F& c9 ], o/ w- P. _. j; y
- };: ~3 F3 y$ e( i" T1 v- k% ?
- v3v3: regulator-3p3v {9 O* C. P1 I' Z! I4 [- a0 I
- compatible = "regulator-fixed";; [& p+ M7 y, K& @) _% y
- regulator-name = "v3v3";9 U4 O) V' l7 O. |& a3 s( G
- regulator-min-microvolt = <3300000>;+ u6 g- G& S7 u4 W) k" m) D$ I6 @
- regulator-max-microvolt = <3300000>;. Q" Z3 b5 S) `# ]% P
- regulator-always-on;. m) \+ A7 f" Q# L+ [& w* E4 l
- regulator-boot-on;6 B' ]) k% \. h4 o4 y$ D$ A
- };0 j$ {" L8 O3 d$ n
- vdd: regulator-vdd {5 x% L- p& c; Q3 v
- compatible = "regulator-fixed";
( \, N) t$ F# n% l9 S - regulator-name = "vdd";8 H* K8 y( q# L3 s) u0 r% s! B# H/ Q
- regulator-min-microvolt = <3300000>;! |/ u+ U& |1 G
- regulator-max-microvolt = <3300000>;' U/ H+ ?5 f* i2 I' u" b: I; A
- regulator-always-on;
0 z$ B% A3 O- B5 {& v0 a5 Z - regulator-boot-on;
M5 l# b( n+ e, ^) S1 O# O - };
$ d, O0 J* ^4 X) m1 t" S - };2 k! _( N1 u" R' j: P
- /*HDMI CEC控制器*/
5 ^ h/ U9 `2 @" u - &cec {' I5 y2 G, e5 S9 x G7 O
- pinctrl-names = "default", "sleep";
4 {3 z! r3 _* {- T - pinctrl-0 = <&cec_pins_b>;
8 n4 a5 }0 o/ ]* U ` - pinctrl-1 = <&cec_pins_sleep_b>;
- L4 W. w' R/ i - status = "okay";2 e1 M# s( J2 G! ^7 o& `- |4 B
- };
; W3 n4 i4 ]8 Z - /*循环冗余校验计算单元*/* E# Y9 ^, _ J5 z2 p0 g
- &crc1 {2 w1 T1 x8 X7 m7 A% ?
- status = "okay";
7 B5 Z/ X; |8 x% R# \# Z# p - };+ Y1 V- B- j9 o
- &dma1 {+ v& P, C+ D2 D4 i
- sram = <&dma_pool>;
# d4 q# m8 F7 [ - };, k, a& U' B3 V
- &dma2 {; S! y+ G1 ]* _. R, J
- sram = <&dma_pool>;* B& @, D% A* R$ W* d4 h
- };0 _, l7 f' x( [ {2 ^+ m
- /*数字钟温度传感器*/
* c1 w' M4 D+ Y% Q" F - &dts {
7 ?% ^( E" z& b: v+ U - status = "okay";/ L4 i3 |4 w4 X% c& i" s7 i
- };7 g4 n$ k* q$ k5 {* Q3 F7 R2 p
- /*图像处理单元*/
" |: i% [+ x% u3 } - &gpu {
5 }$ D. a5 J# @; l( ` - contiguous-area = <&gpu_reserved>;
1 h1 {" `" W4 ^+ s! O, P - status = "okay";0 W# r- G$ T4 t* W$ ?
- };
* x6 A8 a4 V$ ^# N3 i - /*哈希处理器*/
+ e& `1 N, V& O; i - &hash1 {4 V6 h6 U9 c' e9 l' S ?4 q: k
- status = "okay";
4 K$ D/ Z: s! E3 X; h; P! g - };. T! w/ ?- O. A
- /*处理器间通信控制器*/
$ W% N( u: y% ~ - &ipcc {* M0 ]3 |( S! V+ b# T
- status = "okay";0 }( ]: b; k- Z( V+ E8 ~4 l, a1 S4 ~
- };+ Y" [) ? k( Q |5 c! A
- /*看门狗*/ @8 A, s% `8 ?
- &iwdg2 {$ D2 g6 S0 a( C8 Q
- timeout-sec = <32>;
# W+ o5 i; _* } - status = "okay";6 M2 E* \+ r' r! w* [7 U
- };( v! v: `% } M0 T" ]
- /*随机数发生器*/
& e# _! E, a% B9 M9 @& C - &rng1 {5 T3 ^9 D$ R5 ^1 y
- status = "okay";1 c! J! L) E, [! x3 i- P$ C5 D! G
- };
N6 u) c+ B& {& ]: H% G! R& x - /*实时时钟*/
- l8 B b3 y. F - &rtc {! w& F8 Z$ k4 Z! {4 Z6 I
- status = "okay";
8 h6 H. J" R; o; n& q4 ]& Q - }; X% p! E0 ~! x8 V: ~
- /*sdmmc1 TF卡*/* H3 q8 q) g4 E( G% y
- &sdmmc1 {
0 U* i# |) }5 d( M7 u* q$ N! M - pinctrl-names = "default", "opendrain", "sleep";
; R/ S% T- ]! Y# W; N, C2 R - pinctrl-0 = <&sdmmc1_b4_pins_a>;0 C7 x( k5 a- e: D- `
- pinctrl-1 = <&sdmmc1_b4_od_pins_a>;; {7 p0 {) V2 q, O1 ` H
- pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;) e9 j8 |5 G1 X b
- cd-gpios = <&gpioh 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
- U6 Q8 ^. W2 _0 u+ [" y" r - disable-wp;
+ |9 }( I6 R+ b5 v( l8 d( f - st,neg-edge;9 c v2 _$ i+ b! ?1 H% u0 I$ {3 G
- bus-width = <4>;) w% R) e4 \; i" P0 z% e3 g
- vmmc-supply = <&v3v3>;0 q% Q! c- j) L8 K8 X
- status = "okay";; k, P8 D/ x( A1 h" @, s
- };5 L$ ]8 F/ [# b, T% [' N- G
- &sram {2 Y9 h9 V$ A. p: B8 s6 }% @
- dma_pool: dma_pool@0 {
9 C8 ~& I$ N% } - reg = <0x50000 0x10000>;
5 s6 l0 m0 `9 @1 X L - pool;! M" W5 ^7 _7 A2 g
- };6 v# ?' r9 ?. f: |# J. ~# u
- };
: W$ ?/ s9 F2 _4 A W/ _ - /*命令行终端*/$ z5 `% Q" c" m% w* m6 _. d
- &uart4 {
7 r2 E' {) S: j6 ~( g - pinctrl-names = "default", "sleep", "idle";
8 [) ~( |5 O2 G( B/ r, E; I - pinctrl-0 = <&uart4_pins_a>;! B3 m/ u; F5 A
- pinctrl-1 = <&uart4_sleep_pins_a>;2 e: e+ v: R' q2 ~. z0 K- J& G8 U
- pinctrl-2 = <&uart4_idle_pins_a>;
% ]: m0 N7 O$ A. y- ?) K9 }# J - pinctrl-3 = <&uart4_pins_a>;$ g0 ^/ T4 @0 I% Z. K& t9 W% q7 E
- /delete-property/dmas;
1 x7 ]) X" x; x- H - /delete-property/dma-names;
L$ A( n9 t7 j1 k7 o - status = "okay";/ n5 x& ?1 V4 I( o4 ?
- };4 r- t& U3 J9 k
- /*电源基准缓冲器*/
2 o0 @+ _* C% g6 N7 Z6 X4 h% v - &vrefbuf {
! K- F! X9 \/ K - regulator-min-microvolt = <2500000>;
. H& ~+ d3 J, e; F, q+ A - regulator-max-microvolt = <2500000>;( C/ ?4 S* _3 `( z: Y: u+ Z: o# U
- vdda-supply = <&vdd>;
5 ~& E' C% ^* o! T0 L; _* [ - status = "okay";+ c+ z( u, ?" l' t
- };
! b% h0 c: v H4 W* [* Z - ————————————————( y H' `( \* o
- 版权声明:本文为CSDN博主「华清远见IT开放实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) Q7 x; t) @+ O6 q2 i
- 原文链接: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
- /dts-v1/;: a( G: i$ a4 R9 z! r
- #include "stm32mp157.dtsi"
5 S$ @6 X7 e p6 R4 G - #include "stm32mp15xa.dtsi"4 H2 c6 A" a! v( f( |# G
- #include "stm32mp15-pinctrl.dtsi"7 o4 C* R* `) \6 z8 Y2 X
- #include "stm32mp15xxac-pinctrl.dtsi"
' {2 U4 H6 h* ?: N4 Q - #include "stm32mp15xx-fsmp1x.dtsi"
. r' q/ r# c6 r4 @8 x V - / {. v0 D* d. t. ?/ f2 H) J
- model = "HQYJ STM32MP157 FSMP1A Discovery Board";
8 J6 `8 p# ?" |* B3 j4 f - compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
7 y7 @+ H8 J& D9 y- @ - aliases {7 D, S) D G- |$ u7 B2 w
- serial0 = &uart4;
8 a W7 k" z, R5 Y - };
1 x: X9 ?, P5 B$ K - chosen {
/ u' y( U2 L8 s. @ - stdout-path = "serial0:115200n8";
% T" @) {8 p" d! S - }; N$ O( P) X" }' n: Q- t7 q9 f$ K
- reserved-memory {7 L! d8 M" b( i Y$ t7 Z; S
- gpu_reserved: gpu@da000000 {5 ?+ v0 o: F' Z
- reg = <0xda000000 0x4000000>;
0 C# U$ \5 \+ t3 x$ L - no-map;! ^: ~3 [3 |4 S7 e4 O B
- };2 p% o- g9 R) T: Y# Y9 d _
- optee_memory: optee@0xde000000 {* r ?3 J7 \' H0 A
- reg = <0xde000000 0x02000000>;% S' q3 k7 a0 ^% }
- no-map;
% x( l0 x) t* X9 U - };, t/ g: A ~ {5 I8 I6 ]& ~ v) Z
- };3 m3 ]7 t o. U3 I( i
- };5 h. x/ g# n4 T% v8 W2 I2 o1 e+ b
- &optee {
9 {5 z) i' }( c- V - status = "okay";" D5 x1 e9 `& R' W5 k$ c2 j3 s6 Q
- };
复制代码 " 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 ^
- dtb-$(CONFIG_ARCH_STM32) += \
+ s9 E# E) b$ H. O
. t. a: U( c$ ^% Q$ S7 w7 G! M6 Z- stm32f429-disco.dtb \- M( l# Z" t; S* A9 B3 L; w
- 3 ?4 n2 }: D! G, q- J
- …….1 s# A4 S y4 L" r4 A, L) v
7 V" j+ O, H) {4 B/ V- stm32h743i-disco.dtb \
) k" h1 K( {7 t' q7 |' P: n) _
6 D% M) h' q/ h2 g' X- stm32mp157a-avenger96.dtb \: Y9 b8 ~$ j' z5 {/ s& j" |
* E! a& P. R% B& T/ u- stm32mp157a-dk1.dtb \/ o$ o/ A9 ]+ T+ A5 k+ d
# j( S d' W$ G# k6 k3 O- stm32mp157a-fsmp1a.dtb \
' B- I' u& q9 y8 F' d! t6 ^8 N
{/ }7 w8 m2 j1 _- 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
! 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- # Generic Distro Configuration file generated by OpenEmbedded
8 p0 r- \" |4 u1 O: t - menu title Select the boot mode2 j" C' c9 k# ? U; O8 G. A
- TIMEOUT 207 r% Z7 B8 V- A* K, {, o( A
- DEFAULT stm32mp157a-fsmp1a-emmc
# r4 Q# k. s- w7 x3 N - LABEL stm32mp157a-fsmp1a-emmc) y J4 Q1 I; @. O7 @8 T
- KERNEL /uImage: L" T$ h" F Q# q, V' u8 O
- FDT /stm32mp157a-fsmp1a.dtb. k; c- m0 N0 L8 i. G7 L: {
- 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
' 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+ @ |