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

linux学习之路_or1200移植u-boot

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

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

    [LV.1]初来乍到

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

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

    该用户从未签到

    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 14:27 , Processed in 0.218750 second(s), 27 queries , Gzip On.

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

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

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