引言
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!