popcornlinux系统平台搭建

Popcorn系统搭建

参考资料 VM Setup · ssrg-vt/popcorn-kernel Wiki · GitHubVM network using tap · ssrg-vt/popcorn-kernel Wiki · GitHub

1.概述

该文档用于描述如何使用qemu虚拟机为popcorn linux系统设置测试环境,我们将在x86主机(采用虚拟机)上运行两个虚拟机(一个x86,一个arm),为了简化测试,我们将在主机(不在虚拟机内部)编译内核,并使用主机文件系统上的内核启动虚拟机

--------------   --------------
|   Node 0   |   |   Node 1   |
|            |   |            |
|    x86     |   |    arm     |
| 10.2.1.100 |   | 10.2.1.101 |
--------------   --------------
|  qem-x86   |   |  qemu-arm  |
-------------------------------
|  linux-x86       linux-arm  |
|                             |   -----------------
|         host (x86)          |   |     Gateway    |
|      192.168.199.146        |---| 192.168.199.1  |--- Internet
-------------------------------   -----------------


2.实验环境

宿主机:ubuntu 18.04(本次实验使用vmware虚拟机模拟ubuntu系统)

磁盘大小:使用虚拟机的话最好不少于60G(非常关键,因为要下载的文件较大,如果磁盘开的不够需要重新安装系统,很麻烦)

RAM:8G (下面的 qemu 脚本为每个 VM 分配 2G RAM。可以在脚本中更改 -m 选项以使用不同大 小的内存)

ps:如果使用虚拟机作为宿主机,需要在vmware中开启虚拟化,否则在启动x86或arm虚拟机时会报错,如下图直接勾选两者即可
在这里插入图片描述

3.搭建准备

1安装所需包

$ sudo apt-get update
$ sudo apt-get install build-essential libssl-dev libncursesw5-dev git curl bc

2下载内核源码和磁盘镜像

注意:下载之前要翻墙

ItemFilenameURL
Kernel sourcepopcorn-kernel.tar.gzhttps://github.com/ssrg-vt/popcorn-kernel/archive/linux-4.4.137.tar.gz
x86 VM imagex86.imghttps://drive.google.com/open?id=0B7RfKPGm2YZsaURxTVh5ZTMyTk0
arm VM imagearm.imghttps://drive.google.com/open?id=0B7RfKPGm2YZsaF9rdkZTLVAxX3M

使用共享文件夹的方式将下载的文件复制到虚拟机中,将下以上三个文件放在同一目录下,下载后相应的重命名内核文件,目录下应包含以下三个文件

$ ls
arm.img     popcorn-kernel.tar.gz   x86.img

解压内核源码

$ tar -xzf popcorn-kernel.tar.gz

或者可以直接从github导入内核源码

$ git clone https://github.com/ssrg-vt/popcorn-kernel.git

4.设置主机网络接口

1.为宿主机创建两个虚拟网卡tap0和tap1,并设置ip规则

sudo ip tuntap add mode tap tap0
sudo ip addr add 10.2.0.1/24 dev tap0
sudo ip link set tap0 up

sudo ip tuntap add mode tap tap1
sudo ip addr add 10.2.1.1/24 dev tap1
sudo ip link set tap1 up

sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE	//ens33需要替换
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

注意:ens33为我的宿主机的网卡,你需要替换成你的宿主机的网卡

2.打开路由转发功能

$ sudo vim /etc/sysctl.conf
...
net.ipv4.ip_forward = 1 //在sysctl.conf添加这条规则即可,若有这条规则则修改即可
...

$ sysctl -p /etc/sysctl.conf 

3.重启网络配置

$ sudo /etc/init.d/networking restart

4.网络配置查看

在这里插入图片描述

5.配置并启动x86虚拟机

1.安装qemu包以模拟x86

$ sudo apt-get install qemu-system-x86

2.为x86虚拟机创建工作目录

$ cp -r popcorn-kernel-linux-4.4.137/ linux-x86
$ cp linux-x86/kernel/popcorn/configs/config-x86_64-qemu linux-x86/.config

3.编译内核

make -C linux-x86 -j 4

4.启动x86虚拟机(必须开启vmware的虚拟化,第2节所提到的,否则无法启动)

sudo qemu-system-x86_64 \
    -enable-kvm -cpu host -smp 1 -m 2048 -no-reboot -nographic \
    -drive id=root,media=disk,file=x86.img \
    -net nic,macaddr=a6:5a:0d:31:01:46 -net tap,ifname=tap0 \
    -kernel linux-x86/arch/x86/boot/bzImage \
    -append "root=/dev/sda1 console=ttyS0"

进入虚拟机后查看网络配置,如不符合预期需要配置tap0网卡(root密码为popcorn)

$ cat /etc/network/interfaces //查看网络配置文件

在这里插入图片描述

如果不符合上述预期,则修改网络配置

$ sudo vim /etc/network/interfaces //修改网络配置文件

使用ifconfig命令查看配置,如果不符合预期同样要修改

在这里插入图片描述

$sudo ifconfig eth0 10.2.0.100 netmask 255.255.255.0 //修改网络配置

6.配置并启动arm虚拟机

1.安装qemu包和arm交叉编译工具

$ sudo apt-get install qemu-system-arm
$ sudo apt-get gcc-aarch64-linux-gnu  //安装交叉编译工具链

2.为arm虚拟机创建工作目录

$ cp -r popcorn-kernel-linux-4.4.137/ linux-arm 
$ cp linux-arm/kernel/popcorn/configs/config-arm64-qemu linux-arm/.config

3.交叉编译arm内核

ARCH="arm64" make -C linux-arm -j 4

4.启动arm虚拟机(必须开启vmware的虚拟化,第2节所提到的,否则无法启动)

sudo qemu-system-aarch64 \
    -machine virt -cpu cortex-a57 -m 2048 -nographic \
    -drive id=root,if=none,media=disk,file=arm.img \
    -device virtio-blk-device,drive=root \
    -netdev type=tap,id=net0,ifname=tap1 \
    -device virtio-net-device,netdev=net0,mac=a6:5a:0d:31:02:13 \
    -kernel linux-arm/arch/arm64/boot/Image \
    -append "root=/dev/vda console=ttyAMA0"

进入虚拟机后查看网络配置,如不符合预期需要配置tap1网卡

$ cat /etc/network/interfaces.d/eth0 //查看网络配置文件

在这里插入图片描述

如果不符合上述预期,则修改网络配置

$ sudo vim /etc/network/interfaces.d/eth0 //修改网络配置文件

使用ifconfig命令查看配置,如果不符合预期同样要修改

在这里插入图片描述

$sudo ifconfig eth0 10.2.1.100 netmask 255.255.255.0 //修改网络配置

7.启动Popcorn消息层

1.在主机上同时修改两个内核的linux-x86/msg_layer/config.h(linux-arm/msg_layer/config.h)的配置文件

$ sudo vim linux-x86/msg_layer/config.h
$ sudo vim linux-arm/msg_layer/config.h

2.将以下配置信息添加或修改到配置文件中

const char *ip_addresses[] = {
    "10.2.0.100", /* x86 address */
    "10.2.1.100", /* arm address */
}

3.编译x86和arm的消息传递模块

$ sudo make -C linux-x86 -j 4 msg_layer/msg_socket.ko  //x86
$ sudo ARCH="arm64" make -C linux-arm -j 4 msg_layer/msg_socket.ko  //arm

4.将消息传递模块复制到虚拟机中

$ scp linux-x86/msg_layer/msg_socket.ko popcorn@10.2.0.100: 
$ scp linux-arm/msg_layer/msg_socket.ko popcorn@10.2.1.100:

5.分别在两个虚拟机中加载相应的模块

popcorn@x86:~$ sudo insmod ./msg_socket.ko
popcorn@arm:~$ sudo insmod ./msg_socket.ko

结果如下

在这里插入图片描述

如果加载模块时出现卡住的情况,请检查x86虚拟机和arm虚拟机的通信情况,查看是否第4节网络配置出现问题

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值