现在的位置: 首页 > 综合 > 正文

OpenRisc-65-关于or1ksim模拟运行linux时如何访问本地文件的问题的分析与解决

2014年04月04日 ⁄ 综合 ⁄ 共 2152字 ⁄ 字号 评论关闭

引言

simulator,顾名思义,就是用来模拟硬件系统的,所以越接近实际情况越好。我们在实际下板测试时,启动linux之后,经常会访问主机上的文件。比如我们写完一个设备的driver,生成ko文件之后,最方便的加载方式就是用板子挂载主机上的nfs来实现对ko文件的访问(http://blog.csdn.net/rill_zhen/article/details/8700937)。
那么,在用or1ksim 模拟linux运行时,linux启动之后,如何访问主机上的文件呢?
本小节就解决这个问题。

1,基本思路

和实际板子相同,仍然采用板子挂载主机的nfs,来实现or1ksim和主机的数据交换。
由于or1ksim本身也是一个运行在主机上的软件,or1ksim中的eth也是虚拟的,所以如果想实现or1ksim挂载主机的nfs,首先要保障网络的畅通,网络包括虚拟和实体两种,板子挂载主机采用的是实体网络,or1ksim显然要使用虚拟网络。

这就需要建立主机的eth8(我的虚拟机的网络接口为eth8),到or1ksim的eth0(or1ksim运行linux之后的网络接口为eth0)的虚拟网络通路。

整体结构如下:

通过阅读or1ksim的文档,我们可以知道or1ksim的网络的外部接口类型为‘tap’,接口为‘tap0’,这个信息也可以在or1ksim的配置文件(or1ksim.cfg)中找到相关信息。如下所示:

or1ksim.cfg:

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

所以,我们需要建立一个网桥(bridge),建立eth8的虚拟访问端口(tap0),一旦建立了tap0,or1ksim就可以通过访问tap0,来实现对eth8的访问,也就实现了对主机文件的访问。

2,实现步骤

了解了其工作机制之后,我们就需要搭建eth8到or1ksim之间的网桥了,步骤如下:

1>安装openvpn

sudo apt-get install openvpn

2>安装brctl

sudo apt-get install bridge-utils

3>创建bridge

在安装完上面两个tool之后,我们就可以创建or1ksim访问的tap0了,这一步or1ksim提供了两个shell脚本,一个用来创建,一个用来结束。

创建:

Usage: ./brstart-static.sh <username> <groupname> <bridge> <eth> <tap>

sudo ./brstart-static.sh openrisc openrisc bridge_rill eth8 tap0

这里需要主要的是or1ksim模拟运行linux时,其默认的ip地址是192.168.1.100,所以在创建tap0之前最好配置一下本地的ip地址:

sudo ifconfig eth8 192.168.1.120

结束:

Usage: ./brend-static.sh <bridge> <eth> <tap>

如果想结束前面创建的tap0,可通过如下命令实现:

sudo ./brend-static bridge_rill eth8 tap0

创建tap0之后效果如下图所示:

4>使能nfs server

在创建好tap0之后,我们还需要使能nfs server,以便or1ksim访问。

这一步我们大家比较熟悉了,如有疑问,请参考:http://blog.csdn.net/rill_zhen/article/details/8700937

5>用or1ksim运行linux

一切准备就绪,我们就可以运行linux了,命令如下:

sim -f ~/soc-design/linux/arch/openrisc/or1ksim.cfg ~/soc-design/linux/vmlinux

其实,这一步我们之前也介绍过,如有疑问请参考:http://blog.csdn.net/rill_zhen/article/details/8443882

6>测试验证

在linux启动之后,我们就可以挂载上面我们使能的nfs server了。

mkdir nfs
mount -t nfs -o nolock 192.168.1.120:/home/openrisc/nfs nfs

这里需要注意的是如果挂载失败的话,可以ping一下,确保能ping通。

如果一切顺利,我们可以看到,我们已经可以挂载主机的nfs,并可以访问主机上的文件了。

如下图所示:

3,小结

本小节通过建立eth8到or1ksim之间的虚拟网桥,实现了simulator和host的数据交换,这样,如果向or1ksim中添加模块,编写对应的linux驱动并编译成ko文件之后,我们就可以通过这种方式访问并加载ko文件来测试添加的模块了。

Enjoy!

参考文献:

or1ksim用户手册,配置文件和脚本。

http://download.csdn.net/detail/rill_zhen/6924635

抱歉!评论已关闭.