找回密码
 注册
关于网站域名变更的通知
查看: 629|回复: 3
打印 上一主题 下一主题

linux学习之路_or1200移植u-boot

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-6-1 10:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    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时所选取的存放规则

    该用户从未签到

    2#
    发表于 2021-6-1 13:10 | 只看该作者
    or1200移植u-boot

    该用户从未签到

    3#
    发表于 2021-6-1 13:10 | 只看该作者
    or1200移植u-boot

    该用户从未签到

    4#
    发表于 2021-6-1 13:10 | 只看该作者
    or1200移植u-boot
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 12:56 , Processed in 0.171875 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表