|
baw0hyb1bfg64010925.gif
7 ^% C& |: J* R* M% Z8 x# F点击上方蓝色字体,关注我们
) ~4 b) i8 t% s# q8 h7 z' x7 M5 u
& _% x7 D+ d, V$ x5 X处理器架构决定了地址空间的大小以及如何映射到内存、外设等资源。
- y1 _6 J& U/ u m! v' d; \$ O; t* ?8 W9 `: F# i- y7 H4 u
SoC设计者会为内部模块、外设控制器(如GPIO、UART、SPI等)以及外部存储器(如DDR、Flash)预留地址范围。7 Q- g1 a |. | U
/ J) i( V. j+ _" y- T( ^9 t Q
这些地址往往是硬编码在硬件中的,例如某些外设的寄存器地址是固定的。' T" N1 v2 Y0 E$ |1 q5 I2 _
0 k+ E( N% S- w; `. ~/ D板级设计决定了如何将物理地址空间分配给板上的外设、扩展存储器等硬件资源。这里涉及到PCB上的内存、外设连接方式。% I. ^+ K7 I g8 h; E/ e
6 Y$ X) m. p) K k6 u! H* f4 Y
设备树文件用于描述嵌入式系统中硬件资源的具体分布,包括外设的地址映射。
8 k C K1 k! F& h" l" j5 r$ _% U+ k: M$ F; N
这些信息最终由操作系统的设备驱动程序解释,并显示在类似/proc/iomem这样的文件中。) L7 S8 V7 b2 j3 q6 u" R$ U
* o! K3 c! a7 v' E! y
在系统启动时,固件负责初始化硬件,并根据系统配置将硬件资源映射到特定的物理地址空间。* p9 F1 Q8 i+ X" ]: k3 Y! u
8 h4 }' l. r# z9 J例如,U-Boot初始化DDR、Flash、外设时,会设置它们在物理地址空间中的位置。" p" w1 f+ V1 b& `7 ~: V* d5 @4 J
- G8 `* U6 ?1 v7 {$ K+ P( J! N F内核从固件和设备树中读取硬件布局信息,并负责管理和调度物理地址空间中的资源。
, i7 V6 k* |" i: x* J7 V' x3 A. |/ Q1 b, O; C
最终,这些信息会反映在/proc/iomem等内核接口中,供用户态程序查看。, E4 S7 o' O, p+ Q8 |' @7 I
2& b6 p3 M' R9 s( }
是由板子上的什么决定的?- h0 [) f4 f& k
SoC或处理器与外设之间的连接方式决定了外设的物理地址。" n8 e" @3 ^, a! {2 w! ?+ b& p, d
aamvymsjb0t64011025.png
8 X' _3 U3 _6 Y
例如,外部存储器(如NOR Flash、NAND Flash)和外设控制器(如GPIO、SPI)通常有固定的地址映射方式,板级电路设计会根据这些要求来布线。6 e P( b' M# L' r1 Z; ^# L" X
B6 I% Y+ e I6 `
设计时需要为各种外设(如UART、I2C、SPI控制器等)预留地址空间,通常这些是硬件预先定义的。$ e# n# p: g! I9 Y( ]
8 z% b+ {; _9 B0 R8 ]
SoC的数据手册或参考手册会指定不同外设的地址范围。7 k1 k5 m; r+ L! W* O
1 n0 [% k$ T) z9 R9 X! @# k9 H例如,DDR的起始地址、外设控制器的寄存器地址等都由处理器的数据手册规定,这些通常在硬件设计阶段就确定了。2 T6 c* s8 v$ s( g
3
7 E0 |! ]" J' c% E+ h7 v添加外设时的地址布局如何确定?
4 J9 k& u" d w; A在嵌入式系统中,设备树描述了硬件的物理地址布局。
8 B- t8 ~" W+ A, }( P( }2 T) C! L l* I
新添加的外设可以通过设备树文件配置,将外设的寄存器地址映射到物理地址空间的某个空闲区域。
* M/ j$ z) b# w- X1 K/ F- f; z5 x1 ~3 S0 h7 F
设备树中的地址映射配置会被内核读取,并展示在/proc/iomem中。1 |5 l( z9 _" M( m
$ N2 p2 ~& k! Z" _# v& k
对于可枚举的设备(如PCI设备),操作系统启动后会自动扫描总线,发现新的设备并为其分配物理地址。这种地址分配方式是动态的。
l3 |& f3 I+ K _! F" Q4 e: P% z0 f: t9 ]9 R
在某些情况下,固件会在系统启动时初始化新设备,并分配地址。这种情况下,地址布局会在固件阶段确定。! a6 \5 F, s1 j6 Y; G7 i+ [) u" t
qno21c2222m64011125.jpg
- v0 c( e# \4 ]7 H* ?
ioegkrmqdh564011225.gif
, s+ N9 ?; F3 n/ ^( d) o3 X! d) w点击阅读原文,更精彩~ |
|