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

linux学习之路_or1200移植u-boot

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x

    4 B9 [$ Z1 s( ~" K: k# m4 [( h  x  F现在搭建好 SOC ,可以的话可以先练习编写一下“裸机”代码测试一下 ipcores ,就当做是提高操作 C 的能力咯,那这次我们来根据自己的 SOC 移植 u-boot 上去。
    8 }+ m! b" l' f! E) G- ~- L, `- Y4 D5 o' a) i; i" D) ^0 W
            至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。7 c) N7 ]0 v: f
    - A% f0 K. w# q+ p+ ]! u

    " ~! L) c7 ~5 F7 {9 I7 O , ~8 }# z; P0 R

    + D% R! o! H% q! U; W        将u-boot-master.tar.gz下载下来。. ~% w( n. F7 v4 U# G9 _

    - M! O& ^" [3 ~& t& d' O- p3 v  ]1 [; Y; h2 t4 \8 H

    + Z- V$ k. ]2 v& a) k' r        打开opencores关于u-boot移植的步骤。: u4 L7 H4 z9 S# X, s* Z: v
    % [! W( a8 W6 \$ ^9 H6 U( n

    8 M. l' E/ Z' Y9 V0 s2 K5 {
    . j0 }: t* I  i% w) W
    ( q1 M) f7 Z: S3 j" D, w3 z1 o        并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
    # C2 q2 P- u3 i  u( `2 i0 m# I: i9 n# @( J7 n7 m
    $ v6 r9 j" D  a3 x

    / e7 c: b" \0 `% B0 z2 Y8 k/ P, f9 r2 ~! [, z3 F
            解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。6 J5 a8 W4 w6 r6 l
    - x3 x- K" H/ c- y# y) Q/ Q1 `
    3 o8 D* f' [- K1 d  @4 @% a5 j$ m

    * h1 n* v3 w$ q; t( w        在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
      Q* u. k, s5 t
    % O7 I' U" E  q' i) ^' p
      e$ [; `4 t, }* p$ ]2 |4 l* c! C$ \. Z' C, D: m
            好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。
    : l0 Q, m) V/ Z$ Z( l
    " V6 k: D+ M6 R        1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。" u- M- K6 I) B+ y# C2 K" v

    0 o3 Y! M% |9 @9 i  L4 _' ]
    2 e7 c8 ^; l8 o6 V+ x8 p5 {4 F! l
    5 C5 K$ Y: [) @- M; _  E, n" Y& H
            2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。
    # W* X6 f( S) k
    9 k2 W% v" D# k* z5 K5 R; _9 x ; O, ^+ X' ]/ D+ Y5 F; s

    ( h1 z7 i( w3 D" _7 u- ]' @! }" X) e) \) }
            参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。2 H7 N2 d  a- R, l# Z1 e9 R
    0 v( _  l' f3 J5 E+ j

    , ~0 s7 o" R' b# K' S7 ]- u# P0 O% k- ]
    ' t6 ?0 Z; c# b
            修改成自己所选择的开发板的名称+ H% `4 u, Y, H7 {$ c/ \+ l2 y

    2 C% \2 ~# p" P2 H* r" U" g; _
    / s3 X2 q  S" r5 z
    9 ~$ l. V5 ~4 D  j, N. g8 H3 |
    / U3 |" ^# J7 P- b        然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:6 @2 _6 O9 {# ?' T# H8 O) x
    7 P, W! v4 \+ n: h& h1 ?$ M# A

    * l9 g) Q; B2 n7 A" F* I8 r7 n, h8 o% k. y. V' g3 s
    8 x4 U+ b2 M2 Q. o* j- K
            与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。
      Y7 c* I4 I( `' z9 @# d: W. R4 y. D5 N, O; L8 W
            打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:
    ' P' ^: s+ q3 E  H7 k# L. I. {8 ?* V6 N1 k; B; n6 A! X# H
      x+ q& h$ K1 M7 x: W5 S

    # b& S, y, W% b; s0 ~. W        用u-boot自带的dm9000驱动增加对网卡的支持
    0 v$ A9 q+ L' W  B
    ( ~( f, t" X, T8 Z0 S
    ( ^2 m0 f) a  R) U- f& ~5 n5 L, ^! |) M, y- ^
            3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h
    ) x6 \9 x$ J9 X; Z7 J" G" A5 l: l, t! C/ u, G1 c# ]+ |
    5 _" w. v- n/ J! }( Q- f' J: m/ h

    " E% i9 a+ R# Z5 X/ O5 z7 P1 d3 H1 g9 U1 p& J* r+ |
            然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。
    ( O9 X: d& j* A' ?/ `# L8 @5 j( u, V; Q
            一步步看! O+ i' b# @# J8 j! u% {. d7 K" Z
    7 p6 O; }6 _: B6 m% N
    5 K- j4 A3 G! @4 p: m( K6 c" m
      q. j9 B& K) l4 \, C4 E% R& ^
            看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
    0 M# X/ p3 }, u; I8 j# [9 T: H. p$ j( Z# F7 Q; d
            然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。
    # L$ H# m) g2 Q* q# a: O
    2 `+ O( g* Q/ J        接下来板子名字,随意啦。3 @' J  F, h, N0 [+ @
    ) \& z+ l5 t) ^4 T

    ; C3 l. Y, w. E2 N- n        接着看就是关于FLASH的宏定义选项
    ( Y5 s5 D. l3 j4 z; N& e- A7 G# S) L) V) Y# y/ X
    2 y$ |( W0 V8 {
    9 K4 _/ Y; V1 f
            我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。3 P2 W3 o, {" x# O
    ! q1 }. b# J1 \/ j

    & p! ]( I2 U) m5 k9 \# T
    - C! e! K3 u3 `( v  V0 g8 A        往下看0 j7 P3 k. q7 a( c( o, C/ l

    * b& ?5 u8 s4 w; K5 O/ C* T, H) s0 @ 5 W; c' b; z! h3 _  F$ m

    . _* o7 u. Z" c9 }        在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。$ V' d3 z4 o* y* @" \; f5 j
    2 r' t5 K  ?9 K

    ' k7 n9 [( w! T
    : s1 f. P2 T# n0 x$ N0 |3 S% v' o        再接下去就是关于UART的描述
      T4 M2 w7 Y, f9 [& Y' _% [
    6 z, W3 Y8 W0 L/ A1 M' m / C4 [! I$ ?1 b
    - C0 \3 s# n0 q7 v
            照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
    4 p6 j6 |2 M) N5 R/ \7 ~0 u
    * m3 j2 ?% g* v1 P! C/ W2 e+ w0 Q6 s/ k# U& @$ y* I

    4 P2 |/ ~: _' n0 k- ~' n9 m        接下去就是关于Ethernet的定义了# X' x5 Z( w9 q; v

    * O5 _  D( r; M+ F- T3 X ; r+ X$ O7 \5 O5 D7 }6 l
    8 q- l  _) r" ~- E& k, ?
            88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。; }* r* l4 v0 [# @
    % K7 k: X9 ?% o& n' k
            94~101行,这里是关于网卡IP,掩码,网关······的定义
    2 F4 _0 ?% s/ `2 I; Y, \9 X8 D
    , R) r) y0 M+ ^, B0 p4 A6 i& V0 Z! I" U
            打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。
    * X$ _  O$ j6 i0 p6 {& H, v
    ! @2 m3 \! [7 k( g
    : G( N$ ~: x( _# n& m, x2 }1 B; ]. n3 m
            再往下8 g9 j) j4 ~) {7 V* f
    $ v  `' G9 s' M
    + k) P1 y. w: f
    , _  n. S, i+ ?
            Timer的定义,照抄openrisc通用架构的
    : C; c3 P1 R7 F, D2 r; N* v7 H
    # K! q3 N( n1 f, P$ H7 D: x% y% e4 T( C& c; S# z" U+ v# _
    . q5 k& S9 O' l: ?8 P6 B9 h8 n
            往下,关于u-boot环境变量的存放位置。- v9 b7 a: I% h+ [9 H* m* I

      e* ^; \8 A4 e5 b! y) |/ | & ^3 U4 Q- s$ I2 h( I( I( i, W- j

    2 Z* s. ^. o- J2 ]. D5 V        刚开始下载到板子硬件调试的时候先把162行注释掉
    & N$ A6 P  g" q- E7 H, G& {
    3 m0 {- p8 Z2 Z" P
    5 w3 F6 [$ p8 M, F
    # H9 p! Y9 U2 I( i; ]+ V- l8 @
    8 g0 A+ [2 z7 R9 l5 o4 f3 _' l" n' E4 j8 I: O( G, u
            刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项2 I, E. q) ?% O2 G8 N

    ) p& G. w6 V! N
    : |& L% I, S* [* z2 d5 S
    6 I7 y, [4 i% |: O7 }0 Z7 c+ G1 P, d- X

    ( V8 l( `* Q( t" w% m3 [4 J* b# }& z' r& H- w
            这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的
    0 Y: v: A, K0 r0 }# _1 \; C; d2 Q3 H. F$ O6 _

    0 ^! ^! m; b2 q/ b$ |/ ?* b- x% E0 d3 c8 w' X
            上面为调试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-6-23 02:47 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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