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

linux学习之路_or1200移植u-boot

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    5 k: C6 ]2 r1 t  x3 P3 n
    现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。
    ; M7 N' U* }: @' `/ t
    " c' |( V  ]  h9 i1 j        至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。
    & X% T: Y# q* j9 h$ O3 X
    - o* k3 g# {9 ~, W+ F
    9 ?: E, M% Q" @, D: M 1 K7 L& \8 l- f( U; {6 {1 F

    ( @( n4 n3 ~7 S7 }7 R        将u-boot-master.tar.gz下载下来。
    . j4 ?3 l! f: p- C
    ( G/ ]/ n2 Z( s  A) j/ k5 T
    ) i, ?7 X* i5 w: Y
    4 }1 `+ S# ?) j" G" H7 l; y  j! Y' z        打开opencores关于u-boot移植的步骤。5 O' B  h& Y2 ^% R9 C- V

    7 z4 h& @5 h7 L/ ^2 a
    3 D5 W/ e  w6 G5 d$ T  B: \1 K/ n* r- \* f+ o
    2 }& R7 |/ _& C) S
            并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
    2 D8 E! ^0 l# M4 k* j9 L7 o8 g# z' y! ], ^8 s' V- T: u
    # E0 O* {( l  C1 F/ B1 M
    " B1 V, L, z  w! d
    ( l% J& g& E  e' V& n
            解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。! P/ A* ]9 B6 Q" @

    + Y) M& V6 |! j6 o7 K: v
    - a( J4 _: U1 U- }
    7 R/ f4 L. U8 [. i( {        在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
    5 G+ l3 o+ r1 y# o' M- ~. W
    , Y2 N% x$ t. E( _2 O# m; q- j! }- Z, h- T6 _/ _7 R

    3 U' b4 ?8 u5 K6 x$ Q% [        好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。/ w/ {- \$ u" l- C: ^% }8 k
    2 f! t6 O) l/ a" |& H( @# l5 i
            1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。
    , J" }& b: r  @" y3 ^9 i8 u1 ?* D+ e' K3 K" M2 x/ v! L1 s
    ; p( P% D% q, ~1 r

    5 T. A6 z% t9 ~* X) l/ E: k# A! Y  X4 Y. ^+ c: k1 {3 k& l: h' b
            2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。; I5 ]* p+ W) z- N: i4 x& Y& n
    3 i8 u0 Q! K6 {, F' v) g0 @7 b
    ( q; N# B; q1 W- Y& @

    6 M& E1 w1 ]2 h1 A$ T* G  \& m) o. E
    8 C/ V/ `$ Y9 T/ D& x$ B        参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。  u* j& w1 E5 B- K0 ^/ c9 Z

    8 R  U3 v4 ]% G5 I- H) e * N! @/ {8 l) k6 Y0 T

    0 W" l# e5 E  i: x) r' H$ L0 s
    & h( E3 Y) v; u/ c        修改成自己所选择的开发板的名称. y3 g4 s/ H& U, H
    . h$ J3 h2 V# r# j
    $ `  E* F7 G+ x! {1 G
    . G  G5 E+ l$ ?$ y
    ( j; S; s  y/ r* l. a2 O
            然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:
    ! `6 V0 p; N9 k9 \( `& M* P. O
    " i8 _  ]6 _3 y4 M* k8 `& ~
    % ?; n& d0 P5 {0 H; Y8 u2 I, N3 U3 O- @. u8 c7 b/ u
    2 @5 Y3 j5 D' S$ a; b9 d; J: \" M
            与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。; @% ?2 ~# w" H+ ?! c  t) H

    . ]* ?1 j5 S2 G" M5 [1 A        打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:
    $ D0 D2 g2 l) w2 o$ ~
    . r2 N+ s1 v% }  L) t7 t! x: _% ^# ^
    " S& @6 ]# s$ ^
    & H1 ?+ o; \1 T        用u-boot自带的dm9000驱动增加对网卡的支持
    * M  ^  l. t7 O5 V4 b( y3 m3 y
    7 }, s% D. g" Y: w; @( C9 V$ H, X
    - b% L/ A. l% {/ b# V  j$ |
    8 G# @9 @) i5 ~, l        3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h: y) v. `8 r% w$ _" Z+ n! V! V0 p
    4 n' o% \) R5 p- V* j4 ]

    / I0 \# s' G$ e0 O- D6 {- |8 [% A
    4 H2 b" x6 F6 L4 C' Z. m' D
    8 }$ b% q4 c& w) }        然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。1 |; U9 }- x' c
    ; b- v" b" v0 J+ u( f5 d" {
            一步步看
    ) E$ z9 H' _, L+ c  G# r' T* `' c  F- D$ T) p1 O% x, i2 t  z
    ! T% b9 `( H$ u' J8 H

    4 Z" k  j$ m! P- |        看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
    2 n; x, }2 h7 t& P6 a4 t: U( o8 x6 B
            然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。
    2 f3 c' j* L9 m! ], g4 `8 W- M- W8 T  r( H; I$ M: e( W
            接下来板子名字,随意啦。+ E4 A; T+ P9 m2 I/ R

      K6 Q% S: ~3 t, l9 \- Z  @2 l2 C, f& t3 A" q) Q
            接着看就是关于FLASH的宏定义选项
    3 f' u, j5 r) z* p4 Y/ X& Q: b. S! R) J2 O. n/ ~- Y$ r: |

    ' p/ n: y0 g6 m6 _% \: T7 V/ m
    % j/ y2 O% t, W, V        我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。2 U4 Y- T# n& K& g
    0 ^5 s* T  _5 S

    * Y& h3 U$ I1 j
    8 L! z' U1 u( [" B! g: h        往下看
    / k! d, T0 y+ U7 e! ~; G  I9 _2 C* {1 R# \. `
    3 N3 v  \7 J4 F6 W/ L0 O$ H

    6 F  z3 m" A: d% q* p% R        在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。
    ) f) P1 j1 q) D& h1 F
    # X0 ^, S) _! e0 l
    9 r2 g1 ^: t  D; ~$ Y
    6 `! e5 W  f/ P) z9 B6 m        再接下去就是关于UART的描述+ P) F" l' ?2 F) [1 b) v) ]
    + l6 c  {: x3 ?! [1 M
    & W" q3 h7 S4 @) Q; T* Z" Z; [

    1 s- N( n' p+ P        照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
    : @; u  J; j& P+ K/ k: U$ A  n: i' O5 r8 z
    ' ?9 ^3 b7 ~( s* u
    9 I8 Z) j3 T* e1 R1 _0 W+ Z4 G
            接下去就是关于Ethernet的定义了. _% [4 }8 W& g9 [( E: j$ b6 ~3 n
    , D1 C6 R: a7 m$ H+ F8 w- Q+ [
    ; C: H, l1 k) z2 O
      ?- R. W% t9 |: O& Z9 N1 Q% W: p$ f4 \
            88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。
    7 ]3 q' t9 G2 ~7 `- p0 O, t/ J9 j* I. _% Z
            94~101行,这里是关于网卡IP,掩码,网关······的定义
    3 e1 I* j, d5 T
    1 v- L! ?; X0 t  P% Z
    ' f! k0 S" F* `$ J        打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。, u6 |5 x$ R5 O+ p5 q+ w
    , _' P9 t& K' _/ _1 `, Z

    8 c9 a7 @) p3 ~3 G  O+ R: o! W7 j) X( X0 H) C# m8 ]! h5 C
            再往下3 T, N2 v/ I  B% B. [5 f/ X' y0 [
    0 o6 ]& O; E& [% }. E0 f

    / @& V. c6 T: R) U- r! b
    + y2 {) K' a, ~        Timer的定义,照抄openrisc通用架构的
    - C' K9 |8 L) j1 Y7 W! D5 x2 w2 G6 o* U: U. Z9 v! g
    / _* K' C$ S# |

    ; D& Z+ \; j! e$ X4 a        往下,关于u-boot环境变量的存放位置。% |% c4 n8 M  X
    : m3 v3 l" O  ?9 z  V- Q& d
    & Q( W" h& r+ y& O) W( v
    3 q' A% z8 Y& B+ h
            刚开始下载到板子硬件调试的时候先把162行注释掉* }6 V% X: U. `4 G7 ^

    , ^1 s9 v6 s2 Y0 I% E + e4 ~, K! j) |! a) l

    % k; u( q5 W% d5 q, h
    ( v5 J8 ^1 E# `6 U- `. F% k
      I7 V2 i/ r9 ]+ w: r0 D        刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项
    " w) Y- Q. `* ~; ^: j0 \. c8 M- Q3 @. z9 n; q( _0 G
    8 P3 O* Z9 o. g6 j( c3 |
    / q) B# [2 I, h! P+ a! U& Z

    ) @* g/ Z7 |) Z& v8 N) U
    * N" c* c1 o. M0 Y- V$ t& N: q) S0 |, s2 [: P9 ?( @9 i& }! Y7 r
            这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的+ C: j% P% {, e! y( G

    9 P) h8 E2 w9 s" P, c
    0 f3 H$ f; Y# X# U
    , H" l) \, r5 T& K. [0 p        上面为调试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 08:32 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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