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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    废话不多说了,继续······
    * v$ O% v: x' e) }9 M+ V
    6 O, G- t" O" t7 y7 c( T8 l3 k' [        在我们的源码目录下是不是还有一个这样的文件?  D, H2 h. r  X* S4 V* B1 }

    - Q7 r6 Z0 c& E3 M  u 5 d; F) m3 s/ A& g% \  I; H0 a
      j) w* j8 }& h  Z& N% }
            在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。( r2 P% d4 I, Q
    ; p! M5 i" c% r/ E3 o- b" H9 R
            也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
    % n0 K- M0 w! ^' ?9 e! Z
    " Z( h* U: b3 R2 u$ o5 k1 `4 J8 v * G2 K* M9 ^, s- h4 o
    / o* F- k* P: e& G* k( i
            老规矩,把windows下的共享文件夹mount上去
    5 s. A: p1 T+ d3 }8 F* a% a
    7 e' L  R1 [' r
    2 k" }; ^' T3 y. C) L5 Q1 y. [7 n" s. ]! y% _
    4 l* k( z# H" c1 R& d& i! K
            然后,切换到我们的源码目录下,cd啊cd
    3 D& k* C+ z& l* `; q
    4 S& c" \5 }$ j$ p+ u, f/ L
    # s& U7 j, I5 D$ {5 \4 ?
    9 Q+ t! {/ g; @: x5 _; Q* K! T  a) ^5 k! o' W( K6 k4 T
            再然后,make吧
    4 E2 R6 h, i# k
    ) E% U% H1 K! `  M0 Y- i , v5 }0 o9 R/ ?, f4 ?
    $ o! }0 f: c  l# {. X
    % J, {0 u/ ^! @9 O! ^0 H& z& U
        信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了
    2 ^1 D: N; @" a  z: R% W2 w, E- I! T+ C9 n7 v/ I+ k
    1 @% e1 G( G6 J+ `: ?* c4 U- V
            再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车0 d2 p0 v* Z. }. X5 G+ o0 {# o* |

    , S0 U6 ?: A  ^6 A 1 j1 s5 E2 k: m0 J# K1 T) f/ O
    : z5 Q8 u0 Y; q9 P

    , b" ^9 I4 X6 D& e' J
    % N1 R1 ?$ b/ _" `" C! z0 Y        然后可以看到一堆信息出来了。) o) `- }+ f9 _( {. ?# Z+ l
    ; z, U2 k9 F+ c) C2 w5 ~, g& v
            其中包含我们在lds文件中定义的段信息+ [  Y  `5 h7 h* _

    % ~! ]' h. a- [" c. G# x & X+ y6 H, h7 _& t$ A& `8 n
    & ^! ?( C( V9 i1 t4 g( ^7 u' \
    1 ]6 G8 u! y7 }) \: c

    2 V4 K. n' h! G        然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。
    7 b0 A* S2 U' p% Z" N% G; F7 S5 H( j! P- D" h8 O

    5 n5 T, r  f! k3 Q# c  Q7 s- B
    0 {( b) O! m1 {6 W: d ! @: v3 Y+ ^* Q' y8 z  i

    + a5 b: G" [- o% s0 p        但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。! \" T3 u' j7 G* ?9 ^/ d/ V

    4 n1 k6 s  ~( h1 O3 N5 v. L        好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。' u. \0 j+ |8 T" k3 P! }

    4 s" u! Z, P& n  i
    4 _: u. ]5 e) L3 K. R- Z. \; x- d- j, x( u9 R5 [6 U

    * S1 f3 t6 d5 _( P. n: Q7 W  E8 C/ w: t
            然后在virtualbox的右下角中把下载器连接到虚拟机上去。
    2 G' [3 }* p" [" J) X
    1 O1 t* f3 G' z9 [% w( V5 R0 F( a
    % Z" d7 B3 S' _! n
    1 D0 N! D2 D# S# u; l
    8 s& S0 @% c( I" |( U" s! A& t7 c
            接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
    0 r- m. g' z5 x' z/ ~2 e" |
      L$ X8 G( Z. E/ V        好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊* w$ R9 R" h" j, y. [$ {  i
    + k4 b+ |/ Z# |8 I; ~6 I8 a

    - Y' E1 Y- t" D) U# T9 G  U3 L: |& L& e% i
        1 a6 R$ C; T+ M  x% W
    & N. @$ N( \+ ^* R; a6 W- h
            继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
    : ~' c' x  @) C7 }6 B$ R8 q. p( ?% Z: B7 y; A  N' q" ^& X  j6 V

    ( Z* _- E6 w: P* [. E0 |5 r   
    ; s; Y0 T9 E! m7 Z9 m& y
    9 T' T  T; K8 S/ `( K4 @0 K        上面列出的就是现在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的帮助文档选择对应的下载器选项。
    4 }+ h3 p% g6 q: {0 K& B6 ~4 ?# X
            好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器
    2 w, f' n; ~; ]7 i# z7 Q* {; j2 m5 U7 @6 A7 P  T; M  N

    + m1 E0 n* x1 G% l; Q1 I) h# t  E" ~; K5 q' u

    ; Y( a( [/ u  l2 u        这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了
    9 a( i; s. z: ^
    ) o% q' k& m8 ^7 y; W  U+ Z. ^: N, r/ [9 M# J6 Z
            再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb! N: N8 c5 W4 z' n% r( d6 r
    ( c+ L! d0 s/ C0 J) c; q/ g3 N

    * P+ g) f% p5 Y8 Q; ^, ~+ Z0 y) Z1 O  L/ |
    2 g* m7 |. P8 b0 d$ W2 Z

    / s, {7 J( Z: n2 L3 ?; ]7 g6 e# Y        然后输入file boot.or32,读取boot.or32文件信息  m0 |1 D" ~% l: \
    2 P3 g2 G9 H/ ^5 a4 p1 @6 a

    / {6 y8 l% E' v% ~3 s3 E/ s' v+ w8 r# X  z$ O9 K
    5 z1 B& i/ p' J6 \' `. p6 O0 u3 h
            继续输入target remote:9999
    # A2 e7 @. W. Q4 @* i0 c/ m4 [; Y. f: O* C6 T1 ^3 u

    & L5 M8 ]+ b1 Z4 U
    ' I! ^7 Y8 z6 b# H% ^; q% Q3 ?4 y+ L! m- ?! g
            这时说明已经通过gdb服务远程登录到开发板上面了。
    3 M+ J$ a' A& [( C0 Q1 Z. b
    % L7 ~- [: v- D) Z5 J
    # f# m% e' o% D" A; h        继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上0 {. _, A$ ?6 n7 ]  P
    % c+ s4 W7 L, n

    $ U3 q( B) n0 F4 g1 J- u  W. H4 H8 o# @7 o/ _% v* d
    9 [# |8 j% f  \5 D/ [
            同样这里也出现我们在lds文件中描述的段信息
    / t. j0 S! f9 d6 D
    ) s9 _% [, v/ v3 y* z7 |- N: A
    4 b/ b$ q/ s) H7 P) a4 [9 F        好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
    : b4 [' g. G3 _; W5 Y- {
    0 [# L" U3 @  ?) W- ]2 F5 \0 e 8 q% f( n; ?. n7 r' O

    * X3 \6 \, m& a, Z
    $ O4 a! X& W* Z        好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是
    0 n* d7 U, o2 G; B  I/ P, k, Y- e# C5 w
    - w/ A8 _  b. o2 N& a/ Q7 b
    / \( j6 {! s1 }! B, S+ d3 i" ^

    - n) d) v# |' _$ r! S7 b        波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。
    0 e  X" f) j/ N2 n( v2 H8 n4 m, l" v  n# {% F

    # N0 _0 }9 i- {        ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c2 ?6 S) u. R& ]  P2 k& g4 a8 z" S0 P

    . f" i0 j5 G7 I) ]
    1 C8 l( W1 z3 o7 f! v$ [
      ?" l7 y1 P6 B' j8 {  F# P/ E6 R5 s2 q$ D
            然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。
    8 o6 K# h, O# W) i1 @3 E  ?
    ! W* ~- Z/ I9 A* |5 n) @ 1 ]. {; Z( k: f8 T
    : X" J* Z& q% I. T! d5 Y% z9 v) z
    . F1 f0 E: f6 G4 H
            哎呀,有了,妥妥的,好了,第一个程序就到此为止了。
    5 r( _1 b' \5 N( l+ w
    1 M# v+ A" p' v        接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把
    3 o  Q8 e8 h9 P# M* W6 e% x+ X5 w3 i% c" M5 ~) J3 z# R
            minsoc_latest.tar.gz
    9 {, ], y1 D! @9 o  X: v8 n
    ) V* J# Z2 |  D. N% H4 s: u        or1k_soc_on_altera_embedded_dev_kit_latest.tar* a& g; T% d3 D

    / i: {, x, e" S8 B  k- L        orpsoc-master.tar.gz& T* b; p# O/ c& w2 _
    , z, _6 L( X7 e& c% ?5 O& P
            这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
    ' t6 T/ ^7 y& ^4 o# Q! Q" H. Z! C6 ?/ s8 N
            同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
    5 d- T; {- _; p6 T7 g4 `% l( H) \4 Y+ Y
            下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。; Y1 n" j' t- P- X" K& ]+ {" P

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 15:39 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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