TA的每日心情 | 怒 2019-11-20 15:22 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 B9 [$ Z1 s( ~" K: k# m4 [( h x F现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。
8 }+ m! b" l' f! E) G- ~- L, `- Y4 D5 o' a) i; i" D) ^0 W
至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。7 c) N7 ]0 v: f
- A% f0 K. w# q+ p+ ]! u
" ~! L) c7 ~5 F7 {9 I7 O
, ~8 }# z; P0 R
+ D% R! o! H% q! U; W 将u-boot-master.tar.gz下载下来。. ~% w( n. F7 v4 U# G9 _
- M! O& ^" [3 ~& t& d' O- p3 v ]1 [; Y; h2 t4 \8 H
+ Z- V$ k. ]2 v& a) k' r 打开opencores关于u-boot移植的步骤。: u4 L7 H4 z9 S# X, s* Z: v
% [! W( a8 W6 \$ ^9 H6 U( n
8 M. l' E/ Z' Y9 V0 s2 K5 {
. j0 }: t* I i% w) W
( q1 M) f7 Z: S3 j" D, w3 z1 o 并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
# C2 q2 P- u3 i u( `2 i0 m# I: i9 n# @( J7 n7 m
$ v6 r9 j" D a3 x
/ e7 c: b" \0 `% B0 z2 Y8 k/ P, f9 r2 ~! [, z3 F
解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。6 J5 a8 W4 w6 r6 l
- x3 x- K" H/ c- y# y) Q/ Q1 `
3 o8 D* f' [- K1 d @4 @% a5 j$ m
* h1 n* v3 w$ q; t( w 在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
Q* u. k, s5 t
% O7 I' U" E q' i) ^' p
e$ [; `4 t, }* p$ ]2 |4 l* c! C$ \. Z' C, D: m
好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。
: l0 Q, m) V/ Z$ Z( l
" V6 k: D+ M6 R 1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。" u- M- K6 I) B+ y# C2 K" v
0 o3 Y! M% |9 @9 i L4 _' ]
2 e7 c8 ^; l8 o6 V+ x8 p5 {4 F! l
5 C5 K$ Y: [) @- M; _ E, n" Y& H
2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。
# W* X6 f( S) k
9 k2 W% v" D# k* z5 K5 R; _9 x
; O, ^+ X' ]/ D+ Y5 F; s
( h1 z7 i( w3 D" _7 u- ]' @! }" X) e) \) }
参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。2 H7 N2 d a- R, l# Z1 e9 R
0 v( _ l' f3 J5 E+ j
, ~0 s7 o" R' b# K' S7 ]- u# P0 O% k- ]
' t6 ?0 Z; c# b
修改成自己所选择的开发板的名称+ H% `4 u, Y, H7 {$ c/ \+ l2 y
2 C% \2 ~# p" P2 H* r" U" g; _
/ s3 X2 q S" r5 z
9 ~$ l. V5 ~4 D j, N. g8 H3 |
/ U3 |" ^# J7 P- b 然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:6 @2 _6 O9 {# ?' T# H8 O) x
7 P, W! v4 \+ n: h& h1 ?$ M# A
* l9 g) Q; B2 n7 A" F* I8 r7 n, h8 o% k. y. V' g3 s
8 x4 U+ b2 M2 Q. o* j- K
与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。
Y7 c* I4 I( `' z9 @# d: W. R4 y. D5 N, O; L8 W
打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:
' P' ^: s+ q3 E H7 k# L. I. {8 ?* V6 N1 k; B; n6 A! X# H
x+ q& h$ K1 M7 x: W5 S
# b& S, y, W% b; s0 ~. W 用u-boot自带的dm9000驱动增加对网卡的支持
0 v$ A9 q+ L' W B
( ~( f, t" X, T8 Z0 S
( ^2 m0 f) a R) U- f& ~5 n5 L, ^! |) M, y- ^
3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h
) x6 \9 x$ J9 X; Z7 J" G" A5 l: l, t! C/ u, G1 c# ]+ |
5 _" w. v- n/ J! }( Q- f' J: m/ h
" E% i9 a+ R# Z5 X/ O5 z7 P1 d3 H1 g9 U1 p& J* r+ |
然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。
( O9 X: d& j* A' ?/ `# L8 @5 j( u, V; Q
一步步看! O+ i' b# @# J8 j! u% {. d7 K" Z
7 p6 O; }6 _: B6 m% N
5 K- j4 A3 G! @4 p: m( K6 c" m
q. j9 B& K) l4 \, C4 E% R& ^
看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
0 M# X/ p3 }, u; I8 j# [9 T: H. p$ j( Z# F7 Q; d
然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。
# L$ H# m) g2 Q* q# a: O
2 `+ O( g* Q/ J 接下来板子名字,随意啦。3 @' J F, h, N0 [+ @
) \& z+ l5 t) ^4 T
; C3 l. Y, w. E2 N- n 接着看就是关于FLASH的宏定义选项
( Y5 s5 D. l3 j4 z; N& e- A7 G# S) L) V) Y# y/ X
2 y$ |( W0 V8 {
9 K4 _/ Y; V1 f
我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。3 P2 W3 o, {" x# O
! q1 }. b# J1 \/ j
& p! ]( I2 U) m5 k9 \# T
- C! e! K3 u3 `( v V0 g8 A 往下看0 j7 P3 k. q7 a( c( o, C/ l
* b& ?5 u8 s4 w; K5 O/ C* T, H) s0 @
5 W; c' b; z! h3 _ F$ m
. _* o7 u. Z" c9 } 在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。$ V' d3 z4 o* y* @" \; f5 j
2 r' t5 K ?9 K
' k7 n9 [( w! T
: s1 f. P2 T# n0 x$ N0 |3 S% v' o 再接下去就是关于UART的描述
T4 M2 w7 Y, f9 [& Y' _% [
6 z, W3 Y8 W0 L/ A1 M' m
/ C4 [! I$ ?1 b
- C0 \3 s# n0 q7 v
照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
4 p6 j6 |2 M) N5 R/ \7 ~0 u
* m3 j2 ?% g* v1 P! C/ W2 e+ w0 Q6 s/ k# U& @$ y* I
4 P2 |/ ~: _' n0 k- ~' n9 m 接下去就是关于Ethernet的定义了# X' x5 Z( w9 q; v
* O5 _ D( r; M+ F- T3 X
; r+ X$ O7 \5 O5 D7 }6 l
8 q- l _) r" ~- E& k, ?
88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。; }* r* l4 v0 [# @
% K7 k: X9 ?% o& n' k
94~101行,这里是关于网卡IP,掩码,网关······的定义
2 F4 _0 ?% s/ `2 I; Y, \9 X8 D
, R) r) y0 M+ ^, B0 p4 A6 i& V0 Z! I" U
打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。
* X$ _ O$ j6 i0 p6 {& H, v
! @2 m3 \! [7 k( g
: G( N$ ~: x( _# n& m, x2 }1 B; ]. n3 m
再往下8 g9 j) j4 ~) {7 V* f
$ v `' G9 s' M
+ k) P1 y. w: f
, _ n. S, i+ ?
Timer的定义,照抄openrisc通用架构的
: C; c3 P1 R7 F, D2 r; N* v7 H
# K! q3 N( n1 f, P$ H7 D: x% y% e4 T( C& c; S# z" U+ v# _
. q5 k& S9 O' l: ?8 P6 B9 h8 n
往下,关于u-boot环境变量的存放位置。- v9 b7 a: I% h+ [9 H* m* I
e* ^; \8 A4 e5 b! y) |/ |
& ^3 U4 Q- s$ I2 h( I( I( i, W- j
2 Z* s. ^. o- J2 ]. D5 V 刚开始下载到板子硬件调试的时候先把162行注释掉
& N$ A6 P g" q- E7 H, G& {
3 m0 {- p8 Z2 Z" P
5 w3 F6 [$ p8 M, F
# H9 p! Y9 U2 I( i; ]+ V- l8 @
8 g0 A+ [2 z7 R9 l5 o4 f3 _' l" n' E4 j8 I: O( G, u
刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项2 I, E. q) ?% O2 G8 N
) p& G. w6 V! N
: |& L% I, S* [* z2 d5 S
6 I7 y, [4 i% |: O7 }0 Z7 c+ G1 P, d- X
( V8 l( `* Q( t" w% m3 [4 J* b# }& z' r& H- w
这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的
0 Y: v: A, K0 r0 }# _1 \; C; d2 Q3 H. F$ O6 _
0 ^! ^! m; b2 q/ b$ |/ ?* b- x% E0 d3 c8 w' X
上面为调试u-boot时所选取的存放规则 |
|