TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 E% M3 h9 S9 G' z+ Q. l% j x
现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。6 \/ i( X5 \0 N" Q6 p" x
3 Y6 r& ^3 l B: _- E8 J( s( C
至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。
* o1 C' l, u1 L4 r; E& F. r: B+ I- Z9 h+ U
?" G/ J \- C
* P6 c' t. d" ?! o4 x Y7 W% Y
) p; p5 J H# l7 a3 W D- o 将u-boot-master.tar.gz下载下来。
5 r& x' f2 C# r- C% W
4 U1 x0 y$ P- A, H5 F
' s5 j: b2 M3 z- [# J- K' R. M4 |8 H4 }# V2 r3 q2 J) M4 p
打开opencores关于u-boot移植的步骤。
/ y2 @2 Y3 w! k" z3 k/ X. @
3 l b/ j" {9 D% E5 a% D3 q8 l* J
! X' `8 m3 G$ s R- K/ x
9 A5 @& B+ c" n8 t5 ^9 s
0 u) d1 b3 T, K' _, L 并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。# W) r* Q2 X" K) T. u9 [/ E5 P
4 f" U. X" K6 H* B
+ D% ]6 _7 m$ Y2 Z$ U4 }+ N
# W1 B1 e9 f6 |" n9 m6 z3 v7 {1 R( M7 |. R# T; J
解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。1 l' D, T$ Y) o* I) r" ?8 r
; ?! D/ y+ V& w
: Y8 _' T- D. T0 f
! k+ ^* P8 l1 v8 p1 V9 g 在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
- e# m1 k8 j2 N S3 N, }) W; y, b2 A% w" E) `. [$ |- o, L" Q3 z; Z
# B+ O5 ?* i5 J, D2 ~
3 z" f# |& s4 g1 j; w3 L 好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。% F; I+ f% t1 Y& B U
5 d) J+ X! U" n# a$ j# G; E9 U. F' G% R 1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。
& v1 M# V9 J# `' [$ x# O
) L" W* M# @9 F+ y) E1 o8 \
5 f. U1 L- H% l+ A) o9 u
! R/ O8 p% U6 Z% x
3 u2 t; i/ G5 K8 n9 y% J; J0 y; N 2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。
6 l- w2 d9 W7 }* `- F6 M% R! U. ~
J0 j: Y1 l5 @; J
7 M _: \7 {) E
# R& \8 j; I0 X- Y" z
参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。
p, @0 p' F8 a. }! _" q1 Z
' c, {) {; `7 z- @% j" Q" j
5 r& V( L0 l+ S' \3 M
; v- M% o& U6 Y. w
3 B. f% l7 E* ^* k# t 修改成自己所选择的开发板的名称
2 s4 T; Y2 |$ D) K( y5 c" A/ _. z; R9 W2 x$ i; m y. x
0 b( a5 V/ S. J S ^1 E) ?" W9 K# Y% G: x% \& m c
& s8 e2 k" W9 g5 g! q- h$ U 然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:
2 H* R) L7 ]9 ~ F( t0 K) N, b7 I$ E6 @6 M
/ I1 j! _5 C0 c% V$ T5 b, D7 ?
+ P, @4 a; I8 ]7 s6 z0 H# a7 t6 d( M$ p/ b& K; r
与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。' m8 A1 L! G/ t3 ^# l- @( {$ x
/ w) y! o( T+ N6 n, t* G A 打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:4 i' e4 ~0 t/ I( ~0 i n
2 j8 V3 Z( E( C: |6 E. b
( d* x/ e; v' u3 I1 {2 ^" Y
, q0 L1 I* W' n9 u 用u-boot自带的dm9000驱动增加对网卡的支持
1 p' N( P: p) s2 p7 n' X5 X, Q2 _: b( b, |, l6 y, w6 O- P
' H$ J6 n9 e- b. C( ]! M3 ~) R/ H
3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h0 s$ U0 a( y& T5 |
7 m2 l. ?" W, }6 K/ L& R* R
3 r' @: i% j$ e1 N3 I% F @; v/ ?( V3 ^9 t& s
" N& i9 x- Y& C0 l& x5 v 然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。; Y! q$ x- f& b
$ }; E9 n+ W! t" m
一步步看
0 _* }$ q; r7 B. r5 U" m; h; H* R: I9 p3 K" n* f/ [" t/ |
) y1 g: O6 W, ]
0 h; O0 f7 S9 V" I: A, G 看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。$ n1 T6 h& E1 ]8 K
8 t1 v& e! f# R8 p" w 然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。
; h5 R! P- B( y1 P; x, c9 h- a* }& l& S. v
接下来板子名字,随意啦。/ R: z; t; H% b- C& [
. S8 B- w6 A* K5 R) }0 D" l
`6 m" `+ x( y4 J/ c+ ^ 接着看就是关于FLASH的宏定义选项
4 }, B% W6 m/ [; [0 D1 ^
3 L9 O ]/ Q4 p$ s3 ^
+ r) C W* u. H0 e$ v( I/ g: |) C* F3 N6 K) s5 D9 P
我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。 |' ^9 x# ]8 N9 H+ I3 d
& L1 h" W& E" `. M
* S! `% g1 ?; Q1 Y9 [6 w; A1 a% Z4 q( K: a( }0 ~
往下看3 j& }, }" j6 W) K" f! O6 i' @
% \: v( V" t; O2 A
/ R# \1 k: {( `" I# m! a5 y3 d/ ^8 q' q
在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。
) l6 V4 L$ s& m; E* t3 Q5 ~1 H! w8 v4 C6 m8 p
! ]8 p$ s7 Z, w) p' y
$ \8 k$ t! [. s) q 再接下去就是关于UART的描述
" y+ J+ |: d/ s( u# A6 V4 ~1 d# q1 `1 G0 L; B. R: R0 N' `; E4 |4 ?! I
! T. @6 W& D; Q, l r6 z' x. f
% }7 C0 y; H: k3 F! r 照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
+ ~* ~0 P' H9 V+ S
% ^2 H6 b1 @' x' k
, G2 c8 a. ^8 p+ |, N- `. ?
' N3 `) F# e: Z J$ G" @ 接下去就是关于Ethernet的定义了, f: d3 n/ m3 U8 _+ n
5 b' ^8 v& O7 P. ?! \
8 W! ^7 g. i3 y8 @- l" X' A- z( S) X% p; x: [7 i0 a& s
88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。
p, K6 H" x3 I- J" G* O5 z8 Z( j* L9 U2 o8 Z# T0 l
94~101行,这里是关于网卡IP,掩码,网关······的定义
, z3 a& D- m" D8 i. h
/ }0 J; v% ~" e5 {8 P; C: E
% o( Z( B" [1 F% m9 X, ?, V 打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。2 K( A# C. T3 h6 P& C( a
: x" U% c a+ S
! L3 G* ?: Y" k" x: E$ S# D) M& U9 K$ F( j8 q2 t/ I
再往下
3 G8 i1 C _; p7 p) k+ a
% @6 v- o; T, K; d& m: O1 F; P
# k0 C; s0 u& {5 ]$ `1 v2 K4 O7 a" @! P4 @4 ~( d
Timer的定义,照抄openrisc通用架构的3 d7 |, [! e' j4 k
3 A$ W, H1 Z6 c. G" B0 f& w$ o8 y5 T/ g3 ?. T% N
0 b) g1 x$ T& I" A! [2 x 往下,关于u-boot环境变量的存放位置。/ @7 t2 m# Q7 n
5 n# y% @: N" _6 c. z5 w
+ D0 d L6 z; ]. U( F
- Z( }5 d7 i7 x5 j6 J: L4 Y+ y
刚开始下载到板子硬件调试的时候先把162行注释掉) L& z. @+ z" C, r* H$ U
' K, x; b! [% C5 V! }4 z, z! M
3 ?) a8 H' b% Z1 q. p' |$ K+ h+ Q/ o- [' n5 W" s4 j$ I0 ]) A
* K; ]- A" N. ?$ C
V3 {9 r% A/ m% H$ u 刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项
! @5 l: Y Z9 A5 s4 j* x7 V8 X+ N! c. G k M \
6 H9 W* I; T, Q6 G- c& g" c( C
5 E4 `8 q1 e; Z7 B8 s9 v# x" p# @% S5 r8 G% s$ Z# H
9 u. P2 t& M4 l8 z% h
9 Y( k( y) Q7 D 这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的' j( T! J7 E( ~% Y- S; M3 v' V
& x" r) _; E+ i) j7 S
. X8 w1 V( T% J9 ], k. @# k4 x- S- i; ^% T, N3 U. r8 }$ Z
上面为调试u-boot时所选取的存放规则 |
|