EDA365电子论坛网

标题: linux学习之路_or1200第一个裸机程序(下) [打印本页]

作者: mutougeda    时间: 2021-4-29 10:44
标题: linux学习之路_or1200第一个裸机程序(下)
废话不多说了,继续······4 L3 [  d, j1 F1 C4 T3 Y9 w
: }* d# a4 w% o  |1 A, n
        在我们的源码目录下是不是还有一个这样的文件?! ^- t/ C$ |' A0 I
: o8 e: p+ S: N1 W! Y( X* A
1 T0 W5 z# F/ K. E# d

7 e6 v4 O" i, T: _        在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像arm架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。
+ d8 R6 i0 g' o6 l# ]4 \7 L% G+ {+ w( M9 Y1 T1 {
        也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。9 Q' X" L: N. j: y2 ]% R- E% s

/ f" a# z* y7 l" U$ P 2 B1 ]! [( o3 c

/ k6 R2 z0 V  F5 V2 \* S        老规矩,把windows下的共享文件夹mount上去
5 E+ Q# n1 E* o0 j% L
( d' Y! L) c+ p+ K, E) K
6 ?/ F( I  V! _' L
$ p2 ]1 W# y) r" @2 g' M0 e8 K$ v# G3 r7 Y5 m
        然后,切换到我们的源码目录下,cd啊cd6 q) O" `* t( G5 W8 d4 B$ K

. R5 n9 h; T( p2 f* O
, }: _( r# e! U) [& z1 r+ ^; D, m+ n( c4 n2 w! R

& b& s* o! A- t( q6 a        再然后,make吧
% q/ H6 ~! d6 U* X3 [' I+ ]6 j5 y1 m7 r/ q

5 w8 `. L) w9 d( z1 z: D# f3 q9 e5 a* d' ]
6 f9 D/ E/ Z: d8 S; z
    信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了. b: W: I/ ^0 j; ?' V
+ T' i/ O9 c* F2 i

- R$ c' `7 s1 D- |8 q  m# `        再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车
# s: u4 C+ \$ N* j' _4 w% Z" ]( z( M
& |4 z3 v8 r! H% y. |' v3 A
1 `. a1 J4 i! N8 h$ j7 z- e  g& R* k! N5 U
2 N7 j6 H6 o* {/ [: [

  g3 Y8 r( ?* w7 I& d" ^        然后可以看到一堆信息出来了。( F; k1 U/ d: e9 `
9 [; h, s% J2 L, p" b
        其中包含我们在lds文件中定义的段信息! j* Q$ S' ^$ q

! E& s. E3 m) ?/ e
, C5 I" C; Q; d4 i) ~' g. M
; Z0 z7 S$ L& C& _; r5 T % z7 q( v0 E) z  Z
4 j8 N0 N1 T( D: ^
        然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。. D( z% \. |  J$ O- c
  ]/ n5 ?  J- ^

; z! I9 e2 H+ B& Y) `7 o0 L8 |5 R2 E1 q! F+ r, }$ U
5 t7 o9 R% A; k; O2 @# F
2 c8 B4 e+ i6 I/ ^2 R/ T
        但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。
8 d, |' o! h0 p, U- X
& H6 }( D0 B) z4 L; P9 e$ i' ~" Z        好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。/ ^: [/ c& p! B( R. j
. t+ U# K; T" L3 Y) o

) h: _1 X* B0 k( ?# ?2 d0 s# e" U. Y  \' b) k- ?5 }
- J, I2 j7 j) x9 V3 ^2 \
0 x/ ~( p, T! G2 O* X: ?5 K( n, x
        然后在virtualbox的右下角中把下载器连接到虚拟机上去。; U4 p* O7 u6 _9 v2 z, ^
: q" K9 v6 e, i. r3 C1 a

6 E7 S- \3 P2 n, J* P
" U/ b+ R* ]  q5 z / A- ]1 L- i  Y
- I" I7 D4 c5 ?; n$ i' {
        接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。1 C* p1 y" U/ ~8 s9 f% ?1 u/ h: v

; w8 F# p, a9 o" J/ f9 w        好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊
5 m' x1 w  Y2 d( t" K: P: U3 m0 \) F" ~0 y2 ~" V. S7 w. p
. C7 Q4 P# m" k3 m2 s! F0 c0 i
# k1 O$ o: z0 z& _) h
    , V" e7 x- X$ h( c
) b( J- V+ u7 [# k* N! W8 F
        继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
- F2 {, e' `( e% e5 o9 K9 C' [1 z* `6 w& r7 p& ?3 k" U% \: _# r

1 u$ F4 `. ?/ E9 J) F   0 T9 U2 Q" x- f( q; ?7 v2 @4 }

" d! X' q% d, X9 `; I" b        上面列出的就是现在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的帮助文档选择对应的下载器选项。; m) E' A, K3 m* d  Y9 {6 n

3 R3 h4 M9 _& F/ n! L: y6 O( z0 B        好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器
# K: ]8 f4 X. R. a& C  o$ M/ {" P9 |# i, T' ^: B$ F% `

9 w& T0 a4 a  n2 L( t! n
% I9 _' G( j, Y" ~. j, r1 u3 i  `9 R! b/ q' S" N7 W( V
        这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了0 }1 f; ?7 _  M: v# J

5 c0 @1 J' }  ^1 W' p- A8 }5 X8 m- e: _% O9 ^
        再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb
6 F7 ]; n8 G3 r
4 V* x- ~  p* Y: ]" N5 o- v* a 4 o5 L8 Z  Z$ Y) B$ R: `- D

$ A+ N4 {5 G( G; M' p
/ E. k( x$ e) k2 S0 a0 R/ d/ y7 S( U6 }
        然后输入file boot.or32,读取boot.or32文件信息
3 z! f. C3 o0 {
% Z3 \( J$ E& J $ G" [0 w5 t$ U" c; E: `

7 N# W" \7 x2 o7 x  I% ]4 A7 r; [; A# ~& o! y( ^
        继续输入target remote:9999& L3 N4 i# Y& q, B

, L+ T, Q: V# k # V8 R3 A6 K+ {
8 d2 ?' w1 k  e% T1 ~, Y
- K$ ]0 e1 P2 ^( ^: O9 f& A( ~
        这时说明已经通过gdb服务远程登录到开发板上面了。% H; ]* i* [8 K4 t  y# S2 u
9 `, ^) x" p" D4 a% J" v7 z
3 l- p+ N4 x1 k- h' u' S
        继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上
3 y& _8 f7 ]2 ?7 P, i( }8 H5 F2 y1 ]7 W- k8 i9 E, [1 E5 U

7 Q: j; N% c3 g1 H. r" r1 k" |( ^0 m9 D4 J* O4 u7 t

& ^9 W1 j* h7 B- T2 {* C        同样这里也出现我们在lds文件中描述的段信息$ a, X3 C4 k$ \/ [8 }& ^4 s
) d, t! h2 @7 d) e: W* m" ^
0 V6 b# t* v3 _& V0 q
        好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
7 x" K* Q. U' T) m
" E4 @4 p) l- a0 W" ?; j( m 6 X2 F6 C$ i8 z- K/ ]( z- b# [
" ?, W# ?, E" ^0 k5 M

  Y& Y  e/ B0 c" w7 Y, y6 _: t        好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是; t$ k9 H" y+ P; t5 M& G. b! o' {

4 w: x$ Z1 q+ X 7 P1 C$ W  k9 u7 s# i
& k4 G5 `5 L: r8 O' q  O

2 z5 `4 p" i4 Z' {; |( i        波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。: p$ {( r) M6 M& F4 [2 C1 V3 \

. P* V( g, H% ^. P' l, l! Z- n* P
; R: u5 N# g/ L        ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c6 G0 N) j" P4 ^$ l( w5 J9 P7 ]

9 g+ S" P0 G% q4 @3 T6 `) g  ~* g! @; m
# C. W8 ?+ m( {& c0 y" M# m  a! ^  Y- L8 D9 Y3 \4 J  H) _
# G$ n" E4 a% m1 Y
        然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。; }/ F: Y2 k6 h% ]" i

: o0 c, }1 b) j6 y8 m& P1 q
/ G$ c+ \% b9 Q
' V2 K4 _' C- R+ |' h$ o
( _. v) [: Q0 Q; K" E+ k        哎呀,有了,妥妥的,好了,第一个程序就到此为止了。/ Z% b' s/ x4 u2 |( Y+ j
5 Y2 V! Z8 o+ N) e- {
        接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把
/ S3 d) R& h" J- `$ W) n+ R& g/ A! i5 {: Z9 a
        minsoc_latest.tar.gz
, {: N. v, y/ s+ S3 D2 F% V! L# B5 j: D! I: m5 h* [5 l' Q8 J' T/ y4 Y/ V6 V
        or1k_soc_on_altera_embedded_dev_kit_latest.tar9 u( l) f( W( g1 m1 ]5 C3 x( [6 R  L

/ G1 y' l% G3 a1 a2 P        orpsoc-master.tar.gz/ w# A5 P# `5 q: e

$ S. o( z) E2 x" Z# p        这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。7 }1 u' w; e" Q+ a2 x- g/ w

# J  K7 ~& q7 m1 L        同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
- P3 K* I+ y, U
! |/ V! E0 a" D* M1 x        下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。
1 B- G1 q! |- {& ]* ~
作者: CCxiaom    时间: 2021-4-29 13:21
or1200第一个裸机程序




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2