TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, d6 x$ }* y0 }- W0 Q8 ]现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。
1 B. W7 ?4 {1 W& V0 @: z% N8 |# s* G Y+ O0 ]9 k; P- O6 v$ B
至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。
. |9 A; h. P% ^/ w a1 s6 v0 a f1 h; ?2 O8 T* ~7 `7 u
& u3 a" g! {/ a5 n i9 L1 Y
- K ]7 x. c" F9 q8 U! ?
9 W! Y& O/ v+ N' O2 l" Z0 j1 C, _ 将u-boot-master.tar.gz下载下来。4 W2 T" u, ^- }$ B F
) g8 d& t9 D( y/ S7 q; ^% e
: ^0 [ G' O P( }; y. f) V& ]- e% g6 _# L9 i; k8 ~
打开opencores关于u-boot移植的步骤。; C# F/ `* I( m" m5 [
& |' q6 B- \, `* D/ x5 J, j* N
( c* d$ S5 t# X' c& d8 g; I+ f. k# b" o, W0 b2 E+ y# C& n
) G( A# W- E/ o, F4 N- N
并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
7 G& t- z: m+ Z
! C6 p% P/ f2 M4 r' a
( E ^' _0 A7 P4 @0 u
0 C- `8 m" P& X7 K; R A/ E$ G9 p" f
0 y: S" L, {1 p5 g8 T) ?, ~ 解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。# t5 h% S/ j& D1 q& D: d, T
# U+ D G {; e* v4 K
+ m1 z$ H7 y$ W
4 V) N7 g) c- I' j0 ~5 V 在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
* Q3 `$ x* [ T9 w% S) ^( B/ Y! X& B$ W
5 F& `0 ~& Y% }; M7 @0 n
) l E% O0 I; Y1 K0 ^8 m 好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。
6 \. C6 u; W7 ^8 s6 C7 {
@0 G7 }# p X; g 1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。& W, ]/ h% R4 w* z
! G* `- r# A& P0 y5 J, B( N
# k) W" P4 `. S' p4 E* D9 d
2 m: q+ @. n* {& ~
1 }- n! A; X. Y2 n0 C$ L' o! G 2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。
! w, ]6 [2 k' f' D$ `
: w0 A! F; k* x) Q/ G
2 D( T/ V+ M e" `
- i1 n+ a$ l7 b% j2 T1 S% I" ]
* A5 S8 Q5 t- k4 {6 { 参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。& `. G$ C1 H4 @: g( |# q3 k9 I+ {
( I% w& c" }/ W1 `. o0 }
( c. @7 N/ v% n7 T, U6 K
0 C, Q" z& t3 D8 U
; a# m' T, l5 u3 p$ P! W2 x 修改成自己所选择的开发板的名称
$ H0 k& Q8 M g& i9 d
5 G3 A( n7 b, s* I9 y4 T& h9 K$ a
3 a- p" F, t4 B* B! c' W& W k
( a5 u& v3 K0 J% ]
# ]( L9 o( c6 d, [5 v7 n 然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:
' S. S; [$ H* j: Q, G
; [% F2 N7 m2 I! r5 f5 s! f; b
8 v/ \% t$ T/ N7 W" p0 y) r" h' ^6 o
4 n V! @ c1 s# X3 U 与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。
, B; V" C9 Y$ o3 L
% h3 C+ X" ~- D2 ~ 打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:5 Z! ?' a, N0 F
% }. f* o u4 w" q8 D" s5 O
: b; n& ?# N" f# o
g" M: G' L# \- N: k' c; G- K- u; h
用u-boot自带的dm9000驱动增加对网卡的支持
. _+ c2 `, [& ~
6 B$ \4 U/ Q. S9 P9 j- K6 v2 q# x" y/ ]. e& x6 N
* G9 a, {6 c3 e( ~0 F
3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h
" Y& w* q) F6 _- I8 I/ L
$ f! n# F5 d% x
L/ L7 {3 _3 o& d
2 c% N; L: {& `0 Y/ I/ |2 b; l
" \( f. `# g* K, ^, m: G# j
然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。
' n* W! s: ?" P& J6 P9 T0 u: h
( ]& M7 R* R2 X6 e5 f# x 一步步看0 S {; |. `& b5 ], b
& W# _' i. h. X7 ]
* u- v, x% B; ~. p- H4 o) a9 b; A# A
+ [, @' Z& l2 U) d/ m1 O9 F Z 看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
' _0 L5 r0 h, |8 o6 h8 d! o, H- P( c6 P- l
然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。3 g8 d- Y+ B( g$ L. L
' C0 a" b) O: K6 r6 m
接下来板子名字,随意啦。9 `6 a( W6 ~* v+ _( C: l
! H L( Z) [( l( N/ ~" w
- E1 U0 A/ T1 j& { I; o2 F 接着看就是关于FLASH的宏定义选项( ?' E \* X' P: z _/ R: X
1 ]6 ]/ l k8 r* O- Q
6 E3 e( v0 J3 r! y4 s
8 J3 u. H- Z5 Y1 {# |( l: S: j
我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。
8 n) F! e+ @0 J8 \
5 D& l: f8 g& h/ C7 g
. o0 J- o0 R9 c# J+ U0 U" u* B7 G+ z$ a0 e# Q& g0 R
往下看
% F0 `1 m6 g4 l! q; V! g7 m* a
7 c3 k4 I7 `/ D7 l* G
, v% |: c3 i; h. e$ c) d `
$ r/ e0 a& J5 W6 C 在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。
4 h, R$ H$ ~& E: H8 r8 T0 P3 w C
+ f; L9 O* `+ z$ }) N
0 Z0 _' W# x& b; M$ ^' z7 d
& q/ x7 w* K5 y* f- Z0 z% f. } 再接下去就是关于UART的描述
! }) p6 v# M4 H3 v6 c- }- T- x( i" P5 |4 j7 o4 S4 [- c3 [% b! W
7 f% f- ~7 p, o2 p
; b9 E5 o- T6 j. l 照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
# m6 G; D, K1 V2 Q, o" i
/ g i" L# y. M) n. p6 F
4 }+ g7 i) Q; k8 r0 X$ t+ U$ i8 P0 f$ ]* C, w
接下去就是关于Ethernet的定义了, E2 c/ y) E/ G1 B2 I! r* ~
7 f6 J# O* f' w' s W
: V5 a8 _8 V& }, F. u% a! P, V$ P
! V+ c7 w1 C' P6 ~0 o7 h9 H+ O& P 88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。
' K4 m4 V' X6 x/ S
, u6 f. {7 w5 ]1 G9 k) C+ ~ 94~101行,这里是关于网卡IP,掩码,网关······的定义$ G; [: [* p4 O1 `7 J
. W2 Z \1 ^$ F1 L- K
8 E$ F4 Y/ q5 ~1 ^- V" I/ M 打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。
v; b& ^0 @/ i% z2 m0 w, n. Z( Y" J
' d6 c( D% M) U$ f2 ~. [, h
! d$ {7 P# B( W5 K8 B) l0 [. U. w3 D
再往下
' p9 D" C, J: \1 W) d" F0 e \% H) D% B9 h9 h+ o/ v8 i
+ W, T: B' c) [; S1 s; a& q1 C
Timer的定义,照抄openrisc通用架构的
& u6 a* ~0 [: q1 f4 A2 x" }, i3 a
% L! {; Y; _- b: z. ^3 f6 B; V/ D2 v( m: s
: t" |; v: k! ]4 G3 E. l 往下,关于u-boot环境变量的存放位置。. [4 t4 T# r' G" o/ T/ O1 c+ d
: F2 h: Y3 e6 l$ a2 P. v1 @
* S9 S2 }8 f. G& T' a1 H
% K% R. K( w: C: D3 e
刚开始下载到板子硬件调试的时候先把162行注释掉8 x, b6 S9 |! l' G& W# p
2 _" f6 q( z' e! e% Y9 w: x2 p& y
0 k! L( O! _$ Q# e" z: h' V
a1 F% b+ B) r' V7 z
, Z" K M1 w1 |3 ]% d) r% H6 a8 c0 C3 ^" Z& U2 s
刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项
7 Q, ~. D. ?7 D. Y$ x: O
2 r) o/ j A" q' A: ?3 l
! s+ W1 Y' E0 `+ u
' E' D; k2 ^3 S1 x* g8 d
" w" h4 I1 h/ U9 E0 {2 e; U
; ^ |/ y2 j5 q8 z* [. A' x; s! k- |3 q# B. W. z. H
这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的: S$ G o5 e/ u# d
% W& X' W/ L7 t2 T
* A/ g- [( r% E: ?1 y: `, s, l: I' Y$ c" p8 o
上面为调试u-boot时所选取的存放规则 |
|