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

#技术风云榜#关于or1ksim模拟运行linux时如何访问本地文件的问题的分析与解决

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-11-12 13:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
+ i/ {6 q6 L+ F7 C/ d/ m! k
引言
4 Y4 Z3 o+ f) D- O0 esimulator,顾名思义,就是用来模拟硬件系统的,所以越接近实际情况越好。我们在实际下板测试时,启动linux之后,经常会访问主机上的文件。比如我们写完一个设备的driver,生成ko文件之后,最方便的加载方式就是用板子挂载主机上的nfs来实现对ko文件的访问。 ! g! O$ l1 J9 q* ^# N# q9 q+ z
那么,在用or1ksim 模拟linux运行时,linux启动之后,如何访问主机上的文件呢?
+ N  v( d9 {4 P) I, J, }本小节就解决这个问题。 ! W  ?& K7 i9 p$ j! M& Q$ T

2 m, G# p5 S0 q1 e# J
% U4 n( i7 l$ z1,基本思路! q* q- y7 r  |9 ^
和实际板子相同,仍然采用板子挂载主机的nfs,来实现or1ksim和主机的数据交换。 5 P) L# j/ I2 T* v
由于or1ksim本身也是一个运行在主机上的软件,or1ksim中的eth也是虚拟的,所以如果想实现or1ksim挂载主机的nfs,首先要保障网络的畅通,网络包括虚拟和实体两种,板子挂载主机采用的是实体网络,or1ksim显然要使用虚拟网络。
. s, {6 H; z" L这就需要建立主机的eth8(我的虚拟机的网络接口为eth8),到or1ksim的eth0(or1ksim运行linux之后的网络接口为eth0)的虚拟网络通路。- U# R" _: b4 h+ A  _
6 R9 L+ A! p7 ^( M
整体结构如下:
$ |9 K9 p: b# u8 S' C0 \2 [$ v$ z" F( k) g
- H% N$ C. w+ h& _, D
+ A+ c: o) l5 K6 L4 F
通过阅读or1ksim的文档,我们可以知道or1ksim的网络的外部接口类型为‘tap’,接口为‘tap0’,这个信息也可以在or1ksim的配置文件(or1ksim.cfg)中找到相关信息。如下所示: ! |* N) z0 k& j$ f# P
or1ksim.cfg:5 F$ ~5 j# ~1 Y4 B

  g2 Q; ~; q  o" O% G
  • 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
    4 F: ~& J6 w. Z6 [; L& ^( M0 `

; W: }, `4 o# ?# v% r* q3 Y - ~' R1 F) Y3 j7 S# C' m* R

, W% K# x2 Q* a! V* q# |! X8 ^1 G( Y/ Y, n, s- k7 M9 S4 u
所以,我们需要建立一个网桥(bridge),建立eth8的虚拟访问端口(tap0),一旦建立了tap0,or1ksim就可以通过访问tap0,来实现对eth8的访问,也就实现了对主机文件的访问。
  {0 c- d0 O& j  B7 }% v9 z3 ^, G7 G* c. g, x' i6 j
+ A* `+ N( W, J* ?0 u: ^% q: o
2,实现步骤. K" V) r( }' F) n* n1 d- ?
了解了其工作机制之后,我们就需要搭建eth8到or1ksim之间的网桥了,步骤如下:
2 z$ `4 {4 q, X  q1 I% y* S2 t5 Z) N) [$ p
1>安装openvpn3 R4 a$ W6 S/ n' z( {, P; P  t7 N
, y- t( P3 k  `  P/ a
) f: [' P8 f. O. |, k, T# g
sudo apt-get install openvpn
7 x  M2 m" n9 v3 `; z9 w* B# w2 O  c/ w9 u& }# V, l# i; W
2>安装brctl
* f3 }) h! u& x$ A6 d# T1 z6 A/ ^$ u" p4 p
7 q0 ]5 W; M) u6 ~# K9 t* n/ c
sudo apt-get install bridge-utils% v; w) A. M' }: Z  C+ Q2 m, N  U1 r
8 G9 m: p2 S$ l* J4 N" @
$ `( V3 h( x5 [. j3 F
3>创建bridge) W7 ~  @; g7 O( m# N
在安装完上面两个tool之后,我们就可以创建or1ksim访问的tap0了,这一步or1ksim提供了两个shell脚本,一个用来创建,一个用来结束。" q5 ~2 p7 J  D2 S/ R2 _3 z
& H. |* d" F! K/ W! E
创建:3 f/ N8 z( G. ]6 B8 S) N# S+ m
% L( x" {7 L( l2 @
Usage: ./brstart-static.sh <username> <groupname> <bridge> <eth> <tap>
( }9 Z! B) P( R1 o2 y  y# D% u. Y; s' T1 f1 _' o
sudo ./brstart-static.sh openrisc openrisc bridge_rill eth8 tap0$ X$ X  g( Y4 }0 g. o2 c
1 ?! [( K7 Z* ~1 {
这里需要主要的是or1ksim模拟运行linux时,其默认的ip地址是192.168.1.100,所以在创建tap0之前最好配置一下本地的ip地址:' @* N. \! @5 y% w+ b: a0 L

) }6 b" Z6 y6 R" y" ]
! o' K% N2 L5 y7 gsudo ifconfig eth8 192.168.1.1209 f. U( N8 ~3 o& y6 H6 V+ x
  i% q- U8 ?  d: G9 k
结束:
+ E. O  v7 Z* Q4 f! t' vUsage: ./brend-static.sh <bridge> <eth> <tap>9 v( i% A' }2 j+ ?3 O' H! x

2 h$ Z. d- Z. Y% G/ R$ \如果想结束前面创建的tap0,可通过如下命令实现:5 U; f# [) c2 C- e
sudo ./brend-static bridge_rill eth8 tap07 w8 }, A1 H2 {6 B, Z8 X
2 d6 ^) U, J# i6 d" r, @
创建tap0之后效果如下图所示:
' z0 j; N9 \3 x$ u# e: G6 h( ~. `4 M" E
! \; \0 p3 x) Y! N/ _
1 {7 m. d- W+ ?6 {! l" Z4 x1 X

+ ^+ k% \! t  p, A( c' X8 T- e6 R$ W4>使能nfs server5 [( N. ^2 V6 l: I
在创建好tap0之后,我们还需要使能nfs server,以便or1ksim访问。) e) q: S; h7 h" D7 v, h6 Z. `

" Y. T5 H( k( B) J* {% m& W6 \  W" z$ T+ ^2 m$ F
5>用or1ksim运行linux! M2 R. |# _2 T+ G
一切准备就绪,我们就可以运行linux了,命令如下:: K) I9 z7 `" w# u5 x( a2 t
, E# j3 T7 r! I- c
sim -f ~/soc-design/linux/arch/openrisc/or1ksim.cfg ~/soc-design/linux/vmlinux
8 }! J4 ~; f/ V9 n' ?: f' B/ J0 F9 C- w. q
  H" A6 V5 a9 E" \: W5 @
6>测试验证
( Z: H0 }+ h8 Q% t( A在linux启动之后,我们就可以挂载上面我们使能的nfs server了。
4 D6 c3 N) ?# ~9 ?
& E3 S$ I" e6 A7 _' G, R* xmkdir nfs8 ~% y0 P' O3 ~% W. Q$ `/ k5 ]
mount -t nfs -o nolock 192.168.1.120:/home/openrisc/nfs nfs8 Q- u2 ?' H4 n& W9 o
- ^: R( F- e4 l% ~
这里需要注意的是如果挂载失败的话,可以ping一下,确保能ping通。
3 i: K" f% @# s, l% }/ L如果一切顺利,我们可以看到,我们已经可以挂载主机的nfs,并可以访问主机上的文件了。
4 o& U# \8 M5 P) ^( V- o* {
4 _! ?/ i) _/ H. N/ N如下图所示:+ r4 |, W! h4 K. \+ u

. ?: _. `# h/ U% k2 t ! G  S  P: A! T0 ~4 L: w/ ^

  E+ k2 [- m8 V% r" t% @+ L
; h$ h( E6 B/ P1 D: e* A3 S( _# v$ F
! C1 {3 a1 Q: E8 c7 }+ U6 f3 y4 V
1 @3 H4 V5 d/ ?* z% e3,小结* X# ?4 R$ C4 R
本小节通过建立eth8到or1ksim之间的虚拟网桥,实现了simulator和host的数据交换,这样,如果向or1ksim中添加模块,编写对应的linux驱动并编译成ko文件之后,我们就可以通过这种方式访问并加载ko文件来测试添加的模块了。

该用户从未签到

2#
发表于 2020-11-12 14:18 | 只看该作者
关于or1ksim模拟运行linux时如何访问本地文件的问题的分析与解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-27 02:17 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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