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

linux学习之路_or1200第一个裸机程序(下)

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    废话不多说了,继续······6 C' r1 R3 A7 A6 b, Q  E5 W

    # t& n3 \9 [" `+ X- v        在我们的源码目录下是不是还有一个这样的文件?1 g$ T6 f9 n/ n2 K  |3 `2 P
    1 ?# ^$ _0 j6 d: G

    ) ~6 a* i3 I9 l9 j' }" z
    + i0 |' h) M& h; H5 ~        在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。
    / e5 V2 Q. J; f' @  ~# N4 O3 v2 l6 `0 u) M% m) W
            也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
    9 L, K. U, \, o- b1 y& Y* H0 Q1 W& R1 h1 ?
    8 K5 g/ e* F- q8 t" }! _- N( l8 \& _
    ) a9 d8 P8 S  f5 n; f
            老规矩,把windows下的共享文件夹mount上去
    # d4 u) _. ]5 ]3 X! s8 x2 @, T# I

    2 U- o" U+ v% a/ x4 L7 M/ }9 p- x
    $ p. s# [& d1 c+ `1 Q5 |& H
    / k( X# R/ m* m  L* D        然后,切换到我们的源码目录下,cd啊cd
    : q, J0 M. u6 p3 E3 C  f
    5 y9 K* O9 x. r1 a( H
    * m- S1 t9 X$ L0 `+ `* G7 ?
    % @) k& K# l  s; l
    ; Q8 O( e5 p& I6 N* E6 B/ S        再然后,make吧
    0 d3 e9 y  ]+ I# \' Q7 @. F8 t
    6 v" q* ~) J" |3 {# e! ?* N* {+ _7 J1 A " A- _6 A. s+ u; F# W+ x' i
    / C, e7 Z/ R# w$ j6 w6 V

    7 U% ?1 V4 w! @# i, G, V+ [. C    信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了$ @. y+ r7 ]* n. ~: F  c

    & E% b7 ]& @1 j& {
    , t% `3 z  P( `5 {4 w2 ~+ ^/ e        再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车
    + T7 Y4 |3 f0 R- }; ?; l
    4 J% B. y) c8 J5 G  a - h* F8 V" X3 Q- ]& }- Y0 [! F
    ; p- d) |! c% G( d/ i& U
    " e7 [1 D: }0 j4 ]

    5 ], M- e5 u. U2 h$ ~; e+ z: t        然后可以看到一堆信息出来了。" a# J7 O. s) f: q- {
    # ]) @$ |! d( D" b* Z  R, E
            其中包含我们在lds文件中定义的段信息& P2 v" w( X: k) x' x
    ( q: @: r, o  G1 q+ g  A

    6 g  K- Q4 [8 p$ @# _0 P% u0 p* R7 Y- V3 n5 q: A3 \+ z% U8 H

    0 A9 h/ V- l5 P) Y9 g' J
    0 N! [# g& n; O/ l: t7 _3 z% v7 Z        然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。, d* R; A2 G1 C( x
    + Y( e$ k0 V! w3 Q$ Z' L5 t% ?
    ! c" V* ~' n5 q6 f; Z3 H$ l
    - ^# c: i" G: c6 ?9 j+ b
    0 \( w' j. G! ~7 U
    ) l+ \& D, |- v
            但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。3 c3 ~1 Y+ @) U; r' B8 F
    3 A/ Y/ K2 r/ w9 ^& s+ b
            好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。4 [* T& b7 _+ q1 U  t( u' s

      g( O5 e! s+ b% @. z; Z, I" V8 u+ d- w
    % c7 [# N7 k, e8 Z* q5 A: I& z6 O- }8 D- J# k. O  W
    5 P' o: @( I2 F7 |# p7 n
    $ z1 z4 X$ ?- k6 i' [: X
            然后在virtualbox的右下角中把下载器连接到虚拟机上去。
    * n+ X3 r! V% M( K, a  t. F* r% l- J. }" Y2 Z2 O9 u# L. O3 x, ]* A# W

    : S* W7 A/ |$ \0 g3 V, D' M$ V5 T. k! x

      T0 v% Y/ k+ v1 E% h, |5 y) p+ j( _% p. O5 T
            接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
    0 z- T8 Y! [4 h& E/ _. t9 W6 W. T+ {
            好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊$ g& ?( f# @+ _# Q5 A
    + E( t+ z' f% I! |% Q. f

    * \- q7 X2 j0 g3 `
    ( [/ s* V6 u9 T5 y   
    $ ?$ ^; P9 [- _0 W; \8 E- M! }- Q) n! \' l0 g
            继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
    ) D7 G' H. l" J; Y; g$ F, q% _- p, X1 d

    / U6 a8 }: c8 o3 o/ m0 y   
    ! ~2 K1 S2 e! V6 _( J# U) Y) \% y( W  z8 E, H) C# K& q; ~
            上面列出的就是现在adv_jtag_bridge支持的下载器,我使用的是usbblaster下载器,但是貌似经常提示找不到下载器,所以前面在搭建软件环境时把libusb-1.0.9.rar、libusb-compat-0.1.4.rar都make install上,可以用ft245驱动代替usbblaster,下载器还是那个下载器,至于用xilinx或者actel的朋友自行去看看adv_debug_sys_latest.tar.gz的帮助文档选择对应的下载器选项。
    + i  K! F+ I+ {
    - H! r6 y1 z" ^        好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器0 B7 c: D* i% S  ~" f" h" S5 M

    # \- O% H4 @# P: c
    " }7 l+ b7 I9 _# M/ w' i$ R$ y) ]8 @# G9 A5 v, }- i

    5 H# W* l% U* v) B6 v5 E' H        这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了" M: t7 i# C& b, B
    " |- {8 e( a. ?

    ) \7 Y. E  ~- U        再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb( ]0 ~. u2 r! C' N
    # t( N) e3 R6 K/ @
      m# {$ e1 D2 [, n
    0 Z% C2 F- k& Y) S: a: ]* w% ^

    / e$ g) {3 D, g2 c0 j+ {' T* m
    9 x/ a; n$ p/ y. t- O7 d3 L( z        然后输入file boot.or32,读取boot.or32文件信息
    : E0 @: D( C+ ~& ]0 h
    - ?1 A) W( x, t, L; ~2 ?+ Y2 }0 I- T
    6 ~& ]' B! D( h
    6 X" W0 S: _6 A& g8 M3 A) \! ]8 H$ c9 y, s; x5 i! n) ]+ k
            继续输入target remote:9999, M4 a( x5 k, s8 v: @7 J' ?% M
    0 p8 R, ~; O/ ?: K! z+ K# B
    2 l3 p5 V1 q: s* Q

    * d0 \8 D% B9 `2 s) X( w+ F& `# W) \+ S: X  P! m8 p. c8 s
            这时说明已经通过gdb服务远程登录到开发板上面了。
    ; ^/ h* S8 a" j1 X4 Z/ B% K! ~8 u

    8 j. H: Y3 J0 z  \; F% E        继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上
    + S, t; f- _8 q1 P# u0 ^% l2 e4 J- w$ c- j7 z, ^/ Y2 C
    6 ~. Z2 K8 x2 t. O! ^5 r3 f

    * W5 e$ D# D' e# B) B. K9 Y+ ]9 k( S; O+ A2 f& j& U" {
            同样这里也出现我们在lds文件中描述的段信息1 h" Z$ M! O5 H( _" D' e

    # X) p# T0 S6 s; E2 K$ Z" g) y% A1 \4 q% ?' N
            好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
    $ W% I3 L# Y$ g4 J: G. H: S3 @, ]4 U3 K5 N* I! D

    , I9 j0 P$ W9 W6 x5 x/ h% h
    . m1 y+ v8 h8 f5 m- B3 P7 n( Y: ^" J% l4 c( z/ I; X2 B" I. ^# @! N
            好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是9 c" ]% e0 d" v* ]* d' K7 q
    / z# ?! R8 f6 N/ B  C7 ^
    * ?) o: B7 \0 F& v9 i4 [# p
    3 U/ G3 b' ^8 g2 [0 y. d

    " |3 L! i% d* ^2 @9 Z        波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。& E6 P$ @, o5 x  E+ o  S. c5 f
    * F: @+ F) M7 s% |+ R- L
    ' ?0 H. ]! V1 n8 h! V  u
            ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c8 Z* e; f5 {1 l% f# O# Q/ O
    ; C6 l0 g" Q* W& i
    5 a* p9 `, @$ S; ]. E3 z2 a% g

    $ A; b  a- c+ n2 E" _, `: _2 B- S. W2 s5 ]/ g: u: y: a6 f
            然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。
    2 E# `4 @1 u0 Q, W) G/ a6 Y$ j8 g
    ' O& ^- E9 j/ N& |7 m+ _$ i! s

    6 [; N3 @: ~. A( N/ ~0 ]6 y
    9 }0 H  C  ]+ a7 ~6 z7 P, ]        哎呀,有了,妥妥的,好了,第一个程序就到此为止了。7 q( X/ s8 L) l2 h8 u) k! @
    . W& \) g/ z! q* ~% t
            接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把
    ; O/ f! Q# h1 L( P
    ! S- B8 ?# x6 b: U        minsoc_latest.tar.gz1 G) f, h$ f8 x( ^$ c& ~/ l) N

    : g4 v% m. p: Y) @. \& a! |$ f* U8 E        or1k_soc_on_altera_embedded_dev_kit_latest.tar. c5 Y- d6 q8 Y4 e

    . V( O( z. X: c$ |1 O, X        orpsoc-master.tar.gz
    6 o* [- `% g  `: z+ g1 X9 P3 {1 t4 R8 Z+ |
            这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
    0 S0 P) D$ a7 _7 @) e" P6 \4 D4 n; K0 e1 a
    1 d7 n! B/ R, `; D        同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
    9 \3 P0 \; g9 ~  S
    5 }# {3 U4 H* S8 ?; C0 {        下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。+ D" ]( u/ U# E, @5 v

    该用户从未签到

    2#
    发表于 2021-4-29 13:21 | 只看该作者
    or1200第一个裸机程序
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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