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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    废话不多说了,继续······7 j! p" K- ]! I+ w' F4 k/ b
    4 y5 k' H& k) s+ \& t. t
            在我们的源码目录下是不是还有一个这样的文件?
    0 _! X4 g0 v8 U+ {6 K) \7 @
    $ u  N0 C$ }$ K2 |# @/ b! U* N 0 {' g2 R( b* [9 b7 l: p

    * M2 c/ R8 w4 B4 Y        在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。- i% P% j1 t2 \9 f4 ~7 L

    0 e9 f, l' V& n$ T5 y$ L        也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。9 Z: p, e+ i( E2 n8 X

    0 x" _! G6 P' ^9 z/ k( e5 } 4 K3 J, K1 @7 {" J

    ! V+ ~0 |5 c" Y: B0 {        老规矩,把windows下的共享文件夹mount上去
      ]. m9 X. A% [# v! y7 p3 |# |  z3 w4 P4 P5 p2 Z! H

    / K& W& \; o6 ^( [2 V0 m. ]: E. r' L/ l/ b, N6 I! B+ u( U' Q0 O8 c

    ! @4 d* ~: {$ H& _        然后,切换到我们的源码目录下,cd啊cd6 K. D- ^) q( r- b, Y7 \1 ?

    6 }2 i1 b* z  j
    6 T5 l& m6 E2 }8 n. t  P
    ' C; I4 M- h. Y6 L0 j: v4 t
    + }+ y: U% d; k% H$ {        再然后,make吧6 ?7 J9 b* X; \( w# @& o

    ) E* g( i1 N8 M
    % q: n3 ~. l# D* M* ]' h8 y' h2 [' T
    4 l4 j& D/ u+ M
        信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了
    ( ?0 \% L# x! Z( p% I+ b; `
    * N9 N4 v" r( W" ?, {2 P+ y8 C
    $ |$ O+ T' q& ]8 i2 W9 r# {        再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车  l) C; X" U# o$ b3 o: U  C

    2 {/ p: O- c5 _6 c , r. G" P, g1 B8 e  M4 E4 v

    3 T5 i/ E% S5 L . [4 a$ W7 s2 }6 M' G, `' y) E

    ! Y- x! s9 ?6 U! x        然后可以看到一堆信息出来了。
    5 i. A  _5 ?7 R7 [, z) G9 l" @) l! A4 n7 y& v9 T& [
            其中包含我们在lds文件中定义的段信息
    * w1 {# {, E% M) k1 `# S9 q
    - `/ b( ]8 U9 z# s2 e7 e/ P
    / u. l8 I* Y8 b" t
    4 C+ k8 E/ W% R. }0 g
    2 G, B3 {& N7 t2 ~6 g" h
    ; r3 a! V* T  O5 f* n( s        然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。
    2 S! c: |( ?1 `8 w1 ~0 X& l4 M, A0 x9 X5 m1 P- \( C1 B  l
    : a  w/ M! S% t' m
    , g0 d9 M3 G; M5 j4 P" c! u5 P

    ' Q. {( k3 u0 s9 O5 W7 }7 Z
    $ Y! D9 p" \) k, g$ C/ t        但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。8 d" r) G% v2 ?. c  F% M6 Z9 j

    , e# R9 |2 Y+ I, M        好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。. j% ~; p% ?' M( i3 [
    ) V2 u0 W" P  {3 f
    " p; V/ N/ {1 L

    7 F9 B" T* c: D3 f8 H+ L : ^9 |, |  n. D5 u2 f4 s
    + s. M% n  I' w- M. C: {
            然后在virtualbox的右下角中把下载器连接到虚拟机上去。
    . k0 W3 g' x7 R( d+ B; I9 f$ B7 W
    % E+ X9 H( {- S/ |, a9 e4 A4 q
    0 }; Y! d$ U: t/ F; {! U7 p# @
    8 ~. T) o* n0 I* `- V9 l( H) b+ H
    0 \: m$ Z' z; n, _1 F8 _" W
            接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。* C9 B$ g2 _' A8 Y! i
    ) @6 D  N% N+ E" P. C
            好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊
    " f% L/ j2 d7 h
    2 e2 n) M8 C8 T. Z; r& s* x
    % o, o: t+ `7 C/ R1 Q* D( x; q  N# U& i% R; Q
        & X4 E' l6 j, j3 P* d& L* d

    6 o& Z0 B9 z: ^& F# y' k3 o        继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
    , }5 x7 x0 S7 y/ a2 w" {( L4 y
    4 W- u4 ^% D% e5 a4 v' ]
    9 d4 _. ?) \  S" o- \+ H6 W   
    " C6 ]2 M8 l) B% t
    ! I4 E; \; _/ w- y9 r7 \7 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的帮助文档选择对应的下载器选项。) H  t: }) t( e6 p

    9 p* h7 [" D: z9 ^# z* d        好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器/ U5 b/ ~! D3 D: s% U: z
    0 c# Y6 J6 q0 ~. Y$ B5 d: N

    8 h0 i/ H( C2 E3 C1 V; O$ u' k: u/ d- r

    ! n9 H( d5 ~, }: R7 u$ ^5 d        这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了# i* l3 r+ b! b' j3 M( ^  I

    . E3 z  ^7 d# s7 ~' B) W* W; H' N8 e- r
            再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb
    . i% |) m4 N! _; e/ V
    % m: v8 A# O- E" ~2 v& g
    9 J; M3 B' h. {: g
    2 T! p, r# k$ X* Y" ^1 I   k) \& D, I! {* l- Y
    ; n$ c& }  A4 N: E2 k
            然后输入file boot.or32,读取boot.or32文件信息3 J& c, F  ~0 h2 g  ]  e
    ! X! v' `3 R; O- [  l

    % ~& F; t2 l3 |1 I
    * {1 B8 V$ p3 P$ R
    2 q: }' r8 f: a) I- Z        继续输入target remote:9999/ k" q) Q) V) w0 w6 G
    4 i$ ~: y# n: e" V

      h$ N- P% ]7 R  `4 t2 P$ h% l9 V( T" s/ c
    ; K% P2 o: @$ I: Z! j! e9 y5 u
            这时说明已经通过gdb服务远程登录到开发板上面了。
    ) y! `, Z! s3 i1 j5 w
    : ?' i5 y4 [9 H/ s7 }+ Z, s) |% Q! }" _' i( m0 ^3 K$ E
            继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上
    7 T0 H6 [% \; ~3 c" z
    + q. a5 w: b1 X/ g4 S5 N& t4 V6 N 7 V+ j: o, b2 Y: H
    % O4 p7 {4 L6 e

    & [1 v9 a1 E$ ~9 Q# R( _        同样这里也出现我们在lds文件中描述的段信息
    7 i0 j0 i  U5 ^' s6 v) @1 ]; z" q% C9 ^1 M
    3 \+ k/ O" X" h9 H3 j
            好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
    1 q3 U( Y, N/ ?! I. j
    $ L, z9 q1 Z4 _1 K: @# a
    # h) N. t6 J8 U  v# d# ^3 N  a
    / ?- l2 _: `6 Z/ m8 E/ H: q
    ' {6 ^3 q+ e" f. C+ d        好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是$ y" a$ Y4 Z8 e

    , x" k/ n; f3 R" ?
    * {: m! U5 L+ E% u8 f+ x  g
    ! z% \. r! P% b8 C- ?! i0 t
    % p. f5 T$ |/ I; H) n# ]1 a        波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。' I- ~5 c( E" C2 p! B9 ~
    * `# K3 a1 Z6 p9 x8 U4 v( x
    % q$ W) A% G& i8 B
            ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c+ ^9 V0 N9 [" r8 T6 y- K3 s
    * a8 w2 A+ H5 `5 \/ Z$ \

    5 ]* {) j. {' D# b- L/ O- _! s7 F6 A1 f  v8 M
    4 [. V4 i5 y& g0 ?- u
            然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。
    % G! N, A- I7 ?, L( _* Y
    1 A: B1 o3 S+ H5 ?" v / i: {1 e' [- ^& L0 H

    ( y) z+ E) B7 h6 Q! E9 Y
    , |" e" p& u+ ~! k0 W/ V        哎呀,有了,妥妥的,好了,第一个程序就到此为止了。/ ^7 L0 C3 q6 \$ Z4 [

    + z( O* Q% c4 B4 e+ O        接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把
    5 ^- P" X0 z& r; w% H& K
    1 X( k$ ?' S) V! q5 M        minsoc_latest.tar.gz
    , l" |# X' G% |. V, n" I& x+ Q( q7 B$ e! ]* G# n$ |( i1 B2 J
            or1k_soc_on_altera_embedded_dev_kit_latest.tar
    + O( ~) p' n. W8 U' @8 k
    + `. Z/ K2 Q! P7 [        orpsoc-master.tar.gz: w5 ]% D# b6 G; ?4 L/ P
    8 ~  X9 |  O7 E1 I3 b
            这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。# [5 G6 i, X5 x" _3 p

    ( Q" L& l+ v# P+ e) x1 ]        同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
    0 o! S1 Z* a: E4 M/ T( V: l! J/ o$ P' \5 N7 l% ~$ e
            下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。% w" h# s/ g5 i# X3 i

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 16:03 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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