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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    废话不多说了,继续······3 \# t* [: P# S4 z- X9 G8 Z/ \

    ; C1 W% D  ?; s7 w. R( a4 F        在我们的源码目录下是不是还有一个这样的文件?
    * {5 K3 |8 x/ c( b3 N0 @
    6 T) k" M! X- H  [: E# {7 ~ . F3 ?) X! i9 d# ^5 q

    0 [+ J( Q& B( N0 [. J        在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。
    , `2 o* U$ G/ \- ]3 T. D3 K  f4 e# y
            也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
    5 i6 F& L& O# W  A2 h: p, l6 _6 g+ o! ]

    $ H$ p9 F, O* a- e
    4 Y- d# C0 x+ \4 `8 r        老规矩,把windows下的共享文件夹mount上去5 n* g5 N# R, l) s
    + |. F$ G5 Z* ]2 `7 s0 b' B) ]. z

    - l, ]3 z& x( N8 H+ C( W
    * \0 r; e! W$ f" Y6 M* f4 ~& s7 X# R
    5 D+ |; Z+ E6 \, z& a9 I        然后,切换到我们的源码目录下,cd啊cd8 z7 R* ~9 I# ^, h. \* n

    : P1 w' {( A1 C' X5 V  m
    ! p3 }  K7 f: V. z: i# R0 ]+ L3 b+ I2 w3 u3 Y

    3 l; V" [5 }9 @# d. A        再然后,make吧% h/ ]; y- i) f  T
    # ^0 r6 G6 |2 w& L* b' t- K

    " r" Y3 C/ J, L8 X: m5 b3 U: L8 }! G9 _: ]( H% _# U( {

    ; V4 L( Y3 r' Y4 J7 X! {    信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了
    - U1 C' W7 V, e1 ?& N! y4 z, b3 d5 B0 i3 K' n, ]# h7 M

    - C1 K1 E; v# S        再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车
    2 ?/ f4 o+ U0 X% _" V, V5 K) D/ o6 h% E- k! L, `$ s7 @
    8 `  c: V- p, |7 D2 U& [

    . _  o  M, C6 f8 d- n: v, X
    2 ?& {) m# k4 w1 H: w: R" l3 X" _
            然后可以看到一堆信息出来了。
    8 L! B0 F! v( m7 v# @- g/ u5 Q, e+ k
            其中包含我们在lds文件中定义的段信息
    1 d7 k' ?$ w/ O2 [; s8 e" d. e8 s' P: _8 v7 F6 P4 P

    8 X+ H) R* h, @4 g" R# P7 r" P$ v, }( e; [! r0 u

    3 N8 V, o; {* }8 w7 \, F% R( t, f! o3 H3 Y( x6 h3 M
            然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。& T3 E2 i; U; ^3 O
    4 U1 N. t+ O/ N' }+ |

    9 Q: `. I  }: e: w% P" x/ U7 Z; K1 u( `- _6 t' |7 F* g2 e

    7 i4 h( x$ t% l# P6 E( [  E+ J. a2 G; X. T
            但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。
    9 a+ G3 y# S( e/ P! l3 [) ^
    1 e2 ^! B3 f; X* }7 E6 R$ V# s        好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。" o. E( ?+ M/ f0 k* U3 m# _

    , }  e. w3 Y, _' N
    ' M2 U. t# X! G/ z5 @
    - F! d% i' P9 N 3 |% w# r# r3 F3 z4 }. l

    " u4 K: f/ l& t9 E0 w. u        然后在virtualbox的右下角中把下载器连接到虚拟机上去。  E/ y! D6 |% o* @4 t6 a4 h) P: W, a
      ^6 W& Y% b  q1 O! l% \; A9 e0 p" K$ B

    & j; _$ d: t- s3 T& K3 g+ C5 J' w& f7 i) I. Z! R) D. t- i
    ( S5 A( b8 S3 M2 T
    ' H+ u4 }  K5 P* R0 R9 I
            接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
    & y2 O/ c+ m5 N0 a$ q. P% t9 ?( p
    3 W: {/ X" G! i1 z        好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊8 A1 O! F0 Y0 o5 ^
    ) K! D. {% v' v8 s: c! k/ b, ]
    $ J. |" Y$ g& w

    . ^  n( z7 P) _. t/ w, Y' h# ?    1 n. `, i& U# n; x' e

    * U: u# v  k. d8 d1 s; T" i0 p6 ]0 Y        继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
    1 y9 u( r% y9 e% B( Q0 d8 I3 o' n
    ) F) }+ v8 M0 a9 r1 i( X9 U
    " R$ z' ~1 ^3 c5 C   / i6 `8 j8 O0 b# [: c' E2 s7 K* y

    3 r; {1 Q: [5 C        上面列出的就是现在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的帮助文档选择对应的下载器选项。- B9 d* F2 B. X  B* B& s) y

    9 |' ~  G6 Z6 N- U8 ?; ~: O        好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器+ @5 Z, j# v$ m# ^; B. E
    5 n1 C* S: U- [  i% N6 [
    2 A" |4 @, f2 H( K; r

    $ \/ i+ C/ E. R6 l) f! _
    % T" l6 f6 a8 I5 x& x0 T2 N' u        这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了% M1 q3 r8 Z3 F6 |$ D) q! v" W

    0 v# X% `* N) ]9 P+ f& |. Q. z5 q9 p: k# F
            再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb
    0 N9 b; ?4 f' y" L/ l3 L1 ~6 @3 P: U- ~- C2 ^
    5 r0 i& }4 O' [* D( |! M4 n; G9 o% N

    8 i3 R4 c. ?8 V1 z) I1 I
    + B. d) i0 o9 i2 o" C; O3 b6 {  c
            然后输入file boot.or32,读取boot.or32文件信息
    9 h" ^) l9 H3 {8 f: W9 ]  M4 B
    7 x: N' y8 s  ?2 |
    . {$ O% {% z) C/ w7 s" X5 \7 f& q& N
    : O) q% B& b% B3 e3 D
      [, F% N$ q& m* [        继续输入target remote:9999
    ( N* H- o( ]5 q: n' A' `6 d6 `. m6 q" u8 |% B

    0 U/ q6 }  y) W+ l
    9 \, D) A% o. `. g
    $ M- ?. `2 O5 D! S        这时说明已经通过gdb服务远程登录到开发板上面了。
    & S0 S# h# i( |8 t  G3 X9 a
      S( o. P) h8 n$ ^3 b0 @) e# D) g& V1 [# }
            继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上
    . U+ a+ B7 R4 h  @* Q7 N8 ^0 b- V  q  z/ Z1 L
    % A* g& i7 h8 t( R0 n

    . O, e4 D; b) \
    0 E2 J) l0 _1 f        同样这里也出现我们在lds文件中描述的段信息  U  T( g% d$ j
    2 K$ r0 T$ Q: W% n9 z
    ( R1 s- X' b1 [. ~6 i
            好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
    ; K$ x5 {: K& [1 g" B, p8 O
    ! f) G+ k: f9 s1 y( C
    0 T% g4 Z! I3 C. r" {- T/ }  F
    / @) M* H6 }/ V. ?0 l6 g1 b6 k" ]+ F6 q* e
            好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是
      |: `4 ]+ J+ o# C) c' g1 \! n5 e+ I" U5 t* \* F% s

    % X  C$ C- t; e0 q8 G2 X: i7 _
    2 I1 Y! `3 s7 F" U) Z1 S7 X" l1 q% l9 Y$ t. L
            波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。
    7 S3 |2 G, e7 Q/ \3 s4 a( G) Q2 x; P( ~2 J( G; e2 M' z

    2 v. e& f; n. N! M4 \/ g0 h        ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c
    0 L- E1 K" b' W; h5 A! T& i+ D' c- [2 h) m/ w
    ; ~+ `, J: \) l) d8 n2 k
    9 k) n$ I1 D' u

    8 K9 I8 ^; r: l0 R) T1 F        然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。2 I2 A: V7 `& k
    - u; E, |( n' x: Y
    / C* [9 h, J* a+ O; [4 @# k

    : k1 t+ N* e/ i  N" M* m4 E6 r- e1 k% D* h1 E
            哎呀,有了,妥妥的,好了,第一个程序就到此为止了。
    7 F9 h3 ?% A# u4 U# u4 l1 Q) l
      |" Y: c- l# I: R, A9 a        接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把+ D8 T4 a6 ~+ R) _0 D6 l( g1 z0 G
    , I5 D7 m0 C6 |" C
            minsoc_latest.tar.gz
    0 q6 U" z. B% h3 Z) L3 E* c- b" p# }' o- Q1 z, w
            or1k_soc_on_altera_embedded_dev_kit_latest.tar( q+ x6 I; l1 q+ X0 I, m- {* W

    ; G3 o* J8 f6 z        orpsoc-master.tar.gz9 w$ ^% h6 N$ j3 A; _

    # [0 H! q8 K0 k        这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
    0 U2 m& Z+ f" Z" }1 q- B  \2 _/ a4 y% c; L
            同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。6 h: M2 y( E# t  D. t# S
    . f. L* q, u: z+ j/ c. E, `
            下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。9 i+ U! F) K$ [$ e8 t* E7 R/ F

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 17:13 , Processed in 0.218750 second(s), 26 queries , Gzip On.

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

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

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