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

linux学习之路_or1200移植u-boot

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

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

    [LV.1]初来乍到

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

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

    该用户从未签到

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

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 12:38 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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