|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 R+ f- P/ c1 f j- S引言
- m y3 n8 @7 x+ J9 ysimulator,顾名思义,就是用来模拟硬件系统的,所以越接近实际情况越好。我们在实际下板测试时,启动linux之后,经常会访问主机上的文件。比如我们写完一个设备的driver,生成ko文件之后,最方便的加载方式就是用板子挂载主机上的nfs来实现对ko文件的访问。 8 \$ N& e j2 u# d* S; P
那么,在用or1ksim 模拟linux运行时,linux启动之后,如何访问主机上的文件呢?
6 ^& M# z4 `! r: N ?: n本小节就解决这个问题。 & l+ a }8 M. o; b$ z
# ]3 H( a$ l; _2 |6 O% Q1 {+ k4 C# ~
8 ?# ?% j- s {$ e+ @/ R, M1,基本思路
' W$ P; M/ b Q% }和实际板子相同,仍然采用板子挂载主机的nfs,来实现or1ksim和主机的数据交换。 # O% D4 q7 w; V
由于or1ksim本身也是一个运行在主机上的软件,or1ksim中的eth也是虚拟的,所以如果想实现or1ksim挂载主机的nfs,首先要保障网络的畅通,网络包括虚拟和实体两种,板子挂载主机采用的是实体网络,or1ksim显然要使用虚拟网络。 9 z3 X1 m4 ]1 {( z6 ^" o
这就需要建立主机的eth8(我的虚拟机的网络接口为eth8),到or1ksim的eth0(or1ksim运行linux之后的网络接口为eth0)的虚拟网络通路。" h, A/ z& `4 ]! M9 V) |. e. W+ {! M
5 e" ?5 @2 [# Q% V& p& g整体结构如下:4 G9 [ n+ ]8 ?% d" ]" o! Q. I
1 o* X# m: b7 x* N* N
S% X1 j6 p8 n3 B8 i
2 A9 y# E! C; S# M
通过阅读or1ksim的文档,我们可以知道or1ksim的网络的外部接口类型为‘tap’,接口为‘tap0’,这个信息也可以在or1ksim的配置文件(or1ksim.cfg)中找到相关信息。如下所示:
8 G* }4 C& v0 Z' j/ X: ?or1ksim.cfg:
% H- v( l4 f" {) ^' g; z3 E$ n( p
- section ethernet
- enabled = 1
- baseaddr = 0x92000000
- /* dma = 0 */
- irq = 4
- rtx_type = "tap"
- tap_dev = "tap0"
- /* tx_channel = 0 */
- /* rx_channel = 1 */
- rxfile = "eth0.rx"
- txfile = "eth0.tx"
- sockif = "eth0"
- end
/ X: m7 p/ t" m* C8 |% p 6 T5 F* S! P& P, T0 u
7 g8 L s1 S) ]; v* W; d) r9 P
. @8 l4 @* F3 ~8 L, s8 _2 M1 X' l1 c, R& Z' e- N1 q' [
所以,我们需要建立一个网桥(bridge),建立eth8的虚拟访问端口(tap0),一旦建立了tap0,or1ksim就可以通过访问tap0,来实现对eth8的访问,也就实现了对主机文件的访问。. `# k% z- Q7 g Q" p
5 v$ v0 t O+ w2 ~8 N
7 z2 [! b# h7 _7 |% T2,实现步骤0 p3 v, C( V+ K' |2 b: M z
了解了其工作机制之后,我们就需要搭建eth8到or1ksim之间的网桥了,步骤如下:
7 R% I. n& U8 C' z! D/ \; K* [: \$ V
1>安装openvpn5 [, O! x" O! k6 b& m: h
! l# I& C* R- N' G; E: V' u
# J2 a' O9 Q) b( G0 ]sudo apt-get install openvpn
* W. i2 q2 \- x& ^5 s2 \- v3 M3 e m: ^5 X
2>安装brctl' {+ J) g- G% V, i# G2 b
/ l8 K( P7 q, _' t$ n& ~
; y9 n% U5 ~% L- T
sudo apt-get install bridge-utils
, l, Y9 ~- E- ~, {) m
- ?9 F7 n5 T) H3 s7 B7 Z5 ~6 C" V7 j1 X/ Y% {* |4 k
3>创建bridge
) G& E' L7 M1 f! t+ H5 m u' u在安装完上面两个tool之后,我们就可以创建or1ksim访问的tap0了,这一步or1ksim提供了两个shell脚本,一个用来创建,一个用来结束。
1 [9 e" w& v# g& T( e4 E
5 l: X" L, T F4 Z T$ B创建:
7 f' l P. K, s- g. }& h7 p4 m% K" o* ]
Usage: ./brstart-static.sh <username> <groupname> <bridge> <eth> <tap>
( Q! t! y, u& X* Z* I% `9 r( R/ H7 t6 \$ c7 B+ T
sudo ./brstart-static.sh openrisc openrisc bridge_rill eth8 tap0
6 t0 E; T4 Z4 P' }/ B. e @2 A# N+ P+ U/ Z- j+ j" V0 B2 W& |
这里需要主要的是or1ksim模拟运行linux时,其默认的ip地址是192.168.1.100,所以在创建tap0之前最好配置一下本地的ip地址:) `7 g' g& z6 p* Q/ h! B
5 I) l% B5 c% }
/ f- H( w6 |7 i$ |7 k; @' T9 nsudo ifconfig eth8 192.168.1.1209 y" J0 G2 H7 [6 q# d- v7 H
. h) D7 R; ^' S+ O$ z3 k结束:
- J3 j& ?; N0 ^& H7 w5 ]5 b+ |Usage: ./brend-static.sh <bridge> <eth> <tap>
7 y+ a; H7 w1 K( g" K/ O" n0 l4 K) S* c$ u4 D
如果想结束前面创建的tap0,可通过如下命令实现:
6 I$ Q' }$ M- x: ?7 G$ A3 j6 b3 vsudo ./brend-static bridge_rill eth8 tap0
' k N. O# y' n/ C) @8 l+ p* {' i1 f5 l. {
创建tap0之后效果如下图所示:
: H( V, U; D2 Z9 m+ l$ _. q4 S" h& C# Q# f
: P h9 ^; z- j7 z# X, j& I# f- P1 g: d& r' L" `$ V7 }
: Q" k6 [+ p+ r2 l3 O ?1 }" X
4>使能nfs server8 E+ ]6 S4 m! v6 r/ k7 P
在创建好tap0之后,我们还需要使能nfs server,以便or1ksim访问。6 Y, _" m; p9 ~, d/ k, R) V
" j5 T7 c/ X/ {9 T' I g) V0 x# D" j" S
5>用or1ksim运行linux
/ K- E# k8 R4 |! T+ \+ l+ |9 E一切准备就绪,我们就可以运行linux了,命令如下:. c# N8 j5 p4 G, A$ X3 p
$ {! D4 Q4 ?: q( Wsim -f ~/soc-design/linux/arch/openrisc/or1ksim.cfg ~/soc-design/linux/vmlinux
! |, [1 H) J3 t5 s+ y B& S8 c6 W5 U* g# B1 o1 x% ?% _/ H
$ F- I( Z% ?! G3 j0 C" H
6>测试验证 D3 Z. H5 x& g) n4 k
在linux启动之后,我们就可以挂载上面我们使能的nfs server了。
6 U5 q3 p t; @& h7 ^3 [4 J& j
" x- _2 @/ y. \mkdir nfs+ O# L9 t0 ~8 t# |/ R% R4 l
mount -t nfs -o nolock 192.168.1.120:/home/openrisc/nfs nfs
0 [; a0 I8 J8 b
+ i' y r1 Y* Z. M! U这里需要注意的是如果挂载失败的话,可以ping一下,确保能ping通。 # N8 u$ `/ Y' G, S/ q
如果一切顺利,我们可以看到,我们已经可以挂载主机的nfs,并可以访问主机上的文件了。
0 B/ q4 {* A/ j, i$ R) V( u( \6 Q, s6 ?! E- c3 Y( h
如下图所示:
8 h G; B) i6 B, _
. H( V! u- b% F+ F8 ^& \! p
" s& h& \" j2 p9 u" c; {* k# C
+ \1 O7 m3 ]3 D8 N+ U: F) J' F
; |( k* j) g8 b+ Q4 M# u: t2 {
+ r5 `0 D, ]; G0 \" f5 X3 P+ D2 J4 [
3,小结1 G/ F* Y- p# _3 g/ M% M
本小节通过建立eth8到or1ksim之间的虚拟网桥,实现了simulator和host的数据交换,这样,如果向or1ksim中添加模块,编写对应的linux驱动并编译成ko文件之后,我们就可以通过这种方式访问并加载ko文件来测试添加的模块了。 |
|