TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 h$ J+ N! L" y8 E2 {- ~% ~* u
现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。: {% }6 v* V6 P9 d6 X( ^5 s
. b$ B/ o5 D5 U9 a 至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。
! _* T7 a$ {& x# J. \+ h/ Z/ N; k; R4 D2 j
3 [. E# E/ ]) O5 J' s8 s) ]' n
! C1 Q; k, |7 j9 _; G$ X
8 R7 E2 _9 j/ Y8 \# u 将u-boot-master.tar.gz下载下来。' O' n7 P5 {6 Y. E
: X8 K9 u- h" ]- s
0 S: `7 ]" Z5 |0 ~) V
8 [- E% R. X7 Y+ a/ i/ L% E 打开opencores关于u-boot移植的步骤。
: f8 t, e, b, T8 K( i; L5 y& [1 u6 U) a9 g, z( b
5 S+ S8 Z% w3 [; _; o0 l, S1 Q Q
* `; v+ n$ n8 R! j N
$ t& y; Y0 y- x
并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
6 K; Q v) h1 R0 o: E) g/ }$ u; {" k
; z4 Y: o/ b: D X2 ?' r9 _+ D
% v3 e1 e" c+ b8 u4 u
! y- b; J" n) q/ h1 ] 解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。! k2 S9 k" |2 f% C6 F% [- O
4 J7 l+ f% \& s% N
s) ~" {) U; @9 }. W" C1 |5 X* _$ r
在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
5 u, O' A8 s, @2 d
. x! D/ Z Z; a) @7 e7 S: c
$ c2 Z" C4 K) I8 W) s2 s1 K4 J
# M+ x0 F$ q0 O9 | 好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。
) A. U; L) V9 e$ U, X1 s8 {& f
[0 l# F( e0 U. G9 E; t2 _ 1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。
" e: c4 k+ ~% H5 }% f. D5 i$ O2 N, T' V
2 a- Z5 w: P/ ~. O! I* l/ d _ {
+ W8 c4 h8 W8 w% ?7 q# f) d# O7 R- `) I6 K4 P2 O
2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。1 J. L6 A4 F& ]0 X7 t2 H* |9 J
* Y; A: q$ ^& {' k0 V( b4 o( }5 z
8 ?' q/ y1 {' R0 a
H n$ o) _1 j& }# I
$ k j+ A( [9 ?' l9 [. m; E# W
参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。
1 T; J+ M/ l0 G& q& }
/ w" x. Z1 [$ t2 ?! |% C
" p$ Q: D$ ~: X6 P4 r& I q* A* z, ?8 n
J4 c' l- x5 H$ ?6 n# e
修改成自己所选择的开发板的名称
: R2 K6 i. V* }4 _$ _/ z
8 {1 U: C: W% ^ C
0 n1 C" ?+ }, W' M& Z! } n& C
) ~* i+ u- M; H1 P x( J% t' i1 E3 g/ k# V
然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:
! l7 N4 d( f. I2 U: @7 t
0 v8 H. U* \! H% A- r0 @
$ |; Z* W! v( D
, ~. H5 F7 v/ H0 _. a
- P9 ~3 {- s: O5 X8 K5 {0 b8 p6 {5 @# k 与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。: T9 ~( v) r1 u- X. j2 t8 o7 p y
: `6 ?& k+ G( E Y 打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:: e+ ~* s: s& H6 A' l9 d
- f4 R0 \3 l, V7 I8 i6 E1 V1 Q
/ ~3 w& \$ A) X, S- q4 s
8 c: c) L7 w" v3 l0 i! T0 ]" K 用u-boot自带的dm9000驱动增加对网卡的支持+ q$ m- B2 P6 e7 K/ n
. [* ^( j# f9 g% i/ U
. X O4 V+ k9 G/ ]' j
0 F' V5 Y ]! M2 ^! ?
3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h& L$ [2 x7 l! J$ d
9 ~% ?2 I6 R& |' T, r4 ^
1 c" L6 _% V, e- O2 W3 z+ t J
8 V, w7 ^0 u7 g/ F6 {0 D) c8 K; F8 C+ q; F
然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。
% G% }2 L1 _9 T) V* g/ `3 G/ u$ f4 e! P" v6 q6 F' [9 Y- ^( Q/ |
一步步看
1 @+ _3 g- v1 ?" e- P8 J9 U
& h4 }* D4 ?/ G
9 j/ s& M, C- J- L$ c4 W8 \* m/ V! Y2 f; l
看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
) Z7 h) v) q: E. _6 V5 b' z8 l) p. |3 q
然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。, a- X1 h0 ]% N+ [
6 q+ m: {3 X3 b, X1 k4 e
接下来板子名字,随意啦。
/ P* a; S5 Q+ ]$ \+ A# @4 l5 D8 F d7 \. K, D% u3 a8 R% E. t
& Y0 Q* N& J: U4 d9 B 接着看就是关于FLASH的宏定义选项
# A+ b+ e# d9 E
, O% [$ I2 Q2 @# m
) k, A0 W& D0 P' ?4 I( {. l
! `1 I4 T7 I/ @8 r+ ^! v 我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。8 E2 C* M3 N! x' ^- M
+ d+ W8 I# B4 e% T ]) {
8 A6 J3 Z# a H0 |! @3 K( f! T- p- n4 E3 Q1 T) G
往下看
/ W p* D' H% r' E9 {. X/ g/ K% d2 c0 h
' X, z; e0 R$ P5 u/ K& d$ d
4 _" R7 k! L8 B# ]0 V 在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。
& F; i' L. t/ g8 s6 k& m# @
8 K! c4 z- L/ T- k4 K4 _; i( R* P% V2 r# F# C8 f8 _
2 x' z$ O2 W& C' Y y. V, H2 G 再接下去就是关于UART的描述" X4 }2 Y9 {, _, J# b
7 h- F' f) m2 R3 d9 [' H8 d- j5 T
3 c& j- ~! y( @, L8 U% c' L9 D1 D" L6 l, o. p4 J0 B5 b" h! X
照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
4 D8 Z c7 F% D- y' x7 ]- h' F3 b5 y( d0 X8 G0 ~' w5 ]' F( G$ Q' m
3 Z# L' f) j* U4 N' c7 ]0 f0 U" |# e7 c6 O5 Q/ o. v
接下去就是关于Ethernet的定义了
7 e" a$ w/ p8 ]. L' [( k; ^5 r5 E C: ~6 ]
& Y* \$ {5 H9 q
* b1 a) p; e" c6 v 88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。( C; J! r3 [# o
) c5 ^" L9 d8 e+ n5 D: O' K2 E: x 94~101行,这里是关于网卡IP,掩码,网关······的定义
1 i! ^7 y# Z: M! _' [# m; y `
8 m3 _9 I" x ?5 p7 o
8 n6 k! A. {- o% F9 C: Q6 t 打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。/ a( P. H$ j6 s& ?. F: r8 Y
" H' ^9 N" t6 W2 r4 n8 [8 p
9 S4 k4 W- p& [5 g- d
. e* F; v' }/ u) l% o6 h
再往下
( N V- B) b8 M5 a* P
, Z" \8 ?' e7 o* W% Z# e' p
$ i3 K* l3 L* |' h% o" d8 d* }1 F v# m" M2 F9 c! @
Timer的定义,照抄openrisc通用架构的
" N$ h. E" T- v4 A+ W {
# ]/ R& F& W' p* f% r% R
" t1 [# `2 x. p5 w" P6 G) Q/ v( K8 I0 ]0 T. u% c
往下,关于u-boot环境变量的存放位置。
# O: f1 B4 C# c6 p6 w2 S0 o; j" ^
. x& z" w* Z- q- g( u8 N" v, R5 {1 C) q8 C) y) I
刚开始下载到板子硬件调试的时候先把162行注释掉
N0 r, ]- P2 z3 @8 `% t' i( J: L4 T* K: k1 U
5 w8 M) q! g+ @, u0 E0 W9 s) T& d/ z: d* K. Q3 P) F
! E' \" g0 J+ z! {% B+ S/ g0 m
9 @0 q9 `; R4 {, z 刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项( T% @: X: C- g! e8 a7 E
7 w* W6 V5 h' T& c; A
7 _2 C+ _& G6 p
7 U3 y) P; B& ~& x9 y3 E8 C& z
* g/ Z9 j% }) C8 a' z" J5 c, C6 B% u* c2 s ^5 k. F9 b
' J* M4 U3 d& J" _: s 这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的
5 Y. Q; P& W( x A5 f% B
+ \! W3 S% v" D3 C
/ H h; U# } x l% a( ]
* o3 Q M3 a0 V6 u- ~
上面为调试u-boot时所选取的存放规则 |
|